Actor addons and animation

- Includes addons for hands and sex toys
- WIP and very buggy
This commit is contained in:
AbstractConcept 2022-10-24 23:43:25 -05:00
parent d9e6288e3a
commit cd4711a8e5
400 changed files with 10269 additions and 661 deletions

View file

@ -30,6 +30,9 @@ namespace RimWorldAnimationStudio
public Button playToggleButton;
public Text stageLengthText;
public Text animationLengthText;
public GameObject handLeftControls;
public GameObject handRightControls;
public GameObject sexToyControls;
[Header("Prefabs")]
public ActorBody actorBodyPrefab;
@ -197,7 +200,7 @@ namespace RimWorldAnimationStudio
Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
Vector3 headPos = new Vector3(headOffset.x, headOffset.z, 0);
Vector3 appendagePos = PawnUtility.AppendageOffsetAt(bodyType, bodyFacing);
Vector3 appendagePos = PawnUtility.GroinOffsetAt(bodyType, bodyFacing);
float appendageRotation = clip.GenitalAngle.Evaluate(clipPercent);
actorBody.transform.position = bodyPos + actor.GetFinalTransformOffset();
@ -236,6 +239,41 @@ namespace RimWorldAnimationStudio
if (ActorKeyframeCard.Instance.headBobField.isFocused == false) { ActorKeyframeCard.Instance.headBobField.text = headBob.ToString("0.000"); }
if (ActorKeyframeCard.Instance.headRotationField.isFocused == false) { ActorKeyframeCard.Instance.headRotationField.text = headAngle.ToString("0.000"); }
if (ActorKeyframeCard.Instance.appendageRotationField.isFocused == false) { ActorKeyframeCard.Instance.appendageRotationField.text = appendageRotation.ToString("0.000"); }
if (actorID == Workspace.actorID)
{
handLeftControls.SetActive(clip.GetActorAddon("left hand").render);
handRightControls.SetActive(clip.GetActorAddon("right hand").render);
sexToyControls.SetActive(clip.GetActorAddon("dildo").render);
}
foreach (ActorAddon addon in clip.addons)
{
ActorBodyPart bodyPart = actorBody.GetComponentsInChildren<ActorBodyPart>()?.FirstOrDefault(x => x.addonName == addon.addonName);
if (bodyPart == null) continue;
Vector3 anchor;
ActorBody anchoringActorBody = actorBodies.GetComponentsInChildren<ActorBody>()?.FirstOrDefault(x => x.actorID == addon.anchoringActor);
bodyPos = new Vector3(anchoringActorBody.transform.position.x, anchoringActorBody.transform.position.y, 0);
alienRaceDef = Workspace.animationDef.actors[addon.anchoringActor].GetAlienRaceDef();
Actor anchoringActor = Workspace.animationDef.actors[addon.anchoringActor];
bodyFacing = (int)Workspace.animationDef.animationStages[Workspace.stageID].animationClips[addon.anchoringActor].BodyFacing.Evaluate(clipPercent);
switch (addon.anchorName)
{
case "torso": anchor = bodyPos; break;
case "head": anchor = new Vector3(anchoringActorBody.transform.Find("ActorHead").position.x, anchoringActorBody.transform.Find("ActorHead").position.y, 0); break;
case "groin": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.GroinOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
case "left breast": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.BreastLeftOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
case "right breast": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.BreastRightOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
default: anchor = new Vector3(); break;
}
bodyPart.transform.position = anchor + new Vector3(addon.PosX.Evaluate(clipPercent), addon.PosZ.Evaluate(clipPercent), 0);
bodyPart.transform.eulerAngles = new Vector3(0, 0, -addon.Rotation.Evaluate(clipPercent));
bodyPart.GetComponent<SpriteRenderer>().sortingLayerName = addon.layer;
}
}
}

View file

@ -91,6 +91,12 @@ namespace RimWorldAnimationStudio
else if (animationDef.animationStages.Count == 0)
{ animationDef.animationStages[0].playTimeTicksQuick = animationDef.animationStages[0].playTimeTicks; }
}
foreach (AnimationStage stage in animationDef.animationStages)
{
stage.OnPostLoad();
}
}
public void TryToSaveAnimation()