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; private int actorID = -1; private bool isDirty = false; 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 || isDirty) 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 OpenSelectBodyPartsDialog() { if (Workspace.animationDef == null) return; Actor actor = Workspace.animationDef.actors[Workspace.actorID]; var dialog = Resources.FindObjectsOfTypeAll(typeof(SelectBodyPartsDialog)) as SelectBodyPartsDialog[]; if (dialog != null) { dialog[0].Initialize(actor); dialog[0].Pop(); } } public void OpenSelectDefNamesDialog() { if (Workspace.animationDef == null) return; Actor actor = Workspace.animationDef.actors[Workspace.actorID]; var dialog = Resources.FindObjectsOfTypeAll(typeof(SelectDefNamesDialog)) as SelectDefNamesDialog[]; if (dialog != null) { dialog[0].Initialize(actor); dialog[0].Pop(); } } public void OpenSelectBodyDefTypesDialog() { if (Workspace.animationDef == null) return; Actor actor = Workspace.animationDef.actors[Workspace.actorID]; var dialog = Resources.FindObjectsOfTypeAll(typeof(SelectBodyDefTypesDialog)) as SelectBodyDefTypesDialog[]; if (dialog != null) { dialog[0].Initialize(actor); dialog[0].Pop(); } }*/ public void Update() { if (Workspace.animationDef == null) return; if (actorID != Workspace.actorID) { isDirty = true; 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)); bodyOffsetXField.text = actor.bodyTypeOffset.GetOffset(bodyType).x.ToString(); bodyOffsetZField.text = actor.bodyTypeOffset.GetOffset(bodyType).z.ToString(); initiatorToggle.isOn = actor.initiator; actorID = Workspace.actorID; isDirty = false; } } } }