mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
126 lines
5.1 KiB
C#
126 lines
5.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace RimWorldAnimationStudio
|
|
{
|
|
public class ActorCard : MonoBehaviour
|
|
{
|
|
public Toggle initiatorToggle;
|
|
public Dropdown selectActorLayerDropdown;
|
|
public Dropdown bodyTypeDropdown;
|
|
public InputField bodyOffsetXField;
|
|
public InputField bodyOffsetZField;
|
|
public Dropdown raceDropdown;
|
|
public InputField raceOffsetXField;
|
|
public InputField raceOffsetZField;
|
|
|
|
private Actor actor { get { return Workspace.GetCurrentActor(); } }
|
|
private PawnAnimationClip clip { get { return Workspace.GetCurrentPawnAnimationClip(); } }
|
|
|
|
public void Awake()
|
|
{
|
|
UpdateRaceDropdown();
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
// General events
|
|
EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); });
|
|
EventsManager.onActorIDChanged.AddListener(delegate { UpdateGUI(); });
|
|
EventsManager.onDefNamesChanged.AddListener(delegate { UpdateRaceDropdown(); });
|
|
|
|
// Local events
|
|
initiatorToggle.onValueChanged.AddListener(delegate {
|
|
actor.initiator = initiatorToggle.isOn;
|
|
Workspace.RecordEvent("Change in actor sex initiator status ");
|
|
});
|
|
|
|
selectActorLayerDropdown.onValueChanged.AddListener(delegate {
|
|
clip.Layer = selectActorLayerDropdown.options[selectActorLayerDropdown.value].text;
|
|
Workspace.RecordEvent("Change in actor render layer");
|
|
});
|
|
|
|
bodyTypeDropdown.onValueChanged.AddListener(delegate { OnDropdownChanged(); });
|
|
bodyOffsetXField.onEndEdit.AddListener(delegate { OnInputFieldChanged(); });
|
|
bodyOffsetZField.onEndEdit.AddListener(delegate { OnInputFieldChanged(); });
|
|
|
|
raceDropdown.onValueChanged.AddListener(delegate { OnDropdownChanged(); });
|
|
raceOffsetXField.onEndEdit.AddListener(delegate { OnInputFieldChanged(); });
|
|
raceOffsetZField.onEndEdit.AddListener(delegate { OnInputFieldChanged(); });
|
|
|
|
// Initialize
|
|
UpdateGUI();
|
|
}
|
|
|
|
public void OnInputFieldChanged()
|
|
{
|
|
string bodyType = bodyTypeDropdown.options[bodyTypeDropdown.value].text;
|
|
bodyType = string.IsNullOrEmpty(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));
|
|
|
|
float.TryParse(raceOffsetXField.text, out x);
|
|
float.TryParse(raceOffsetZField.text, out z);
|
|
actor.SetPawnRaceOffset(new Vector2(x, z));
|
|
|
|
Workspace.RecordEvent("Actor offset");
|
|
|
|
UpdateGUI();
|
|
}
|
|
|
|
public void OnDropdownChanged()
|
|
{
|
|
actor.bodyType = bodyTypeDropdown.options[bodyTypeDropdown.value].text;
|
|
|
|
if (raceDropdown.options[raceDropdown.value].text != actor.GetPawnRaceDef().defName)
|
|
{ Workspace.selectedBodyPart = null; }
|
|
|
|
actor.SetPawnRaceDef(raceDropdown.options[raceDropdown.value].text);
|
|
|
|
Workspace.RecordEvent("Actor body type/race change");
|
|
|
|
UpdateGUI();
|
|
}
|
|
|
|
public void UpdateRaceDropdown()
|
|
{
|
|
raceDropdown.ClearOptions();
|
|
int index = raceDropdown.value;
|
|
|
|
IEnumerable<string> optionsList = DefaultTags.defNames.Concat(CustomTags.defNames);
|
|
foreach (string defName in optionsList)
|
|
{ raceDropdown.options.Add(new Dropdown.OptionData(defName)); }
|
|
|
|
raceDropdown.value = Mathf.Clamp(index, 0, raceDropdown.options.Count - 1);
|
|
}
|
|
|
|
public void UpdateGUI()
|
|
{
|
|
initiatorToggle.isOn = actor.Initiator;
|
|
|
|
string layer = clip.Layer;
|
|
selectActorLayerDropdown.SetValueWithoutNotify(selectActorLayerDropdown.options.FindIndex(x => x.text == layer));
|
|
|
|
string bodyType = actor.bodyType;
|
|
bodyTypeDropdown.SetValueWithoutNotify(bodyTypeDropdown.options.FindIndex(x => x.text == bodyType));
|
|
|
|
bodyOffsetXField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.BodyTypeOffset.GetOffset(bodyType).x));
|
|
bodyOffsetZField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.BodyTypeOffset.GetOffset(bodyType).z));
|
|
|
|
bodyTypeDropdown.interactable = actor.GetPawnRaceDef().isHumanoid;
|
|
bodyOffsetXField.interactable = actor.GetPawnRaceDef().isHumanoid;
|
|
bodyOffsetZField.interactable = actor.GetPawnRaceDef().isHumanoid;
|
|
|
|
string race = actor.GetPawnRaceDef().defName;
|
|
raceDropdown.SetValueWithoutNotify(raceDropdown.options.FindIndex(x => x.text == race));
|
|
|
|
raceOffsetXField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.GetPawnRaceOffset().x));
|
|
raceOffsetZField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.GetPawnRaceOffset().z));
|
|
}
|
|
}
|
|
}
|