offsets, dynamically set in animation
animation prop graphics, absolute positioning, changing textures, can be used in animation
This commit is contained in:
c0ffee 2024-04-21 18:49:24 -07:00
parent 6b5c67018a
commit 32f3b1522f
34 changed files with 424 additions and 144 deletions

View File

@ -10,7 +10,7 @@
<!-- Note: props always return graphic_multi; set cardinal textures to blank and only north in anim if only one tex-->
<!-- or draw east, south, and west directions, use them in animations? -->
<animPropProperties>
<animPropProperties Class="Rimworld_Animations.PawnRenderNodeProperties_GraphicVariants">
<debugLabel>AnimProp_Banana</debugLabel>
<nodeClass>Rimworld_Animations.PawnRenderNode_GraphicVariants</nodeClass>
<workerClass>Rimworld_Animations.PawnRenderNodeWorker_GraphicVariants</workerClass>
@ -26,7 +26,27 @@
<li>AnimationProps/Cat/Cat1</li>
<li>AnimationProps/Cat/Cat2</li>
</texPathVariants>
<absolutePosition>True</absolutePosition>
</animPropProperties>
</Rimworld_Animations.AnimationPropDef>
<PawnRenderNodeTagDef>
<defName>RenderNodeTag_Genitals</defName>
</PawnRenderNodeTagDef>
<Rimworld_Animations.AnimationPropDef>
<defName>AnimationProp_Genitals</defName>
<animPropProperties>
<debugLabel>AnimProp_Genitals</debugLabel>
<useGraphic>false</useGraphic>
<tagDef>RenderNodeTag_Genitals</tagDef>
<parentTagDef>Body</parentTagDef>
<!-- for height -->
<overlayLayer>Head</overlayLayer>
<baseLayer>95</baseLayer>
</animPropProperties>
</Rimworld_Animations.AnimationPropDef>
</Defs>

View File

@ -24,53 +24,18 @@
</li>
</loopOptions>
</li>
<!--
<li Class="Rimworld_Animations.AnimationStage_Branch">
<paths>
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
<loops>10</loops>
<loopOptions>
<li>
<probability>3</probability>
<animationDefs>
<li>TestAnimation1</li>
<li>TestAnimation1</li>
</animationDefs>
</li>
<li>
<probability>1</probability>
<animationDefs>
<li>TestAnimation1</li>
<li>TestAnimation1</li>
</animationDefs>
</li>
</loopOptions>
</li>
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
<loops>10</loops>
<loopOptions>
<li>
<probability>3</probability>
<animationDefs>
<li>TestAnimation2</li>
<li>TestAnimation2</li>
</animationDefs>
</li>
<li>
<probability>1</probability>
<animationDefs>
<li>TestAnimation2</li>
<li>TestAnimation2</li>
</animationDefs>
</li>
</loopOptions>
</li>
<li>GroupAnimationDef1_1</li>
<li>GroupAnimationDef1_2</li>
</paths>
</li>
-->
</animationStages>
<contexts>
<li Class="Rimworld_Animations.GroupAnimationContext_RJWSex">
<interactionDefs>
@ -87,12 +52,11 @@
</li>
</contexts>
<!--
<OffsetDefs>
<li>GroinToAppropriateHeight</li>
<li>GroinToAppropriateHeight</li>
</OffsetDefs>
-->
<offsetDefs>
<li>GroinToAppropriateHeight</li> <!-- first pawn in animation -->
<li>GroinToAppropriateHeight</li> <!-- second pawn in animation -->
</offsetDefs>
</Rimworld_Animations.GroupAnimationDef>
</Defs>

View File

@ -1,38 +1,44 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<Rimworld_Animations.OffsetDef>
<Rimworld_Animations.AnimationOffsetDef>
<defName>GroinToAppropriateHeight</defName>
<bodyTypeOffsets>
<li>
<bodyType>Male</bodyType>
<offset>(0, 0, 0.5)</offset>
<offsets>
<li Class="Rimworld_Animations.AnimationOffset_Single">
<races>
<li>Alien_Orassan</li>
</races>
<offset>(0, 0, 5)</offset>
</li>
</bodyTypeOffsets>
<raceOffsets>
<li Class="Rimworld_Animations.RaceOffsets_BodyTypes" MayRequire="erdelf.HumanoidAlienRaces,Minecraft.Mod">
<def>MinecraftCreeper</def>
<genderGraphics>
<Female>
<Hulk>(0, 0, 0.5)</Hulk>
<Thin>(0, 0, 0.3)</Thin>
</Female>
<Male>
<Hulk>(0, 0, 0.5)</Hulk>
<Thin>(0, 0, 0.3)</Thin>
</Male>
</genderGraphics>
<li Class="Rimworld_Animations.AnimationOffset_BodyType">
<races>
<li>Human</li>
</races>
<offsets>
<li><bodyType>Hulk</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Thin</bodyType><offset>(0, 0, 0.3)</offset></li>
<li><bodyType>Female</bodyType><offset>(0, 0, 0.4)</offset></li>
</offsets>
</li>
<li Class="Rimworld_Animations.RaceOffsets_DifferentBodyTypes" MayRequire="Specific.Mod,Other.Cool.Mod">
<def>MinecraftPig</def>
<bodyType>Male</bodyType>
<offset>(0, 0, -0.5)</offset>
<li Class="Rimworld_Animations.AnimationOffset_BodyTypeGendered" MayRequire="erdelf.HumanoidAlienRaces,Minecraft.Mod">
<races>
<li>MinecraftCreeper</li>
</races>
<offsetsMale>
<li><bodyType>Hulk</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Male</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Female</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Thin</bodyType><offset>(0, 0, 0.3)</offset></li>
</offsetsMale>
<offsetsFemale>
<li><bodyType>Hulk</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Male</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Female</bodyType><offset>(0, 0, 0.5)</offset></li>
<li><bodyType>Thin</bodyType><offset>(0, 0, 0.3)</offset></li>
</offsetsFemale>
</li>
<li Class="Rimworld_Animations.RaceOffsets_DifferentBodyTypes" MayRequire="Specific.Minecraft.Mod">
<def>MinecraftPig</def>
<bodyType>Female</bodyType>
<offset>(0, 0, -0.5)</offset>
</li>
</raceOffsets>
</Rimworld_Animations.OffsetDef>
</offsets>
</Rimworld_Animations.AnimationOffsetDef>
</Defs>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<!-- add offset rendersubworker to all pawn render tree defs -->
<Operation Class="PatchOperationSequence">
<success>Always</success>
<operations>
<li Class="PatchOperationConditional">
<xpath>/Defs/PawnRenderTreeDef/root/subworkerClasses</xpath>
<success>Always</success>
<nomatch Class="PatchOperationAdd">
<xpath>/Defs/PawnRenderTreeDef/root</xpath>
<value>
<subworkerClasses />
</value>
</nomatch>
</li>
<li Class="PatchOperationAdd">
<xpath>/Defs/PawnRenderTreeDef/root/subworkerClasses</xpath>
<value>
<li>Rimworld_Animations.PawnRenderSubWorker_ChangeOffset</li>
</value>
</li>
</operations>
</Operation>
</Patch>

View File

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Rimworld_Animations {
public class BodyTypeOffset {
public Vector2? Male;
public Vector2? Female;
public Vector2? Thin;
public Vector2? Hulk;
public Vector2? Fat;
}
}

View File

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
{
public class AnimationOffsetDef : Def
{
public List<BaseAnimationOffset> offsets;
public Vector3 FindOffset(Pawn pawn)
{
foreach (BaseAnimationOffset animOffset in offsets)
{
if (animOffset.appliesToPawn(pawn)) {
Vector3? offset = animOffset.getOffset(pawn);
return (offset == null ? Vector3.zero : (Vector3)offset);
}
}
return Vector3.zero;
}
}
}

View File

@ -0,0 +1,23 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
{
public class AnimationOffset_BodyType : BaseAnimationOffset
{
public List<BodyTypeOffset> offsets;
public override Vector3? getOffset(Pawn pawn)
{
return offsets.Find(x => x.bodyType == pawn.story.bodyType)?.offset;
}
}
}

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
{
public class AnimationOffset_BodyTypeGendered : BaseAnimationOffset
{
public List<BodyTypeOffset> offsetsMale;
public List<BodyTypeOffset> offsetsFemale;
public override Vector3? getOffset(Pawn pawn)
{
if (pawn.gender == Gender.Female)
{
return offsetsFemale.Find(x => x.bodyType == pawn.story.bodyType)?.offset;
}
else
{
return offsetsMale.Find(x => x.bodyType == pawn.story.bodyType)?.offset;
}
}
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
{
public class AnimationOffset_Single : BaseAnimationOffset
{
public Vector3 offset;
public override Vector3? getOffset(Pawn pawn)
{
return offset;
}
}
}

View File

@ -0,0 +1,25 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
{
public abstract class BaseAnimationOffset
{
public List<ThingDef> races;
public abstract Vector3? getOffset(Pawn pawn);
public bool appliesToPawn(Pawn pawn)
{
return races.Contains(pawn.def);
}
}
}

View File

@ -0,0 +1,17 @@
using RimWorld;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Rimworld_Animations
{
public class BodyTypeOffset
{
public BodyTypeDef bodyType;
public Vector3 offset;
}
}

View File

@ -10,7 +10,7 @@ namespace Rimworld_Animations
public class AnimationPropDef : Def
{
public PawnRenderNodeProperties_GraphicVariants animPropProperties;
public PawnRenderNodeProperties animPropProperties;
}
}

View File

@ -18,6 +18,7 @@ namespace Rimworld_Animations
public override Vector3 OffsetAtTick(int tick, PawnDrawParms parms)
{
//Todo: Use this for bodyoffsets
//or maybe make a rendersubworker for it instead
return base.OffsetAtTick(tick, parms);
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
@ -12,6 +13,7 @@ namespace Rimworld_Animations
public int numActors;
public List<AnimationStage> animationStages;
public List<BaseGroupAnimationContext> contexts;
public List<AnimationOffsetDef> offsetDefs;
public bool canAnimationBeUsed(List<Pawn> actors, out int reorder)
@ -48,5 +50,12 @@ namespace Rimworld_Animations
return animations;
}
public Vector3? GetOffset(int actor, Pawn pawn, int reorder = 0)
{
//element at or default to stop errors
if (offsetDefs == null) return null;
return offsetDefs[(actor + reorder) % numActors].FindOffset(pawn);
}
}
}

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace Rimworld_Animations
{
public class AnimationStage_Branch : AnimationStage
{
public List<GroupAnimationDef> paths;
public override List<AnimationDef> GetAnimations(int actorNumber, int seed)
{
List<AnimationDef> animationDefs = new List<AnimationDef>();
//loop thru the selected groupanimationdef path
foreach (AnimationStage stage in paths[(seed * 59) % paths.Count].animationStages)
{
animationDefs.AddRange(stage.GetAnimations(actorNumber, seed));
}
return animationDefs;
}
}
}

View File

@ -19,6 +19,7 @@ namespace Rimworld_Animations {
private List<AnimationDef> animationQueue;
private BaseExtendedAnimatorAnchor anchor;
private Vector3? offset;
private bool isAnimating = false;
@ -38,12 +39,23 @@ namespace Rimworld_Animations {
}
}
public Vector3? Offset
{
get
{
return offset;
}
set
{
this.offset = value;
}
}
public Vector3 getAnchor()
{
return anchor.getDrawPos();
}
public override void CompTick()
{
if (isAnimating)
@ -99,19 +111,21 @@ namespace Rimworld_Animations {
isAnimating = false;
animationQueue = null;
anchor = null;
offset = null;
pawn.Drawer.renderer.SetAnimation(null);
}
public void PlayGroupAnimation(List<AnimationDef> groupAnimation)
public void PlayGroupAnimation(List<AnimationDef> groupAnimation, Vector3? offset)
{
this.Offset = offset;
animationQueue = groupAnimation;
PlayNextAnimation();
}
public void PlayGroupAnimation(List<AnimationDef> groupAnimation, BaseExtendedAnimatorAnchor anchor)
public void PlayGroupAnimation(List<AnimationDef> groupAnimation, Vector3? offset, BaseExtendedAnimatorAnchor anchor)
{
this.anchor = anchor;
PlayGroupAnimation(groupAnimation);
PlayGroupAnimation(groupAnimation, offset);
}
public override void PostExposeData()
@ -137,8 +151,16 @@ namespace Rimworld_Animations {
//if animation makes use of prop,
if (AnimationMakesUseOfProp(animationProp))
{
PawnRenderNodeProperties props = animationProp.animPropProperties;
//create new render node
PawnRenderNode_GraphicVariants animRenderNode = new PawnRenderNode_GraphicVariants(pawn, animationProp.animPropProperties, pawn.Drawer.renderer.renderTree);
PawnRenderNode animRenderNode = (PawnRenderNode)Activator.CreateInstance(props.nodeClass, new object[] {
this.pawn,
props,
pawn.Drawer.renderer.renderTree
});
animRenderNodes.Add(animRenderNode);
}

View File

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace Rimworld_Animations
{
public class AnimationStage_Branch : AnimationStage
{
public List<AnimationStage> paths;
public override List<AnimationDef> GetAnimations(int actorNumber, int seed)
{
return paths[(seed * 59) % paths.Count].GetAnimations(actorNumber, seed);
}
}
}

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
@ -13,9 +14,11 @@ namespace Rimworld_Animations
[HarmonyPatch(typeof(PawnRenderTree), "TryGetMatrix")]
public class HarmonyPatch_PawnRenderTree
{
public static void Prefix(PawnRenderTree __instance, Dictionary<PawnRenderNodeTagDef, PawnRenderNode> ___nodesByTag, PawnRenderNode node, ref PawnDrawParms parms)
public static bool Prefix(PawnRenderTree __instance, Dictionary<PawnRenderNodeTagDef, PawnRenderNode> ___nodesByTag, PawnRenderNode node, ref PawnDrawParms parms, ref Matrix4x4 matrix, ref bool __result)
{
/*
* Facing fix
*/
//find lowest parent that is animating, or nothing if not animating
PawnRenderNode animatingNode = node;
while (animatingNode != null
@ -30,6 +33,27 @@ namespace Rimworld_Animations
//change parm to facing to animate correctly
parms.facing = animatingNodeAnimationWorker.facingAtTick(__instance.AnimationTick);
}
/*
* Set Render Node to absolute position
*/
if (node.Props is PawnRenderNodeProperties_GraphicVariants graphicVariantProp
&& graphicVariantProp.absolutePosition)
{
matrix = parms.matrix;
float num = node.Worker.AltitudeFor(node, parms);
if (num != 0f)
{
matrix *= Matrix4x4.Translate(Vector3.up * num);
}
__result = true;
return false;
}
return true;
}
}

View File

@ -11,6 +11,7 @@ namespace Rimworld_Animations
{
public List<string> texPathVariants;
public bool absolutePosition = false;
}
}

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Verse;
namespace Rimworld_Animations
{
public class PawnRenderSubWorker_ChangeOffset : PawnRenderSubWorker
{
public override void TransformOffset(PawnRenderNode node, PawnDrawParms parms, ref Vector3 offset, ref Vector3 pivot)
{
if (node.AnimationWorker is AnimationWorker_KeyframesExtended
&& node.tree.pawn.TryGetComp<CompExtendedAnimator>(out CompExtendedAnimator extendedAnimator)
&& extendedAnimator.IsAnimating)
{
Vector3? pawnOffset = extendedAnimator.Offset;
if (pawnOffset != null)
{
offset += (Vector3)pawnOffset;
}
}
}
}
}

View File

@ -30,20 +30,21 @@ namespace Rimworld_Animations {
for (int i = 0; i < participants.Count; i++)
{
Vector3? offset = groupAnimationDef.GetOffset(i, participants[i], reorder);
if (anchor is Pawn pawn && pawn == participants[i])
{
List<AnimationDef> allAnimationsForPawn = groupAnimationDef.GetAllAnimationsForActor(i, seed, reorder);
participants[i].TryGetComp<CompExtendedAnimator>().PlayGroupAnimation(allAnimationsForPawn);
participants[i].TryGetComp<CompExtendedAnimator>().PlayGroupAnimation(allAnimationsForPawn, offset);
}
else
{
//each participant gets their own unique extendedanimatoranchor, important for scribe_deep saving
List<AnimationDef> allAnimationsForPawn = groupAnimationDef.GetAllAnimationsForActor(i, seed, reorder);
BaseExtendedAnimatorAnchor animatorAnchor = new ExtendedAnimatorAnchor_Thing(anchor);
participants[i].TryGetComp<CompExtendedAnimator>().PlayGroupAnimation(allAnimationsForPawn, animatorAnchor);
participants[i].TryGetComp<CompExtendedAnimator>().PlayGroupAnimation(allAnimationsForPawn, offset, animatorAnchor);
}
}
}
@ -56,7 +57,8 @@ namespace Rimworld_Animations {
for (int i = 0; i < participants.Count; i++)
{
List<AnimationDef> allAnimationsForPawn = groupAnimationDef.GetAllAnimationsForActor(i, seed, reorder);
participants[i].TryGetComp<CompExtendedAnimator>().PlayGroupAnimation(allAnimationsForPawn);
Vector3? offset = groupAnimationDef.GetOffset(i, participants[i], reorder);
participants[i].TryGetComp<CompExtendedAnimator>().PlayGroupAnimation(allAnimationsForPawn, offset);
}
}

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using HarmonyLib;
using System.Reflection;
namespace Patch_SexToysMasturbation
{
[StaticConstructorOnStartup]
public static class Harmony_PatchAll {
static Harmony_PatchAll() {
Harmony val = new Harmony("harmonypatch");
val.PatchAll(Assembly.GetExecutingAssembly());
}
}
}

View File

@ -38,6 +38,7 @@
</Reference>
<Reference Include="AlienRace">
<HintPath>..\..\..\..\..\workshop\content\294100\839005762\1.5\Assemblies\AlienRace.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
@ -69,7 +70,12 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="1.5\Source\Patches\Harmony_PatchAll.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="1.5\Assemblies\Patch_HumanoidAlienRaces.dll" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -71,9 +71,14 @@
<ItemGroup>
<Compile Include="1.5\Source\Actors\Actor.cs" />
<Compile Include="1.5\Source\Actors\AlienRaceOffset.cs" />
<Compile Include="1.5\Source\Actors\BodyTypeOffset.cs" />
<Compile Include="1.5\Source\AnimationProps\AnimationPropDef.cs" />
<Compile Include="1.5\Source\AnimationWorkers\AnimationWorker_KeyframesExtended.cs" />
<Compile Include="1.5\Source\Animations\AnimationOffsets\AnimationOffsetDef.cs" />
<Compile Include="1.5\Source\Animations\AnimationOffsets\Offsets\AnimationOffset_BodyType.cs" />
<Compile Include="1.5\Source\Animations\AnimationOffsets\Offsets\AnimationOffset_BodyTypeGendered.cs" />
<Compile Include="1.5\Source\Animations\AnimationOffsets\Offsets\AnimationOffset_Single.cs" />
<Compile Include="1.5\Source\Animations\AnimationOffsets\Offsets\BaseAnimationOffset.cs" />
<Compile Include="1.5\Source\Animations\AnimationOffsets\Offsets\BodyTypeOffset.cs" />
<Compile Include="1.5\Source\Animations\AnimationProps\AnimationPropDef.cs" />
<Compile Include="1.5\Source\Animations\AnimationWorkers\AnimationWorker_KeyframesExtended.cs" />
<Compile Include="1.5\Source\Comps\CompExtendedAnimator.cs" />
<Compile Include="1.5\Source\Comps\CompProperties_ExtendedAnimator.cs" />
<Compile Include="1.5\Source\Comps\CompProperties_ThingAnimator.cs" />
@ -82,14 +87,14 @@
<Compile Include="1.5\Source\Comps\ExtendedAnimatorAnchor\ExtendedAnimatorAnchor_Thing.cs" />
<Compile Include="1.5\Source\Comps\ExtendedAnimatorAnchor\ExtendedAnimatorAnchor_Vector3.cs" />
<Compile Include="1.5\Source\Defs\AnimationDefOf.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationContexts\BaseGroupAnimationContext.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationContexts\GroupAnimationContext_RJWSex.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationDef.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage_Branch.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage_LoopRandomSelectChance.cs" />
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage_TicksDuration.cs" />
<Compile Include="1.5\Source\Keyframes\ExtendedKeyframe.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationContexts\BaseGroupAnimationContext.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationContexts\GroupAnimationContext_RJWSex.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationDef.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationStages\AnimationStage.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationStages\AnimationStage_Branch.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationStages\AnimationStage_LoopRandomSelectChance.cs" />
<Compile Include="1.5\Source\Animations\GroupAnimations\GroupAnimationStages\AnimationStage_TicksDuration.cs" />
<Compile Include="1.5\Source\Animations\Keyframes\ExtendedKeyframe.cs" />
<Compile Include="1.5\Source\MainTabWindows\MainTabWindow_OffsetConfigure.cs" />
<Compile Include="1.5\Source\MainTabWindows\OffsetMainButtonDefOf.cs" />
<Compile Include="1.5\Source\MainTabWindows\WorldComponent_UpdateMainTab.cs" />
@ -107,9 +112,10 @@
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\SexBaseReceivers\HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs" />
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\SexBaseReceivers\HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs" />
<Compile Include="1.5\Source\PawnRenderNode\PawnRenderNodeProperties_GraphicVariants.cs" />
<Compile Include="1.5\Source\PawnRenderNode\PawnRenderNodeWorker_GraphicVariants.cs" />
<Compile Include="1.5\Source\PawnRenderNode\PawnRenderNode_GraphicVariants.cs" />
<Compile Include="1.5\Source\PawnRenderNode\GraphicVariants\PawnRenderNodeProperties_GraphicVariants.cs" />
<Compile Include="1.5\Source\PawnRenderNode\GraphicVariants\PawnRenderNodeWorker_GraphicVariants.cs" />
<Compile Include="1.5\Source\PawnRenderNode\GraphicVariants\PawnRenderNode_GraphicVariants.cs" />
<Compile Include="1.5\Source\RenderSubWorkers\PawnRenderSubWorker_ChangeOffset.cs" />
<Compile Include="1.5\Source\Settings\AnimationSettings.cs" />
<Compile Include="1.5\Source\Utilities\AnimationUtility.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@ -127,6 +133,7 @@
<Content Include="1.5\Defs\SoundDefs\Sounds_Sex.xml" />
<Content Include="1.5\Patches\AnimationPatchHSK.xml" />
<Content Include="1.5\Patches\AnimationPatch_CompExtendedAnimator.xml" />
<Content Include="1.5\Patches\AnimationPatch_PawnRenderTree_OffsetSubWorker.xml" />
<Content Include="1.5\Patches\CompatibilityPatch_FacialAnimation.xml" />
<Content Include="1.5\Patches\CompatibilityPatch_HCSK.xml" />
<Content Include="1.5\Patches\CompPatches\AutoCleaner.xml" />
@ -178,7 +185,6 @@
<ItemGroup>
<Folder Include="1.5\Source\Extensions\" />
<Folder Include="1.5\Source\Patches\OtherModPatches\" />
<Folder Include="1.5\Source\RenderSubWorkers\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>