public void TickMovement()
        {
            if (m_TargetNode == null)
            {
                return;
            }

            Vector3 target   = m_TargetNode.Position;
            Vector3 position = m_Transform.position; // Needed for calculating position on the grid

            target.y = position.y;

            Node  currentNode = m_Grid.GetNodeAtPoint(position);
            float distance    = (target - position).sqrMagnitude;

            if (currentNode != m_CurrentNode)
            {
                m_CurrentNode.EnemyDatas.Remove(m_EnemyData);
                m_CurrentNode = currentNode;
                m_CurrentNode.EnemyDatas.Add(m_EnemyData);
            }
            if (distance < TOLERANCE)
            {
                m_TargetNode = m_TargetNode.NextNode;
                return;
            }

            Vector3 dir   = (target - position).normalized;
            Vector3 delta = dir * (m_Speed * Time.deltaTime);

            m_Transform.Translate(delta);
        }
        public void TickMovement()
        {
            if (m_TargetNode == null)
            {
                return;
            }

            Vector3 targetNodePosition = m_TargetNode.Position;
            Vector3 currentPosition    = m_Transform.position;

            Vector3 target   = new Vector3(targetNodePosition.x, currentPosition.y, targetNodePosition.z);
            float   distance = (target - currentPosition).magnitude;

            if (distance < TOLERANCE)
            {
                m_TargetNode = m_TargetNode.NextNode;
                return;
            }

            Vector3 dir   = (target - m_Transform.position).normalized;
            Vector3 delta = dir * (m_Speed * Time.deltaTime);

            m_Transform.Translate(delta);

            Node nextNode = m_Grid.GetNodeAtPoint(m_Transform.position);

            if (nextNode != m_CurrentNode)
            {
                nextNode?.EnemyDatas.Add(m_Data);
                m_CurrentNode?.EnemyDatas.Remove(m_Data);

                m_CurrentNode = nextNode;
            }
        }
 public GridMovementAgent(float speed, Transform transform, Grid grid, EnemyData data)
 {
     m_Speed       = speed;
     m_Transform   = transform;
     m_Data        = data;
     m_Grid        = grid;
     m_CurrentNode = grid.GetNodeAtPoint(transform.position);
     SetTargetNode(grid.GetStartNode());
 }
 public GridMovementAgent(float speed, Transform transform, Grid grid, EnemyData enemyData)
 {
     m_Speed     = speed;
     m_Transform = transform;
     m_EnemyData = enemyData;
     SetStartNode(grid.GetStartNode());
     m_TargetNode.EnemyDatas.Add(m_EnemyData);
     m_Grid        = grid;
     m_CurrentNode = m_Grid.GetNodeAtPoint(m_Transform.position);
 }