using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace RimWorldAnimationStudio { public class ActorCard : MonoBehaviour { public Dropdown genderDropdown; public Dropdown bodyTypeDropdown; public InputField bodyOffsetXField; public InputField bodyOffsetZField; public Toggle initiatorToggle; public void Initialize() { Actor actor = Workspace.animationDef.actors[Workspace.actorID]; string bodyType = bodyTypeDropdown.options[bodyTypeDropdown.value].text; bodyType = bodyType == null || bodyType == "" ? "Male" : bodyType; initiatorToggle.isOn = actor.initiator; bodyOffsetXField.text = actor.bodyTypeOffset.GetOffset(bodyType).x.ToString(); bodyOffsetZField.text = actor.bodyTypeOffset.GetOffset(bodyType).z.ToString(); } public void OnBodyTypeChanged() { if (Workspace.animationDef == null) return; Actor actor = Workspace.animationDef.actors[Workspace.actorID]; string bodyType = bodyTypeDropdown.options[bodyTypeDropdown.value].text; bodyType = bodyType == null || bodyType == "" ? "Male" : bodyType; AnimationController.Instance.actorBodies.GetComponentsInChildren()[Workspace.actorID].bodyType = bodyType; bodyOffsetXField.text = actor.bodyTypeOffset.GetOffset(bodyType).x.ToString(); bodyOffsetZField.text = actor.bodyTypeOffset.GetOffset(bodyType).z.ToString(); } public void OnValueChanged() { if (Workspace.animationDef == null) return; Actor actor = Workspace.animationDef.actors[Workspace.actorID]; string bodyType = bodyTypeDropdown.options[bodyTypeDropdown.value].text; bodyType = bodyType == null || bodyType == "" ? "Male" : bodyType; float.TryParse(bodyOffsetXField.text, out float x); float.TryParse(bodyOffsetZField.text, out float z); actor.bodyTypeOffset.SetOffset(bodyType, new Vector2(x, z)); actor.initiator = initiatorToggle.isOn; switch (genderDropdown.value) { case 0: actor.requiredGender = new List() { "Female" }; break; case 2: actor.requiredGender = new List() { "Male" }; break; default: actor.requiredGender = null; break; } Workspace.Instance.RecordEvent("Actor body type offset data"); } public void Update() { if (Workspace.animationDef == null) return; if (Workspace.actorID >= AnimationController.Instance.actorBodies.GetComponentsInChildren().Count()) { Debug.Log("Waiting for actors to initialize..."); return; } Actor actor = Workspace.animationDef.actors[Workspace.actorID]; ActorBody actorBody = AnimationController.Instance.actorBodies.GetComponentsInChildren()[Workspace.actorID]; string bodyType = actorBody.bodyType; bodyType = bodyType == null || bodyType == "" ? "Male" : bodyType; bodyTypeDropdown.value = bodyTypeDropdown.options.IndexOf(bodyTypeDropdown.options.First(x => x.text == bodyType)); if (bodyOffsetXField.isFocused == false) { bodyOffsetXField.text = actor.bodyTypeOffset.GetOffset(bodyType).x.ToString(); } if (bodyOffsetZField.isFocused == false) { bodyOffsetZField.text = actor.bodyTypeOffset.GetOffset(bodyType).z.ToString(); } initiatorToggle.isOn = actor.initiator; } } }