mirror of
https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
synced 2024-08-15 00:43:45 +00:00
save shift value and reuse for every anim
This commit is contained in:
parent
2886b647a7
commit
59d062f4c9
5 changed files with 68 additions and 11 deletions
Binary file not shown.
|
@ -49,6 +49,8 @@ namespace Rimworld_Animations {
|
|||
public float bodyAngle = 0, headAngle = 0, genitalAngle = 0;
|
||||
public Rot4 headFacing = Rot4.North, bodyFacing = Rot4.North;
|
||||
|
||||
public xxx.rjwSextype curSexType;
|
||||
|
||||
public List<Pawn> actorsInCurrentAnimation;
|
||||
|
||||
public bool controlGenitalAngle = false;
|
||||
|
@ -111,9 +113,10 @@ namespace Rimworld_Animations {
|
|||
anchor = thing.Position.ToVector3Shifted();
|
||||
}
|
||||
}
|
||||
public void StartAnimation(AnimationDef anim, List<Pawn> actors, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false) {
|
||||
public void StartAnimation(AnimationDef anim, List<Pawn> actors, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false, xxx.rjwSextype sexType = xxx.rjwSextype.Masturbation) {
|
||||
|
||||
actorsInCurrentAnimation = actors;
|
||||
curSexType = sexType;
|
||||
|
||||
if (anim.actors.Count <= actor)
|
||||
{
|
||||
|
@ -497,6 +500,15 @@ namespace Rimworld_Animations {
|
|||
controlGenitalAngle = anim.actors[actor].controlGenitalAngle;
|
||||
|
||||
tickAnim();
|
||||
|
||||
//reset the clock time of every pawn in animation
|
||||
if (pawn.jobs.curDriver is rjw.JobDriver_Sex)
|
||||
{
|
||||
(pawn.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = anim.animationTimeTicks;
|
||||
(pawn.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = anim.animationTimeTicks;
|
||||
(pawn.jobs.curDriver as rjw.JobDriver_Sex).duration = anim.animationTimeTicks;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public bool LoopNeverending()
|
||||
|
|
|
@ -51,6 +51,26 @@ namespace Rimworld_Animations {
|
|||
AnimationSettings.rotation.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, 0);
|
||||
}
|
||||
|
||||
List<Pawn> pawnsToAnimateOrdered = curPawn.TryGetComp<CompBodyAnimator>().actorsInCurrentAnimation.OrderBy(x => Int32.Parse(x.Name.ToStringSafe())).ToList();
|
||||
|
||||
string pawnNamesAndSexType = "";
|
||||
foreach (Pawn p in pawnsToAnimateOrdered)
|
||||
{
|
||||
pawnNamesAndSexType += p.Name.ToStringSafe();
|
||||
}
|
||||
pawnNamesAndSexType += curPawn.TryGetComp<CompBodyAnimator>().curSexType.ToStringSafe();
|
||||
|
||||
int shiftCount = 0;
|
||||
|
||||
if (AnimationSettings.shiftCount.TryGetValue(pawnNamesAndSexType, out int value))
|
||||
{
|
||||
shiftCount = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
AnimationSettings.shiftCount.Add(pawnNamesAndSexType, 0);
|
||||
}
|
||||
|
||||
listingStandard.Label("Name: " + curPawn.Name + " Race: " + curPawn.def.defName + " Actor Index: " + curPawn.TryGetComp<CompBodyAnimator>().ActorIndex + " Body Type (if any): " + bodyTypeDef + " Animation: " + def.label + (curPawn.TryGetComp<CompBodyAnimator>().Mirror ? " mirrored" : ""));
|
||||
|
||||
if(curPawn.def.defName == "Human") {
|
||||
|
@ -76,32 +96,31 @@ namespace Rimworld_Animations {
|
|||
|
||||
listingStandard.GapLine();
|
||||
|
||||
if(listingStandard.ButtonText("Shift Actors")) {
|
||||
if (listingStandard.ButtonText("Shift Actors")) {
|
||||
|
||||
if(AnimationSettings.debugMode) {
|
||||
Log.Message("Shifting actors in animation...");
|
||||
}
|
||||
|
||||
for(int i = 0; i < curPawn.TryGetComp<CompBodyAnimator>().actorsInCurrentAnimation.Count; i++) {
|
||||
AnimationSettings.shiftCount[pawnNamesAndSexType] = shiftCount + 1 % curPawn.TryGetComp<CompBodyAnimator>().actorsInCurrentAnimation.Count;
|
||||
|
||||
|
||||
for (int i = 0; i < curPawn.TryGetComp<CompBodyAnimator>().actorsInCurrentAnimation.Count; i++) {
|
||||
|
||||
Pawn actor = curPawn.TryGetComp<CompBodyAnimator>().actorsInCurrentAnimation[i];
|
||||
|
||||
actor.TryGetComp<CompBodyAnimator>()?.shiftActorPositionAndRestartAnimation();
|
||||
|
||||
//reset the clock time of every pawn in animation
|
||||
if(actor.jobs.curDriver is rjw.JobDriver_Sex) {
|
||||
(actor.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = def.animationTimeTicks;
|
||||
(actor.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = def.animationTimeTicks;
|
||||
(actor.jobs.curDriver as rjw.JobDriver_Sex).duration = def.animationTimeTicks;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (offsetX != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x || offsetZ != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y) {
|
||||
AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = new Vector2(offsetX, offsetZ);
|
||||
|
||||
}
|
||||
|
||||
if(rotation != AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex]) {
|
||||
|
|
|
@ -94,6 +94,30 @@ namespace Rimworld_Animations {
|
|||
pawnsToAnimate[i].TryGetComp<CompBodyAnimator>().isAnimating = false;
|
||||
}
|
||||
|
||||
List<Pawn> pawnsToAnimateOrdered = pawnsToAnimate.OrderBy(x => Int32.Parse(x.Name.ToStringSafe())).ToList();
|
||||
|
||||
string pawnNamesAndSexType = "";
|
||||
foreach (Pawn p in pawnsToAnimateOrdered)
|
||||
{
|
||||
pawnNamesAndSexType += p.Name.ToStringSafe();
|
||||
}
|
||||
pawnNamesAndSexType += sexType.ToStringSafe();
|
||||
|
||||
if (AnimationSettings.shiftCount.TryGetValue(pawnNamesAndSexType, out int value))
|
||||
{
|
||||
|
||||
Log.Message("Shifting " + pawnNamesAndSexType + " " + value + "times");
|
||||
|
||||
for(int i = 0; i < value; i++)
|
||||
{
|
||||
for(int j = 0; j < pawnsToAnimate.Count; j++)
|
||||
{
|
||||
pawnsToAnimate[j].TryGetComp<CompBodyAnimator>().shiftActorPositionAndRestartAnimation();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < pawnsToAnimate.Count; i++) {
|
||||
|
||||
if (bed != null)
|
||||
|
@ -104,7 +128,7 @@ namespace Rimworld_Animations {
|
|||
}
|
||||
|
||||
bool shiver = pawnsToAnimate[i].jobs.curDriver is JobDriver_SexBaseRecieverRaped;
|
||||
pawnsToAnimate[i].TryGetComp<CompBodyAnimator>().StartAnimation(anim, pawnsToAnimate, i, mirror, shiver, fastAnimForQuickie);
|
||||
pawnsToAnimate[i].TryGetComp<CompBodyAnimator>().StartAnimation(anim, pawnsToAnimate, i, mirror, shiver, fastAnimForQuickie, sexType);
|
||||
|
||||
int animTicks = anim.animationTimeTicks - (fastAnimForQuickie ? anim.animationStages[0].playTimeTicks : 0);
|
||||
(pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).ticks_left = animTicks;
|
||||
|
|
|
@ -18,6 +18,7 @@ namespace Rimworld_Animations {
|
|||
|
||||
public static Dictionary<string, Vector2> offsets = new Dictionary<string, Vector2>();
|
||||
public static Dictionary<string, float> rotation = new Dictionary<string, float>();
|
||||
public static Dictionary<string, int> shiftCount = new Dictionary<string, int>();
|
||||
|
||||
public override void ExposeData() {
|
||||
|
||||
|
@ -38,6 +39,7 @@ namespace Rimworld_Animations {
|
|||
|
||||
Scribe_Collections.Look(ref offsets, "RJWAnimations-animationOffsets");
|
||||
Scribe_Collections.Look(ref rotation, "RJWAnimations-rotationOffsets");
|
||||
Scribe_Collections.Look(ref shiftCount, "RJWAnimations-shiftCount");
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue