using System; using System.Collections.Generic; using Reset.Core.Tools; using Reset.Units; using UnityEngine; public class UnitCombat : MonoBehaviour{ public List draggedUnits = new List(); private UnitMovementHandler movement; private Vector3 lastPosition; private Vector3 positionDelta; private float lastSpeed; private float speedDelta; void Awake(){ movement = GetComponent(); } void Start(){ lastPosition = transform.position; } // Update is called once per frame void Update(){ positionDelta = lastPosition.DirectionTo(transform.position); speedDelta = Vector3.Distance(lastPosition, transform.position) / Time.deltaTime; // Test speedDelta *= 1.0f; speedDelta = Mathf.Max(3f, speedDelta); float speedDiff = Mathf.Lerp(.2f, 1.4f, speedDelta); speedDelta *= speedDiff; DebugOverlayDrawer.ChangeValue($"Combat - {name}", "Position Delta", positionDelta); DebugOverlayDrawer.ChangeValue($"Combat - {name}", "Speed Delta", speedDelta); lastPosition = transform.position; foreach (Collider draggedUnit in draggedUnits) { UnitMovementHandler draggedUnitMovement = draggedUnit.GetComponent(); if (!draggedUnitMovement) { Debug.LogError($"No available UnitMovement on {draggedUnit.name}. Aborting drag on this unit."); continue; } draggedUnitMovement.SetNewDirection((positionDelta).ToVector2(), 1f, true); draggedUnitMovement.SetNewSpeed(speedDelta, 1f, true); draggedUnitMovement.SetNewRotation(-transform.position.DirectionTo(draggedUnit.transform.position), 1f, true); } } }