diff --git a/Patch_FacialAnimation/1.5/Patches/FacialAnimationPatch.xml b/Patch_FacialAnimation/1.5/Patches/FacialAnimationPatch.xml
new file mode 100644
index 00000000..4d0c0061
--- /dev/null
+++ b/Patch_FacialAnimation/1.5/Patches/FacialAnimationPatch.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ /Defs/FacialAnimation.FaceAnimationDef[defName="AttackMelee"]/targetJobs
+
+ AM_InAnimation
+ AM_GrapplePawn
+
+
+
\ No newline at end of file
diff --git a/Source/AlienRacesPatch/AlienRacesPatch.csproj b/Source/AlienRacesPatch/AlienRacesPatch.csproj
index 1fcf78e4..36d97e45 100644
--- a/Source/AlienRacesPatch/AlienRacesPatch.csproj
+++ b/Source/AlienRacesPatch/AlienRacesPatch.csproj
@@ -1,7 +1,5 @@
-
-
net48
Library
diff --git a/Source/AnimationMod/AnimRenderer.cs b/Source/AnimationMod/AnimRenderer.cs
index 7e171b43..87c40965 100644
--- a/Source/AnimationMod/AnimRenderer.cs
+++ b/Source/AnimationMod/AnimRenderer.cs
@@ -182,9 +182,7 @@ private static void DrawSingle(AnimRenderer renderer, float? dt, Action eventOutput, bool cullDraw, Action labelDraw = null)
{
- Core.Log("Start draw 2");
if (IsDestroyed)
return;
@@ -736,8 +733,6 @@ public void Draw(float? atTime, float dt, Action eventO
if (item != null)
item.MirrorHorizontal = MirrorHorizontal;
- Core.Log("A");
-
if (eventOutput != null)
Seek(atTime, dt, e => eventOutput(this, e));
else
@@ -757,17 +752,11 @@ public void Draw(float? atTime, float dt, Action eventO
path.Draw(time);
timer2.GetElapsedMilliseconds(out SweepMS);
- Core.Log("B");
-
-
foreach (var snap in snapshots)
{
if (!ShouldDraw(snap))
continue;
- Core.Log($"Start {snap.PartName}");
-
-
var tex = ResolveTexture(snap);
if (tex == null)
continue;
@@ -803,8 +792,6 @@ public void Draw(float? atTime, float dt, Action eventO
bool useMPB = forceMPB || ov.UseMPB;
var color = snap.FinalColor;
- Core.Log($" - {snap.PartName} draw...");
-
int passes = 1;
for (int i = 0; i < passes; i++)
{
@@ -846,15 +833,11 @@ public void Draw(float? atTime, float dt, Action eventO
var finalMpb = useMPB ? pb : null;
- Core.Log("Pre render...");
AnimationRendererWorker?.PreRenderPart(snap, ov, ref mesh, ref matrix, ref mat, ref finalMpb);
- Core.Log("Post-Pre render...");
Graphics.DrawMesh(mesh, matrix, mat, 0, Camera, 0, finalMpb);
}
}
- Core.Log("Done");
-
DrawPawns(labelDraw);
timer.GetElapsedMilliseconds(out DrawMS);
@@ -991,9 +974,11 @@ protected void DrawPawns(Action labelDraw = null)
Patch_PawnUtility_IsInvisible.IsRendering = true;
Patch_PawnRenderer_DrawInvisibleShadow.Suppress = suppressShadow; // In 1.4 shadow rendering is baked into RenderPawnAt and may need to be prevented.
+ PrePawnSpecialRender?.Invoke(pawn, this);
pawn.Drawer.renderer.RenderPawnAt(pos, dir, true); // This direction here is not the final one.
+ PostPawnSpecialRender?.Invoke(pawn, this);
Patch_PawnRenderer_DrawInvisibleShadow.Suppress = false;
Patch_PawnUtility_IsInvisible.IsRendering = false;
}
diff --git a/Source/AnimationMod/AnimationMod.csproj b/Source/AnimationMod/AnimationMod.csproj
index 34dc7493..a8c3c8e3 100644
--- a/Source/AnimationMod/AnimationMod.csproj
+++ b/Source/AnimationMod/AnimationMod.csproj
@@ -1,7 +1,5 @@
-
-
net472
diff --git a/Source/AnimationMod/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs b/Source/AnimationMod/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs
index f9031aaf..0ce9295d 100644
--- a/Source/AnimationMod/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs
+++ b/Source/AnimationMod/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs
@@ -8,21 +8,20 @@ namespace AM.Patches;
///
/// Used to override drawing melee weapons.
///
-[HarmonyPatch(typeof(PawnRenderUtility), nameof(PawnRenderUtility.DrawEquipmentAndApparelExtras))]
+[HarmonyPatch(typeof(PawnRenderUtility), nameof(PawnRenderUtility.DrawEquipmentAiming))]
public static class Patch_PawnRenderer_DrawEquipment
{
[HarmonyPriority(Priority.First)]
[HarmonyBefore("com.yayo.yayoAni")]
- private static bool Prefix(Pawn pawn)
- {
- return WorkerMethod(pawn);
- }
-
- public static bool WorkerMethod(Pawn pawn)
+ private static bool Prefix(Thing eq)
{
if (!Core.Settings.AnimateAtIdle)
return true;
+ var pawn = eq.TryGetComp()?.Holder;
+ if (pawn == null)
+ return true;
+
var comp = pawn.GetComp();
if (comp == null)
return true; // Why would this ever be the case? Better safe than sorry though.
diff --git a/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnAt.cs b/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnAt.cs
index ec2ac8f6..eafb1a0b 100644
--- a/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnAt.cs
+++ b/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnAt.cs
@@ -7,14 +7,18 @@ namespace AM.Patches;
///
/// Simply prevents the regular RenderPawnAt method from running while a pawn in being animated.
/// This disables the regular rendering whenever a pawn in being animated.
+/// Additionally, modifies PawnRenderer.results to make sure that the RenderPawnInternal method gets called every frame
+/// while in an animation.
///
[HarmonyPatch(typeof(PawnRenderer), nameof(PawnRenderer.RenderPawnAt))]
public static class Patch_PawnRenderer_RenderPawnAt
{
public static bool AllowNext;
+ private static PawnRenderer.PreRenderResults? storedResultsTemp;
+
[HarmonyPriority(Priority.First)]
- public static bool Prefix(Pawn ___pawn)
+ public static bool Prefix(Pawn ___pawn, ref PawnRenderer.PreRenderResults ___results)
{
var anim = PatchMaster.GetAnimator(___pawn);
@@ -29,7 +33,25 @@ public static bool Prefix(Pawn ___pawn)
JobDriver_GrapplePawn.DrawEnsnaringRope(___pawn, job);
}
+ if (AllowNext)
+ {
+ storedResultsTemp = ___results;
+ ___results.showBody = true;
+ ___results.useCached = false;
+ ___results.valid = true;
+ }
+
AllowNext = false;
return true;
}
+
+ [HarmonyPriority(Priority.First)]
+ public static void Postfix(ref PawnRenderer.PreRenderResults ___results)
+ {
+ if (storedResultsTemp != null)
+ {
+ ___results = storedResultsTemp.Value;
+ storedResultsTemp = null;
+ }
+ }
}
\ No newline at end of file
diff --git a/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnInternal.cs b/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnInternal.cs
index df7d3e62..6d5e1d48 100644
--- a/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnInternal.cs
+++ b/Source/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnInternal.cs
@@ -32,8 +32,18 @@ public enum DrawMode
[HarmonyPriority(Priority.Last)] // As late as possible. We want to be the last to modify results.
[HarmonyAfter("com.yayo.yayoAni")] // Go away.
[HarmonyBefore("rimworld.Nals.FacialAnimation")] // Must go before facial animation otherwise the face gets fucky.
- private static bool Prefix(Pawn ___pawn, ref PawnDrawParms parms)
+ private static bool Prefix(PawnRenderer __instance, Pawn ___pawn, ref PawnDrawParms parms)
{
+ //parms.matrix
+
+ __instance.renderTree.ParallelPreDraw(parms);
+
+ return true;
+
+ // Do not modify when the result will be stored in cache.
+ if (parms.Cache)
+ return true;
+
float angle = parms.matrix.rotation.eulerAngles.y;
float oldAngle = angle;
@@ -42,6 +52,19 @@ private static bool Prefix(Pawn ___pawn, ref PawnDrawParms parms)
ref Rot4 bodyFacing = ref parms.facing;
ref PawnRenderFlags flags = ref parms.flags;
+ if (AllowNext)
+ {
+ //parms.matrix *= Matrix4x4.Scale(0.5f * Vector3.one);
+ //__instance.renderTree.SetDirty();
+ //__instance.EnsureGraphicsInitialized();
+ //parms.coveredInFoam = true;
+ AllowNext = false;
+ return true;
+ }
+
+
+ return false;
+
bool result = ModifyRenderData(___pawn, ref bodyFacing, ref angle, ref flags, ref renderBody);
if (renderBody)
@@ -52,7 +75,7 @@ private static bool Prefix(Pawn ___pawn, ref PawnDrawParms parms)
float delta = oldAngle - angle;
if (Math.Abs(delta) > 0.001f)
{
- parms.matrix *= Matrix4x4.Rotate(Quaternion.Euler(0, delta, 0));
+ parms.matrix *= Matrix4x4.Rotate(Quaternion.Euler(45, delta, 0));
}
return result;
@@ -74,25 +97,29 @@ public static bool ModifyRenderData(Pawn ___pawn, ref Rot4 bodyFacing, ref float
{
if (!DoNotModify)
{
- var part = NextDrawMode == DrawMode.HeadOnly ? anim.GetPawnHead(___pawn) : anim.GetPawnBody(___pawn);
- var snapshot = anim.GetSnapshot(part);
- angle = snapshot.GetWorldRotation();
-
- bodyFacing = NextDrawMode == DrawMode.HeadOnly ? HeadRotation : snapshot.GetWorldDirection();
-
- switch (NextDrawMode)
- {
- case DrawMode.BodyOnly:
- // Render head stump, do not render head gear.
- flags |= PawnRenderFlags.HeadStump;
- flags &= ~PawnRenderFlags.Headgear;
- break;
-
- case DrawMode.HeadOnly:
- // Do not render body.
- renderBody = false;
- break;
- }
+ //var part = NextDrawMode == DrawMode.HeadOnly ? anim.GetPawnHead(___pawn) : anim.GetPawnBody(___pawn);
+ //var snapshot = anim.GetSnapshot(part);
+ //angle = snapshot.GetWorldRotation();
+
+ angle = 5;
+ bodyFacing = Rot4.East;
+ renderBody = false;
+
+ //bodyFacing = NextDrawMode == DrawMode.HeadOnly ? HeadRotation : snapshot.GetWorldDirection();
+
+ //switch (NextDrawMode)
+ //{
+ // case DrawMode.BodyOnly:
+ // // Render head stump, do not render head gear.
+ // flags |= PawnRenderFlags.HeadStump;
+ // flags &= ~PawnRenderFlags.Headgear;
+ // break;
+
+ // case DrawMode.HeadOnly:
+ // // Do not render body.
+ // renderBody = false;
+ // break;
+ //}
}
if (!AllowNext)
@@ -106,7 +133,7 @@ public static bool ModifyRenderData(Pawn ___pawn, ref Rot4 bodyFacing, ref float
private static bool RenderStandaloneHeadMode(ref Rot4 bodyFacing, ref PawnRenderFlags flags, ref float angle, ref bool renderBody)
{
// Add headgear, remove head stump.
- flags |= PawnRenderFlags.Headgear;
+ flags |= PawnRenderFlags.Headgear | PawnRenderFlags.DrawNow;
flags &= ~PawnRenderFlags.HeadStump;
angle = StandaloneHeadRotation;
@@ -114,4 +141,4 @@ private static bool RenderStandaloneHeadMode(ref Rot4 bodyFacing, ref PawnRender
renderBody = false;
return true;
}
-}
\ No newline at end of file
+}
diff --git a/Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs b/Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs
index b646d8f8..2e0c0c27 100644
--- a/Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs
+++ b/Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs
@@ -4,9 +4,6 @@
namespace AM.Patches;
-/*
- * Note: this changed in RW 1.5, the method that needs patching has changed.
- */
///
/// Make pawns be considered invisible during animations.
diff --git a/Source/CAI5000Patch/CAI5000Patch.csproj b/Source/CAI5000Patch/CAI5000Patch.csproj
index f81dd55e..562a1483 100644
--- a/Source/CAI5000Patch/CAI5000Patch.csproj
+++ b/Source/CAI5000Patch/CAI5000Patch.csproj
@@ -1,7 +1,5 @@
-
-
net472
Library
diff --git a/Source/CombatExtendedPatch/CombatExtendedPatch.csproj b/Source/CombatExtendedPatch/CombatExtendedPatch.csproj
index 3494c348..d49ea916 100644
--- a/Source/CombatExtendedPatch/CombatExtendedPatch.csproj
+++ b/Source/CombatExtendedPatch/CombatExtendedPatch.csproj
@@ -1,7 +1,5 @@
-
-
net472
Library
diff --git a/Source/GlobalCommon.targets b/Source/Directory.Build.props
similarity index 100%
rename from Source/GlobalCommon.targets
rename to Source/Directory.Build.props
diff --git a/Source/LightsaberPatch/LightsaberPatch.csproj b/Source/LightsaberPatch/LightsaberPatch.csproj
index eeef3846..bbf91bc2 100644
--- a/Source/LightsaberPatch/LightsaberPatch.csproj
+++ b/Source/LightsaberPatch/LightsaberPatch.csproj
@@ -1,7 +1,5 @@
-
-
net480
Library
diff --git a/Source/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj b/Source/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj
index 67ae2da0..ba34e89c 100644
--- a/Source/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj
+++ b/Source/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj
@@ -1,7 +1,5 @@
-
-
net472
Library
diff --git a/Source/TacticowlPatch/TacticowlPatch.csproj b/Source/TacticowlPatch/TacticowlPatch.csproj
index 1200f0bd..77e71ccf 100644
--- a/Source/TacticowlPatch/TacticowlPatch.csproj
+++ b/Source/TacticowlPatch/TacticowlPatch.csproj
@@ -1,7 +1,5 @@
-
-
net472
Library