mirror of
https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
synced 2024-08-15 00:43:45 +00:00
Added animation selecting based on defined contexts
This commit is contained in:
parent
16af5bb63a
commit
db4c2d3833
29 changed files with 506 additions and 259 deletions
Binary file not shown.
|
@ -4,13 +4,8 @@
|
||||||
<defName>TestAnimation1</defName>
|
<defName>TestAnimation1</defName>
|
||||||
<durationTicks>400</durationTicks>
|
<durationTicks>400</durationTicks>
|
||||||
<playWhenDowned>False</playWhenDowned>
|
<playWhenDowned>False</playWhenDowned>
|
||||||
<modExtensions>
|
|
||||||
<li Class="Rimworld_Animations.AltitudeLayer">
|
|
||||||
<PawnAltitudeLayer>Pawn</PawnAltitudeLayer>
|
|
||||||
</li>
|
|
||||||
</modExtensions>
|
|
||||||
<animationParts>
|
<animationParts>
|
||||||
|
<!--Note: Rotate animal body by setting body rotation, not head rotation; different for animals-->
|
||||||
<li>
|
<li>
|
||||||
<key>Root</key>
|
<key>Root</key>
|
||||||
<value>
|
<value>
|
||||||
|
@ -19,58 +14,52 @@
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>30</tick>
|
<tick>30</tick>
|
||||||
<angle>0</angle>
|
<angle>0</angle>
|
||||||
<rotation>North</rotation>
|
|
||||||
<visible>true</visible>
|
<visible>true</visible>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>100</tick>
|
<tick>100</tick>
|
||||||
<angle>0</angle>
|
<angle>0</angle>
|
||||||
<rotation>East</rotation>
|
|
||||||
<visible>true</visible>
|
<visible>true</visible>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>200</tick>
|
<tick>200</tick>
|
||||||
<angle>0</angle>
|
<angle>0</angle>
|
||||||
<rotation>South</rotation>
|
|
||||||
<visible>true</visible>
|
<visible>true</visible>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>300</tick>
|
<tick>300</tick>
|
||||||
<angle>0</angle>
|
<angle>0</angle>
|
||||||
<rotation>West</rotation>
|
|
||||||
<visible>true</visible>
|
<visible>true</visible>
|
||||||
</li>
|
</li>
|
||||||
</keyframes>
|
</keyframes>
|
||||||
</value>
|
</value>
|
||||||
</li>
|
</li>
|
||||||
<!--
|
|
||||||
<li>
|
<li>
|
||||||
<key>Body</key>
|
<key>Body</key>
|
||||||
<value>
|
<value>
|
||||||
<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
|
<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
|
||||||
<keyframes>
|
<keyframes>
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>30</tick>
|
<tick>0</tick>
|
||||||
<angle>30</angle>
|
<angle>0</angle>
|
||||||
<rotation>North</rotation>
|
<rotation>North</rotation>
|
||||||
<visible>false</visible>
|
<visible>false</visible>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>300</tick>
|
<tick>50</tick>
|
||||||
<angle>150</angle>
|
<angle>0</angle>
|
||||||
<rotation>South</rotation>
|
<rotation>South</rotation>
|
||||||
<visible>true</visible>
|
<visible>true</visible>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>600</tick>
|
<tick>100</tick>
|
||||||
<angle>30</angle>
|
<angle>30</angle>
|
||||||
<rotation>North</rotation>
|
<rotation>East</rotation>
|
||||||
<visible>false</visible>
|
<visible>false</visible>
|
||||||
</li>
|
</li>
|
||||||
</keyframes>
|
</keyframes>
|
||||||
</value>
|
</value>
|
||||||
</li>
|
</li>
|
||||||
-->
|
|
||||||
<li>
|
<li>
|
||||||
<key>Head</key>
|
<key>Head</key>
|
||||||
<value>
|
<value>
|
||||||
|
|
|
@ -10,23 +10,31 @@
|
||||||
<li>
|
<li>
|
||||||
<key>Root</key>
|
<key>Root</key>
|
||||||
<value>
|
<value>
|
||||||
<workerClass>AnimationWorker_Keyframes</workerClass>
|
<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
|
||||||
<keyframes>
|
<keyframes>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
|
<offset>(0, -1, 0)</offset>
|
||||||
<tick>0</tick>
|
<tick>0</tick>
|
||||||
<angle>23</angle>
|
<angle>23</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
|
<offset>(0, -1, 0)</offset>
|
||||||
<tick>6</tick>
|
<tick>6</tick>
|
||||||
<angle>-5</angle>
|
<angle>-5</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
|
<offset>(0, -1, 0)</offset>
|
||||||
<tick>12</tick>
|
<tick>12</tick>
|
||||||
<angle>4</angle>
|
<angle>4</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
|
<offset>(0, -1, 0)</offset>
|
||||||
<tick>188</tick>
|
<tick>188</tick>
|
||||||
<angle>-1</angle>
|
<angle>-1</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
</keyframes>
|
</keyframes>
|
||||||
</value>
|
</value>
|
||||||
|
@ -34,23 +42,27 @@
|
||||||
<li>
|
<li>
|
||||||
<key>Head</key>
|
<key>Head</key>
|
||||||
<value>
|
<value>
|
||||||
<workerClass>AnimationWorker_Keyframes</workerClass>
|
<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
|
||||||
<keyframes>
|
<keyframes>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>0</tick>
|
<tick>0</tick>
|
||||||
<angle>5</angle>
|
<angle>0</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>6</tick>
|
<tick>6</tick>
|
||||||
<angle>-5</angle>
|
<angle>-5</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>12</tick>
|
<tick>12</tick>
|
||||||
<angle>4</angle>
|
<angle>4</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li Class="Rimworld_Animations.ExtendedKeyframe">
|
||||||
<tick>128</tick>
|
<tick>128</tick>
|
||||||
<angle>-1</angle>
|
<angle>0</angle>
|
||||||
|
<rotation>North</rotation>
|
||||||
</li>
|
</li>
|
||||||
</keyframes>
|
</keyframes>
|
||||||
</value>
|
</value>
|
||||||
|
|
|
@ -1,41 +1,41 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<Defs>
|
<Defs>
|
||||||
<GroupAnimationDef>
|
<Rimworld_Animations.GroupAnimationDef>
|
||||||
<defName>TestGroupAnimation1</defName>
|
<defName>TestGroupAnimation1</defName>
|
||||||
<numActors>2</numActors>
|
<numActors>2</numActors>
|
||||||
<AnimationStages>
|
<animationStages>
|
||||||
<li Class="Rimworld_Animations.AnimationStage_TicksDuration">
|
<li Class="Rimworld_Animations.AnimationStage_TicksDuration">
|
||||||
<ticks>200</ticks>
|
<ticks>200</ticks>
|
||||||
<animationDefs>
|
<animationDefs>
|
||||||
<li>Pawn1_Stage1_TestAnimation1</li>
|
<li>TestAnimation1</li>
|
||||||
<li>Pawn2_Stage1_TestAnimation2</li>
|
<li>TestAnimation2</li>
|
||||||
</animationDefs>
|
</animationDefs>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
|
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
|
||||||
<loops>10</loops>
|
<loops>10</loops>
|
||||||
<animationOptions>
|
<loopOptions>
|
||||||
<li>
|
<li>
|
||||||
<probability>3</probability>
|
<probability>3</probability>
|
||||||
<animationDefs>
|
<animationDefs>
|
||||||
<li>Pawn1_Stage2_Variant1</li>
|
<li>TestAnimation1</li>
|
||||||
<li>Pawn2_Stage2_Variant1</li>
|
<li>TestAnimation2</li>
|
||||||
</animationDefs>
|
</animationDefs>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<probability>1</probability>
|
<probability>1</probability>
|
||||||
<animationDefs>
|
<animationDefs>
|
||||||
<li>Pawn1_Stage2_Variant2</li>
|
<li>TestAnimation1</li>
|
||||||
<li>Pawn2_Stage2_Variant2</li>
|
<li>TestAnimation2</li>
|
||||||
</animationDefs>
|
</animationDefs>
|
||||||
</li>
|
</li>
|
||||||
</animationOptions>
|
</loopOptions>
|
||||||
</li>
|
</li>
|
||||||
|
<!--
|
||||||
<li Class="Rimworld_Animations.AnimationStage_Branch">
|
<li Class="Rimworld_Animations.AnimationStage_Branch">
|
||||||
<paths>
|
<paths>
|
||||||
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
|
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
|
||||||
<numberOfLoops>10</numberOfLoops>
|
<loops>10</loops>
|
||||||
<animationOptions>
|
<animationOptions>
|
||||||
<li>
|
<li>
|
||||||
<probability>3</probability>
|
<probability>3</probability>
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
|
<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
|
||||||
<numberOfLoops>10</numberOfLoops>
|
<loops>10</loops>
|
||||||
<animationOptions>
|
<animationOptions>
|
||||||
<li>
|
<li>
|
||||||
<probability>3</probability>
|
<probability>3</probability>
|
||||||
|
@ -70,42 +70,25 @@
|
||||||
</li>
|
</li>
|
||||||
</paths>
|
</paths>
|
||||||
</li>
|
</li>
|
||||||
</AnimationStages>
|
-->
|
||||||
|
</animationStages>
|
||||||
|
|
||||||
<contexts>
|
<contexts>
|
||||||
<li Class="Rimworld_Animations.Actor_Sextype">
|
<li Class="Rimworld_Animations.GroupAnimationContext_RJWSex">
|
||||||
<sexTypes>
|
<interactionDefs>
|
||||||
<li>Sex</li>
|
<li>Sex_Anal</li>
|
||||||
</sexTypes>
|
<li>Sex_Vaginal</li>
|
||||||
<actorShift>0</actorShift>
|
</interactionDefs>
|
||||||
</li>
|
</li>
|
||||||
<li Class="Rimworld_Animations.Actor_Sextype">
|
<li Class="Rimworld_Animations.GroupAnimationContext_RJWSex">
|
||||||
<sexTypes>
|
|
||||||
<li>Sex_Reverse</li>
|
|
||||||
</sexTypes>
|
|
||||||
<actorShift>1</actorShift>
|
|
||||||
</li>
|
|
||||||
<li Class="Rimworld_Animations.Actor_Custom_Races">
|
|
||||||
<sexTypes>
|
|
||||||
<li>Sex</li>
|
|
||||||
</sexTypes>
|
|
||||||
<races>
|
|
||||||
<li>Human</li>
|
|
||||||
<li>Dog</li>
|
|
||||||
</races>
|
|
||||||
<actorShift>0</actorShift>
|
|
||||||
</li>
|
|
||||||
<li Class="Rimworld_Animations.Actor_Custom_Races">
|
|
||||||
<sexTypes>
|
|
||||||
<li>Sex_Reverse</li>
|
|
||||||
</sexTypes>
|
|
||||||
<races>
|
|
||||||
<li>Dog</li>
|
|
||||||
<li>Human</li>
|
|
||||||
</races>
|
|
||||||
<actorShift>1</actorShift>
|
<actorShift>1</actorShift>
|
||||||
|
<interactionDefs>
|
||||||
|
<li>Sex_Reverse_Anal</li>
|
||||||
|
<li>Sex_Reverse_Vaginal</li>
|
||||||
|
</interactionDefs>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</contexts>
|
</contexts>
|
||||||
|
|
||||||
</GroupAnimationDef>
|
</Rimworld_Animations.GroupAnimationDef>
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|
31
1.5/Patches/AnimationPatchHSK.xml
Normal file
31
1.5/Patches/AnimationPatchHSK.xml
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Patch>
|
||||||
|
<Operation Class="PatchOperationFindMod">
|
||||||
|
<mods>
|
||||||
|
<li>Core SK</li>
|
||||||
|
</mods>
|
||||||
|
<match Class="PatchOperationSequence">
|
||||||
|
<operations>
|
||||||
|
|
||||||
|
<li Class="PatchOperationConditional">
|
||||||
|
<xpath>Defs/ThingDef/comps</xpath>
|
||||||
|
<success>Always</success>
|
||||||
|
<nomatch Class="PatchOperationAdd">
|
||||||
|
<xpath>Defs/ThingDef</xpath>
|
||||||
|
<value>
|
||||||
|
<comps />
|
||||||
|
</value>
|
||||||
|
</nomatch>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<xpath>Defs/ThingDef[@Name="BaseAnimalPawn" or @Name="SK_BasePawn" or @Name="BasePawnSkynet"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</operations>
|
||||||
|
</match>
|
||||||
|
</Operation>
|
||||||
|
</Patch>
|
35
1.5/Patches/AnimationPatch_CompExtendedAnimator.xml
Normal file
35
1.5/Patches/AnimationPatch_CompExtendedAnimator.xml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Patch>
|
||||||
|
<Operation Class="PatchOperationSequence">
|
||||||
|
<success>Always</success>
|
||||||
|
<operations>
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<success>Always</success>
|
||||||
|
<xpath>Defs/ThingDef[race][not(comps)]</xpath>
|
||||||
|
<value>
|
||||||
|
<comps />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<success>Always</success>
|
||||||
|
<xpath>Defs/AlienRace.ThingDef_AlienRace[not(comps)]</xpath>
|
||||||
|
<value>
|
||||||
|
<comps />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<xpath>Defs/ThingDef[@Name="BasePawn"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<xpath>Defs/AlienRace.ThingDef_AlienRace/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
</operations>
|
||||||
|
</Operation>
|
||||||
|
</Patch>
|
19
1.5/Patches/CompPatches/AutoCleaner.xml
Normal file
19
1.5/Patches/CompPatches/AutoCleaner.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Patch>
|
||||||
|
<Operation Class="PatchOperationSequence">
|
||||||
|
<success>Always</success>
|
||||||
|
<operations>
|
||||||
|
<li Class="PatchOperationConditional">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps</xpath>
|
||||||
|
<success>Always</success>
|
||||||
|
<match Class="PatchOperationAdd">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</match>
|
||||||
|
</li>
|
||||||
|
</operations>
|
||||||
|
</Operation>
|
||||||
|
</Patch>
|
||||||
|
|
18
1.5/Patches/CompPatches/CombatExtended.xml
Normal file
18
1.5/Patches/CompPatches/CombatExtended.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Patch>
|
||||||
|
<Operation Class="PatchOperationSequence">
|
||||||
|
<success>Always</success>
|
||||||
|
<operations>
|
||||||
|
<li Class="PatchOperationConditional">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BasePawnSimple"]/comps</xpath>
|
||||||
|
<success>Always</success>
|
||||||
|
<match Class="PatchOperationAdd">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BasePawnSimple"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</match>
|
||||||
|
</li>
|
||||||
|
</operations>
|
||||||
|
</Operation>
|
||||||
|
</Patch>
|
18
1.5/Patches/CompPatches/ZombieLand.xml
Normal file
18
1.5/Patches/CompPatches/ZombieLand.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Patch>
|
||||||
|
<Operation Class="PatchOperationSequence">
|
||||||
|
<success>Always</success>
|
||||||
|
<operations>
|
||||||
|
<li Class="PatchOperationConditional">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BaseZombie"]/comps</xpath>
|
||||||
|
<success>Always</success>
|
||||||
|
<match Class="PatchOperationAdd">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BaseZombie"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</match>
|
||||||
|
</li>
|
||||||
|
</operations>
|
||||||
|
</Operation>
|
||||||
|
</Patch>
|
39
1.5/Patches/CompatibilityPatch_HCSK.xml
Normal file
39
1.5/Patches/CompatibilityPatch_HCSK.xml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Patch>
|
||||||
|
<!-- Patch for HCSK, to attach to differently written thingdefs -->
|
||||||
|
<Operation Class="PatchOperationFindMod">
|
||||||
|
<mods>
|
||||||
|
<li>Core SK</li>
|
||||||
|
</mods>
|
||||||
|
<match Class="PatchOperationSequence">
|
||||||
|
<success>Always</success>
|
||||||
|
<operations>
|
||||||
|
<li Class="PatchOperationConditional">
|
||||||
|
<xpath>/Defs/ThingDef/comps</xpath>
|
||||||
|
<success>Always</success>
|
||||||
|
<nomatch Class="PatchOperationAdd">
|
||||||
|
<xpath>/Defs/ThingDef</xpath>
|
||||||
|
<value>
|
||||||
|
<comps />
|
||||||
|
</value>
|
||||||
|
</nomatch>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="SK_BasePawn"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li Class="PatchOperationAdd">
|
||||||
|
<xpath>/Defs/ThingDef[@Name="BaseAnimalPawn"]/comps</xpath>
|
||||||
|
<value>
|
||||||
|
<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
|
||||||
|
</value>
|
||||||
|
</li>
|
||||||
|
</operations>
|
||||||
|
</match>
|
||||||
|
</Operation>
|
||||||
|
|
||||||
|
</Patch>
|
18
1.5/Source/Comps/CompExtendedAnimator.cs
Normal file
18
1.5/Source/Comps/CompExtendedAnimator.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using RimWorld;
|
||||||
|
using rjw;
|
||||||
|
using UnityEngine;
|
||||||
|
using Verse;
|
||||||
|
using Verse.AI;
|
||||||
|
using Verse.Sound;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations {
|
||||||
|
public class CompExtendedAnimator : ThingComp
|
||||||
|
{
|
||||||
|
List<Tuple<int, AnimationDef>> animationQueue;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
1.5/Source/Comps/CompProperties_ExtendedAnimator.cs
Normal file
17
1.5/Source/Comps/CompProperties_ExtendedAnimator.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using RimWorld;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations {
|
||||||
|
public class CompProperties_ExtendedAnimator : CompProperties
|
||||||
|
{
|
||||||
|
public CompProperties_ExtendedAnimator()
|
||||||
|
{
|
||||||
|
base.compClass = typeof(CompExtendedAnimator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations
|
||||||
|
{
|
||||||
|
public abstract class BaseGroupAnimationContext
|
||||||
|
{
|
||||||
|
public int actorShift = 0;
|
||||||
|
public abstract bool CanAnimationBeUsed(List<Pawn> actors, out int reorder);
|
||||||
|
|
||||||
|
//cool class for designating contexts for animations
|
||||||
|
// configure CanAnimationBeUsed to test whether it can be used
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
using RimWorld;
|
||||||
|
using rjw;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using static rjw.xxx;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations
|
||||||
|
{
|
||||||
|
public class GroupAnimationContext_RJWSex : BaseGroupAnimationContext
|
||||||
|
{
|
||||||
|
|
||||||
|
public List<InteractionDef> interactionDefs;
|
||||||
|
|
||||||
|
public override bool CanAnimationBeUsed(List<Pawn> actors, out int reorder)
|
||||||
|
{
|
||||||
|
Log.Message("Testing this animation");
|
||||||
|
|
||||||
|
JobDriver_SexBaseInitiator latestSexBaseInitiator = (actors.FindLast(x => x.jobs?.curDriver is JobDriver_SexBaseInitiator).jobs.curDriver as JobDriver_SexBaseInitiator);
|
||||||
|
reorder = base.actorShift;
|
||||||
|
|
||||||
|
|
||||||
|
return interactionDefs.Contains(latestSexBaseInitiator.Sexprops.dictionaryKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
1.5/Source/GroupAnimations/GroupAnimationDef.cs
Normal file
32
1.5/Source/GroupAnimations/GroupAnimationDef.cs
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations
|
||||||
|
{
|
||||||
|
public class GroupAnimationDef : Def
|
||||||
|
{
|
||||||
|
public int numActors;
|
||||||
|
public List<AnimationStage> animationStages;
|
||||||
|
public List<BaseGroupAnimationContext> contexts;
|
||||||
|
|
||||||
|
|
||||||
|
public bool canAnimationBeUsed(List<Pawn> actors, out int reorder)
|
||||||
|
{
|
||||||
|
|
||||||
|
foreach (BaseGroupAnimationContext context in contexts)
|
||||||
|
{
|
||||||
|
if (context.CanAnimationBeUsed(actors, out reorder))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reorder = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ namespace Rimworld_Animations
|
||||||
{
|
{
|
||||||
public class AnimationStage_Branch : AnimationStage
|
public class AnimationStage_Branch : AnimationStage
|
||||||
{
|
{
|
||||||
List<AnimationStage> paths;
|
public List<AnimationStage> paths;
|
||||||
public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
|
public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
|
||||||
{
|
{
|
||||||
return paths[(seed * 59) % paths.Count].GetAnimations(actor, seed);
|
return paths[(seed * 59) % paths.Count].GetAnimations(actor, seed);
|
|
@ -10,11 +10,11 @@ namespace Rimworld_Animations
|
||||||
public class AnimationStage_LoopRandomSelectChance : AnimationStage
|
public class AnimationStage_LoopRandomSelectChance : AnimationStage
|
||||||
{
|
{
|
||||||
public int loops;
|
public int loops;
|
||||||
public List<AnimationLoopOption> animationOptions;
|
public List<AnimationLoopOption> loopOptions;
|
||||||
|
|
||||||
public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
|
public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
|
||||||
{
|
{
|
||||||
int numberOfActors = animationOptions[0].animationDefs.Count;
|
int numberOfActors = loopOptions[0].animationDefs.Count;
|
||||||
List<Tuple<int, AnimationDef>> animations = new List<Tuple<int, AnimationDef>>();
|
List<Tuple<int, AnimationDef>> animations = new List<Tuple<int, AnimationDef>>();
|
||||||
|
|
||||||
for (int i = 0; i < loops; i++)
|
for (int i = 0; i < loops; i++)
|
||||||
|
@ -37,11 +37,11 @@ namespace Rimworld_Animations
|
||||||
//select random element from loop options by weight; also calculate the longest anim length
|
//select random element from loop options by weight; also calculate the longest anim length
|
||||||
public AnimationLoopOption getAnimationLoopOptionByWeight(int seed, out int longestAnimLength)
|
public AnimationLoopOption getAnimationLoopOptionByWeight(int seed, out int longestAnimLength)
|
||||||
{
|
{
|
||||||
int totalWeight = animationOptions.Sum(x => x.probability);
|
int totalWeight = loopOptions.Sum(x => x.probability);
|
||||||
int randomNumber = (seed * 56) % totalWeight;
|
int randomNumber = (seed * 56) % totalWeight;
|
||||||
|
|
||||||
int cumulativeWeight = 0;
|
int cumulativeWeight = 0;
|
||||||
foreach(AnimationLoopOption option in animationOptions) {
|
foreach(AnimationLoopOption option in loopOptions) {
|
||||||
cumulativeWeight += option.probability;
|
cumulativeWeight += option.probability;
|
||||||
if (randomNumber <= cumulativeWeight)
|
if (randomNumber <= cumulativeWeight)
|
||||||
{
|
{
|
||||||
|
@ -50,8 +50,8 @@ namespace Rimworld_Animations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
longestAnimLength = animationOptions[0].animationDefs.Max(x => x.durationTicks);
|
longestAnimLength = loopOptions[0].animationDefs.Max(x => x.durationTicks);
|
||||||
return animationOptions[0];
|
return loopOptions[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace Rimworld_Animations
|
||||||
|
|
||||||
public Rot4 rotation;
|
public Rot4 rotation;
|
||||||
public SoundDef sound = null;
|
public SoundDef sound = null;
|
||||||
public bool visible;
|
public bool visible = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,8 +40,14 @@ namespace Rimworld_Animations {
|
||||||
int AnimationTimeTicks = 0;
|
int AnimationTimeTicks = 0;
|
||||||
|
|
||||||
List<Pawn> participants = partnerSexBaseReceiver.parteners.Append(partner).ToList();
|
List<Pawn> participants = partnerSexBaseReceiver.parteners.Append(partner).ToList();
|
||||||
RerollAnimations(participants);
|
|
||||||
|
|
||||||
|
GroupAnimationDef groupAnimation = AnimationUtility.FindGroupAnimation(participants, out int reorder);
|
||||||
|
|
||||||
|
if (groupAnimation != null)
|
||||||
|
{
|
||||||
|
AnimationUtility.StartGroupAnimation(participants, groupAnimation, reorder);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
|
//Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
|
||||||
if (AnimationTimeTicks != 0)
|
if (AnimationTimeTicks != 0)
|
||||||
|
@ -53,14 +59,6 @@ namespace Rimworld_Animations {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RerollAnimations(List<Pawn> participants) {
|
|
||||||
|
|
||||||
participants[0].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation1);
|
|
||||||
participants[1].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation2);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static IEnumerable<String> NonSexActRulePackDefNames = new String[]
|
static IEnumerable<String> NonSexActRulePackDefNames = new String[]
|
||||||
{
|
{
|
||||||
"MutualHandholdingRP",
|
"MutualHandholdingRP",
|
||||||
|
@ -77,12 +75,14 @@ namespace Rimworld_Animations {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
|
[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
|
||||||
static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
|
static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
|
||||||
|
|
||||||
public static void Postfix(ref JobDriver_SexBaseInitiator __instance)
|
public static void Prefix(ref JobDriver_SexBaseInitiator __instance)
|
||||||
{
|
{
|
||||||
//stop animation
|
|
||||||
|
AnimationUtility.StopGroupAnimation(__instance.pawn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using HarmonyLib;
|
|
||||||
using RimWorld;
|
|
||||||
using Verse;
|
|
||||||
using rjw;
|
|
||||||
using System.Reflection.Emit;
|
|
||||||
using Verse.AI;
|
|
||||||
|
|
||||||
namespace Rimworld_Animations
|
|
||||||
{
|
|
||||||
|
|
||||||
[HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
|
|
||||||
public static class HarmonyPatch_JobDriver_SexBaseReceiverLoved
|
|
||||||
{
|
|
||||||
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> codeInstructions)
|
|
||||||
{
|
|
||||||
|
|
||||||
var ins = codeInstructions.ToList();
|
|
||||||
for(int i = 0; i < ins.Count; i++)
|
|
||||||
{
|
|
||||||
if(i < ins.Count && ins[i].opcode == OpCodes.Call && ins[i].OperandIs(AccessTools.DeclaredMethod(typeof(Toils_LayDown), "LayDown"))) {
|
|
||||||
|
|
||||||
ins[i].operand = AccessTools.DeclaredMethod(typeof(HarmonyPatch_JobDriver_SexBaseReceiverLoved), "DoNotLayDown");
|
|
||||||
yield return ins[i];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
yield return ins[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Toil DoNotLayDown(TargetIndex bedOrRestSpotIndex, bool hasBed, bool lookForOtherJobs, bool canSleep = true, bool gainRestAndHealth = true, PawnPosture noBedLayingPosture = PawnPosture.LayingMask, bool deathrest = false)
|
|
||||||
{
|
|
||||||
return new Toil();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using rjw;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse.AI;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations
|
||||||
|
{
|
||||||
|
[HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
|
||||||
|
public class HarmonyPatch_JobDriver_SexBaseReceiverLoved
|
||||||
|
{
|
||||||
|
public static void Postfix(JobDriver_SexBaseRecieverLoved __instance, ref Toil __result)
|
||||||
|
{
|
||||||
|
//added for sudden end of jobdriver
|
||||||
|
__result.AddFinishAction(delegate {
|
||||||
|
AnimationUtility.StopGroupAnimation(__instance.pawn);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using rjw;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse.AI;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations
|
||||||
|
{
|
||||||
|
[HarmonyPatch(typeof(JobDriver_SexBaseRecieverRaped), "MakeNewToils")]
|
||||||
|
public class HarmonyPatch_JobDriver_SexBaseReceiverRaped
|
||||||
|
{
|
||||||
|
public static void Postfix(JobDriver_SexBaseRecieverRaped __instance, ref IEnumerable<Toil> __result)
|
||||||
|
{
|
||||||
|
//added for sudden end of jobdriver
|
||||||
|
__result.Last().AddFinishAction(delegate {
|
||||||
|
AnimationUtility.StopGroupAnimation(__instance.pawn);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ namespace Rimworld_Animations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// HEAD ROTATION ADJUST FACING
|
// HEAD ROTATION ADJUST FACING get rotated textures
|
||||||
|
|
||||||
Rot4 animFacing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick);
|
Rot4 animFacing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
using HarmonyLib;
|
||||||
|
using RimWorld;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace Rimworld_Animations
|
||||||
|
{
|
||||||
|
[HarmonyPatch(typeof(PawnRenderTree), "TryGetMatrix")]
|
||||||
|
public class HarmonyPatch_PawnRenderTree
|
||||||
|
{
|
||||||
|
public static void Prefix(PawnRenderTree __instance, PawnRenderNode node, ref PawnDrawParms parms)
|
||||||
|
{
|
||||||
|
//Note: Maybe need to change this to check all ancestors if it's the head node
|
||||||
|
//in case of deeper nodes in the PawnRenderTree
|
||||||
|
//This code only checks for node and parent, if either are head
|
||||||
|
|
||||||
|
|
||||||
|
// Change facing for all head and apparelhead nodes
|
||||||
|
// So that the offset is based on body rotation, not head rotation
|
||||||
|
|
||||||
|
//fixes misaligned hairs and headaddons
|
||||||
|
if ((node.Props.tagDef == PawnRenderNodeTagDefOf.Head || node.Props.tagDef == PawnRenderNodeTagDefOf.ApparelHead
|
||||||
|
|| node?.parent?.Props?.tagDef == PawnRenderNodeTagDefOf.Head || node?.parent?.Props?.tagDef == PawnRenderNodeTagDefOf.ApparelHead)
|
||||||
|
&& node.tree.rootNode.AnimationWorker is AnimationWorker_KeyframesExtended rootNodeAnimationWorker)
|
||||||
|
{
|
||||||
|
|
||||||
|
parms.facing = rootNodeAnimationWorker.facingAtTick(node.tree.AnimationTick);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,19 +9,23 @@ namespace Rimworld_Animations {
|
||||||
public static class HarmonyPatch_Pawn_DrawTracker {
|
public static class HarmonyPatch_Pawn_DrawTracker {
|
||||||
public static bool Prefix(ref Pawn ___pawn, ref Vector3 __result) {
|
public static bool Prefix(ref Pawn ___pawn, ref Vector3 __result) {
|
||||||
|
|
||||||
|
// If animating and is sexbaseinitiator jobdriver,
|
||||||
if (___pawn?.Drawer?.renderer?.renderTree?.rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended
|
if (___pawn?.Drawer?.renderer?.renderTree?.rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended
|
||||||
&& ___pawn.jobs?.curDriver is JobDriver_SexBaseInitiator sexdriver)
|
&& ___pawn.jobs?.curDriver is JobDriver_SexBaseInitiator sexdriver)
|
||||||
{
|
{
|
||||||
//align pos on top of partner
|
|
||||||
__result = sexdriver.Partner.Drawer.DrawPos;
|
|
||||||
|
|
||||||
//change height so that they're all layered properly
|
//align pos on top of partner
|
||||||
if (sexdriver.Partner.jobs.curDriver is JobDriver_SexBaseReciever)
|
if (sexdriver?.Partner?.Drawer?.DrawPos != null)
|
||||||
for (int i = 0; i < )
|
__result = sexdriver.Partner.Drawer.DrawPos;
|
||||||
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,120 +15,57 @@ namespace Rimworld_Animations {
|
||||||
public static class AnimationUtility {
|
public static class AnimationUtility {
|
||||||
|
|
||||||
|
|
||||||
public static bool GenitalCheckForPawn(List<string> requiredGenitals, Pawn pawn, out string failReason)
|
public static void StartAnimation(List<Pawn> participants)
|
||||||
{
|
{
|
||||||
|
participants[0].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation1);
|
||||||
|
participants[1].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation2);
|
||||||
|
}
|
||||||
|
|
||||||
failReason = null;
|
|
||||||
if (requiredGenitals != null)
|
public static void StartGroupAnimation(List<Pawn> participants, GroupAnimationDef groupAnimationDef, int reorder)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < participants.Count; i++)
|
||||||
{
|
{
|
||||||
if (requiredGenitals.Contains("Vagina"))
|
//todo: pass all animationstages to ExtendedAnimator, and queue animations
|
||||||
{
|
participants[i].Drawer.renderer.SetAnimation(
|
||||||
|
groupAnimationDef.animationStages[0]
|
||||||
if (!rjw.Genital_Helper.has_vagina(pawn))
|
.GetAnimations((i + reorder) % participants.Count, GenTicks.TicksGame)[0].Item2);
|
||||||
{
|
|
||||||
failReason = "missing vagina";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("Penis"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!(rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn) || rjw.Genital_Helper.has_ovipositorM(pawn) || rjw.Genital_Helper.has_ovipositorF(pawn)))
|
|
||||||
{
|
|
||||||
failReason = "missing penis";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("Mouth"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!rjw.Genital_Helper.has_mouth(pawn))
|
|
||||||
{
|
|
||||||
failReason = "missing mouth";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("Anus"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!rjw.Genital_Helper.has_anus(pawn))
|
|
||||||
{
|
|
||||||
failReason = "missing anus";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("Breasts"))
|
|
||||||
{
|
|
||||||
if (!rjw.Genital_Helper.can_do_breastjob(pawn))
|
|
||||||
{
|
|
||||||
failReason = "missing breasts";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("NoVagina"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (rjw.Genital_Helper.has_vagina(pawn))
|
|
||||||
{
|
|
||||||
failReason = "has vagina";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("NoPenis"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if ((rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn)))
|
|
||||||
{
|
|
||||||
failReason = "has penis";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("NoMouth"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (rjw.Genital_Helper.has_mouth(pawn))
|
|
||||||
{
|
|
||||||
failReason = "has mouth";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("NoAnus"))
|
|
||||||
{
|
|
||||||
|
|
||||||
if (rjw.Genital_Helper.has_anus(pawn))
|
|
||||||
{
|
|
||||||
failReason = "has anus";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requiredGenitals.Contains("NoBreasts"))
|
|
||||||
{
|
|
||||||
if (rjw.Genital_Helper.can_do_breastjob(pawn))
|
|
||||||
{
|
|
||||||
failReason = "has breasts";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
|
public static void StopGroupAnimation(List<Pawn> participants)
|
||||||
|
{
|
||||||
|
foreach(Pawn pawn in participants)
|
||||||
|
{
|
||||||
|
pawn.Drawer.renderer.SetAnimation(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void StopGroupAnimation(Pawn participant)
|
||||||
|
{
|
||||||
|
participant?.Drawer?.renderer?.SetAnimation(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GroupAnimationDef FindGroupAnimation(List<Pawn> participants, out int reorder)
|
||||||
|
{
|
||||||
|
// go through each context in each GroupAnimationDef
|
||||||
|
// if you find one where it returns canAnimationBeUsed (and reorders),
|
||||||
|
// return that animation
|
||||||
|
|
||||||
|
int reorder2 = 0;
|
||||||
|
|
||||||
|
Log.Message(DefDatabase<GroupAnimationDef>.AllDefsListForReading[0].defName);
|
||||||
|
|
||||||
|
DefDatabase<GroupAnimationDef>.AllDefsListForReading.TryRandomElement((GroupAnimationDef x) =>
|
||||||
|
x.canAnimationBeUsed(participants, out reorder2), out GroupAnimationDef result);
|
||||||
|
|
||||||
|
reorder = reorder2;
|
||||||
|
if (result != null) return result;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,19 +73,25 @@
|
||||||
<Compile Include="1.5\Source\Actors\AlienRaceOffset.cs" />
|
<Compile Include="1.5\Source\Actors\AlienRaceOffset.cs" />
|
||||||
<Compile Include="1.5\Source\Actors\BodyTypeOffset.cs" />
|
<Compile Include="1.5\Source\Actors\BodyTypeOffset.cs" />
|
||||||
<Compile Include="1.5\Source\AnimationWorkers\AnimationWorker_KeyframesExtended.cs" />
|
<Compile Include="1.5\Source\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" />
|
<Compile Include="1.5\Source\Comps\CompProperties_ThingAnimator.cs" />
|
||||||
<Compile Include="1.5\Source\Comps\CompThingAnimator.cs" />
|
<Compile Include="1.5\Source\Comps\CompThingAnimator.cs" />
|
||||||
<Compile Include="1.5\Source\Defs\AnimationDefOf.cs" />
|
<Compile Include="1.5\Source\Defs\AnimationDefOf.cs" />
|
||||||
<Compile Include="1.5\Source\GroupAnimationStages\AnimationStage.cs" />
|
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationContexts\BaseGroupAnimationContext.cs" />
|
||||||
<Compile Include="1.5\Source\GroupAnimationStages\AnimationStage_Branch.cs" />
|
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationContexts\GroupAnimationContext_RJWSex.cs" />
|
||||||
<Compile Include="1.5\Source\GroupAnimationStages\AnimationStage_LoopRandomSelectChance.cs" />
|
<Compile Include="1.5\Source\GroupAnimations\GroupAnimationDef.cs" />
|
||||||
<Compile Include="1.5\Source\GroupAnimationStages\AnimationStage_TicksDuration.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\Keyframes\ExtendedKeyframe.cs" />
|
||||||
<Compile Include="1.5\Source\MainTabWindows\MainTabWindow_OffsetConfigure.cs" />
|
<Compile Include="1.5\Source\MainTabWindows\MainTabWindow_OffsetConfigure.cs" />
|
||||||
<Compile Include="1.5\Source\MainTabWindows\OffsetMainButtonDefOf.cs" />
|
<Compile Include="1.5\Source\MainTabWindows\OffsetMainButtonDefOf.cs" />
|
||||||
<Compile Include="1.5\Source\MainTabWindows\WorldComponent_UpdateMainTab.cs" />
|
<Compile Include="1.5\Source\MainTabWindows\WorldComponent_UpdateMainTab.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\Harmony_PatchAll.cs" />
|
<Compile Include="1.5\Source\Patches\Harmony_PatchAll.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderNode.cs" />
|
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderNode.cs" />
|
||||||
|
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderTree.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Pawn_DrawTracker.cs" />
|
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Pawn_DrawTracker.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Thing.cs" />
|
<Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Thing.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RJWPatches\HarmonyPatch_PlaySexSounds.cs" />
|
<Compile Include="1.5\Source\Patches\RJWPatches\HarmonyPatch_PlaySexSounds.cs" />
|
||||||
|
@ -94,7 +100,8 @@
|
||||||
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_JoinInBed.cs" />
|
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_JoinInBed.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_Sex.cs" />
|
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_Sex.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
|
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
|
||||||
<Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseReceiverLoved.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\Settings\AnimationSettings.cs" />
|
<Compile Include="1.5\Source\Settings\AnimationSettings.cs" />
|
||||||
<Compile Include="1.5\Source\Utilities\AnimationUtility.cs" />
|
<Compile Include="1.5\Source\Utilities\AnimationUtility.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@ -108,7 +115,13 @@
|
||||||
<Content Include="1.5\Defs\GroupAnimationDefs\TestGroupAnimation1.xml" />
|
<Content Include="1.5\Defs\GroupAnimationDefs\TestGroupAnimation1.xml" />
|
||||||
<Content Include="1.5\Defs\MainTabDefs\MainButtonDef.xml" />
|
<Content Include="1.5\Defs\MainTabDefs\MainButtonDef.xml" />
|
||||||
<Content Include="1.5\Defs\SoundDefs\Sounds_Sex.xml" />
|
<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\CompatibilityPatch_FacialAnimation.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" />
|
||||||
|
<Content Include="1.5\Patches\CompPatches\CombatExtended.xml" />
|
||||||
|
<Content Include="1.5\Patches\CompPatches\ZombieLand.xml" />
|
||||||
<Content Include="1.5\Patches\Patch_GenitaliaRenderNode.xml" />
|
<Content Include="1.5\Patches\Patch_GenitaliaRenderNode.xml" />
|
||||||
<Content Include="1.5\Sounds\Sex\Clap_1.wav" />
|
<Content Include="1.5\Sounds\Sex\Clap_1.wav" />
|
||||||
<Content Include="1.5\Sounds\Sex\Clap_2.wav" />
|
<Content Include="1.5\Sounds\Sex\Clap_2.wav" />
|
||||||
|
|
Loading…
Reference in a new issue