using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.UI; namespace RimWorldAnimationStudio { public class ActorAddonKeyframeCard : MonoBehaviour { public string addonName; public InputField xOffsetField; public InputField zOffsetField; public InputField rotationField; public void Start() { EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); }); EventsManager.onStageIDChanged.AddListener(delegate { UpdateGUI(); }); EventsManager.onActorIDChanged.AddListener(delegate { UpdateGUI(); }); EventsManager.onStageTickChanged.AddListener(delegate { Debug.Log("stagetick"); UpdateGUI(); }); xOffsetField.onEndEdit.AddListener(delegate { OnValueChanged(); }); zOffsetField.onEndEdit.AddListener(delegate { OnValueChanged(); }); rotationField.onEndEdit.AddListener(delegate { OnValueChanged(); }); UpdateGUI(); } public void OnValueChanged() { PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true); keyframe.GetAddonKeyframe(addonName).PosX = float.Parse(xOffsetField.text); keyframe.GetAddonKeyframe(addonName).PosZ = float.Parse(zOffsetField.text); keyframe.GetAddonKeyframe(addonName).Rotation = float.Parse(rotationField.text); Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves(); Workspace.RecordEvent("Actor addon position / orientation"); } public void UpdateGUI() { PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip(); xOffsetField.SetTextWithoutNotify(clip.GetActorAddon(addonName).PosX.Evaluate((float)Workspace.StageTick / Workspace.StageWindowSize).ToString()); zOffsetField.SetTextWithoutNotify(clip.GetActorAddon(addonName).PosZ.Evaluate((float)Workspace.StageTick / Workspace.StageWindowSize).ToString()); rotationField.SetTextWithoutNotify(clip.GetActorAddon(addonName).Rotation.Evaluate((float)Workspace.StageTick / Workspace.StageWindowSize).ToString()); } } }