using Reset.Core.Tools; using Sirenix.OdinInspector; using UnityEngine; namespace Reset.Units{ public class ResolvedMovement{ public struct MoveDirection{ private Transform owner; // Both are in world space, and translated to local private Vector2 _moveRaw; private Vector2 _moveDir; [ShowInInspector] public Vector2 World{ get{ DebugOverlayDrawer.ChangeValue("Movement", "_moveDir", _moveDir); return _moveDir; } set{ _moveDir = value; } } [ShowInInspector] public Vector2 Local => owner.InverseTransformDirection(_moveDir.ToVector3()).ToVector2(); [ShowInInspector, PropertySpace(5)] public Vector2 RawWorld{ get{ DebugOverlayDrawer.ChangeValue("Movement", "_moveRaw", _moveRaw); // return owner.TransformDirection(_moveDir.ToVector3()).ToVector2(); return _moveRaw; } set{ _moveRaw = value; } } [ShowInInspector] public Vector2 RawLocal => owner.InverseTransformDirection(_moveRaw.ToVector3()).ToVector2(); public MoveDirection(Transform ownerTransform){ owner = ownerTransform; _moveDir = Vector2.zero; _moveRaw = Vector2.zero; } } [ShowInInspector, InlineProperty, BoxGroup("Direction"), HideLabel] public MoveDirection moveDirection; public float moveSpeed; public Quaternion rotation; public float rotationSpeed; public float gravity; } }