Keyframe stretching plus appendage manipulation

This commit is contained in:
AbstractConcept 2022-09-20 01:03:55 -05:00
parent 18c0473f39
commit 1af7f41d63
427 changed files with 7003 additions and 1147 deletions

View file

@ -11,10 +11,14 @@ namespace RimWorldAnimationStudio
public InputField positionXField;
public InputField positionZField;
public InputField rotationField;
public InputField headBobField;
public InputField headRotationField;
public InputField appendageRotationField;
private int lastTick = -1;
private bool isDirty = false;
// Move to anim controller
public void Update()
{
if ((Workspace.animationDef == null || AnimationController.Instance.stageTick == lastTick) && isDirty == false)
@ -41,15 +45,17 @@ namespace RimWorldAnimationStudio
if (headAngle < 0) headAngle = 360 - ((-1f * headAngle) % 360);
if (headAngle > 360) headAngle %= 360;
int bodyFacing = (int)clip.BodyFacing.Evaluate(clipPercent);
Vector3 headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent)) + PawnUtility.BaseHeadOffsetAt(bodyType, bodyFacing);
float headBob = clip.HeadBob.Evaluate(clipPercent);
Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
Vector3 headPos = new Vector3(headBob.x, headBob.z, 0);
float appendageRotation = clip.GenitalAngle.Evaluate(clipPercent);
positionXField.text = bodyPos.x.ToString("0.000");
positionZField.text = bodyPos.y.ToString("0.000");
rotationField.text = bodyAngle.ToString("0.000");
headBobField.text = headBob.ToString("0.000");
headRotationField.text = headAngle.ToString("0.000");
appendageRotationField.text = appendageRotation.ToString("0.000");
lastTick = AnimationController.Instance.stageTick;
isDirty = false;
@ -57,12 +63,19 @@ namespace RimWorldAnimationStudio
public void OnValueChanged()
{
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetX = float.Parse(positionXField.text);
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetZ = float.Parse(positionZField.text);
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyAngle = float.Parse(rotationField.text);
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe(true);
keyframe.bodyOffsetX = float.Parse(positionXField.text);
keyframe.bodyOffsetZ = float.Parse(positionZField.text);
keyframe.bodyAngle = float.Parse(rotationField.text);
keyframe.headBob = float.Parse(headBobField.text);
keyframe.headAngle = float.Parse(headRotationField.text);
keyframe.genitalAngle = float.Parse(appendageRotationField.text);
Workspace.Instance.GetPawnAnimationClip(Workspace.actorID).BuildSimpleCurves();
isDirty = true;
Workspace.Instance.MakeDirty();
}
}
}