using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; namespace RimWorldAnimationStudio { public class ActorBody : MonoBehaviour, IPointerClickHandler, IDragHandler { public int actorID; public string bodyType = "Male"; public SpriteRenderer bodyRenderer; public SpriteRenderer headRenderer; public void Initialize(int actorID) { this.actorID = actorID; } public void OnPointerClick(PointerEventData eventData) { if (eventData.pointerCurrentRaycast.gameObject.GetComponent() == null) { return; } Activate(); } public void OnDrag(PointerEventData eventData) { Activate(); PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe(); if (Workspace.Instance.GetCurrentPawnKeyframe() == null) { Debug.LogWarning("Cannot alter actor - no keyframe data available"); return; } Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (Workspace.actorManipulationMode == ActorManipulationMode.Pan) { keyframe.bodyOffsetX = mousePosition.x; keyframe.bodyOffsetZ = mousePosition.y; } else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate) { float angle = Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position); keyframe.bodyAngle = angle; } else if (Workspace.actorManipulationMode == ActorManipulationMode.Face) { float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position); int facing = -Mathf.RoundToInt(angle / 90f ); facing = facing < 0 ? facing + 4 : facing; keyframe.bodyFacing = facing; } PawnAnimationClip clip = Workspace.Instance.GetPawnAnimationClip(actorID); clip.BuildSimpleCurves(); } public void Activate() { Workspace.actorID = actorID; foreach (ActorBody actorBody in AnimationController.Instance.GetComponentsInChildren()) { if (actorBody == this) { continue; } actorBody.bodyRenderer.color = new Color(1f, 1f, 1f); actorBody.headRenderer.color = new Color(1f, 1f, 1f); } bodyRenderer.color = new Color(0f, 1f, 0f); headRenderer.color = new Color(0f, 1f, 0f); } } }