Exemple #1
0
    public void UpdateInputMode(UnitPlayer _Player, ControllerPlayer _Controller)
    {
        m_Direction = E_Direction.None;
        if (Input.GetKey(KeyCode.Z))
        {
            m_Direction = E_Direction.North;
        }
        if (Input.GetKey(KeyCode.S))
        {
            m_Direction = E_Direction.South;
        }
        if (Input.GetKey(KeyCode.D))
        {
            m_Direction = E_Direction.East;
        }
        if (Input.GetKey(KeyCode.Q))
        {
            m_Direction = E_Direction.West;
        }

        if (_Player.CanMove())
        {
            if (m_Direction != E_Direction.None)
            {
                I_Unit unitOnTile = _Player.GetTile().GetNeighbour(m_Direction).GetUnit();
                if (_Player.CanMoveTo(m_Direction))
                {
                    _Player.Move(m_Direction);
                    TurnOrder.StartAllUnitsTurn();
                }
                else if (unitOnTile is UnitEnemy)
                {
                    _Player.SetAttackingEnemy(unitOnTile as UnitEnemy);
                }
                else
                {
                    _Player.TurnToward(m_Direction);
                }
            }
        }
        _Controller.SetAnimatorBool("IsMoving", _Player.IsMoving());
    }
 public void StartTurn()
 {
     if (m_MovingDirection != E_Direction.None && !m_Enemy.IsMoving())
     {
         I_Tile currentTile = m_Enemy.GetTile();
         if (currentTile != null)
         {
             bool isPlayerAtNorth = currentTile.GetNeighbour(E_Direction.North).GetUnit() is UnitPlayer;
             bool isPlayerAtSouth = currentTile.GetNeighbour(E_Direction.South).GetUnit() is UnitPlayer;
             bool isPlayerAtEast  = currentTile.GetNeighbour(E_Direction.East).GetUnit() is UnitPlayer;
             bool isPlayerAtWest  = currentTile.GetNeighbour(E_Direction.West).GetUnit() is UnitPlayer;
             if (isPlayerAtNorth || isPlayerAtSouth || isPlayerAtEast || isPlayerAtWest)
             {
                 if (isPlayerAtNorth)
                 {
                     m_Enemy.TurnToward(E_Direction.North);
                     UnitPlayer player = currentTile.GetNeighbour(E_Direction.North).GetUnit() as UnitPlayer;
                     if (!player.IsAttackedByEnemy())
                     {
                         player.SetAttackingEnemy(m_Enemy);
                     }
                 }
                 else if (isPlayerAtSouth)
                 {
                     m_Enemy.TurnToward(E_Direction.South);
                     UnitPlayer player = currentTile.GetNeighbour(E_Direction.South).GetUnit() as UnitPlayer;
                     if (!player.IsAttackedByEnemy())
                     {
                         player.SetAttackingEnemy(m_Enemy);
                     }
                 }
                 else if (isPlayerAtEast)
                 {
                     m_Enemy.TurnToward(E_Direction.East);
                     UnitPlayer player = currentTile.GetNeighbour(E_Direction.East).GetUnit() as UnitPlayer;
                     if (!player.IsAttackedByEnemy())
                     {
                         player.SetAttackingEnemy(m_Enemy);
                     }
                 }
                 else if (isPlayerAtWest)
                 {
                     m_Enemy.TurnToward(E_Direction.West);
                     UnitPlayer player = currentTile.GetNeighbour(E_Direction.West).GetUnit() as UnitPlayer;
                     if (!player.IsAttackedByEnemy())
                     {
                         player.SetAttackingEnemy(m_Enemy);
                     }
                 }
             }
             else
             {
                 m_TimerMove -= Time.deltaTime;
                 if (m_TimerMove < 0)
                 {
                     List <E_Direction> directionsPossible = new List <E_Direction>();
                     if (m_MovingDirection != E_Direction.South && m_Enemy.CanMoveTo(E_Direction.North))
                     {
                         directionsPossible.Add(E_Direction.North);
                     }
                     if (m_MovingDirection != E_Direction.North && m_Enemy.CanMoveTo(E_Direction.South))
                     {
                         directionsPossible.Add(E_Direction.South);
                     }
                     if (m_MovingDirection != E_Direction.West && m_Enemy.CanMoveTo(E_Direction.East))
                     {
                         directionsPossible.Add(E_Direction.East);
                     }
                     if (m_MovingDirection != E_Direction.East && m_Enemy.CanMoveTo(E_Direction.West))
                     {
                         directionsPossible.Add(E_Direction.West);
                     }
                     if (directionsPossible.Count > 0)
                     {
                         m_MovingDirection = directionsPossible[Random.Range(0, directionsPossible.Count)];
                         m_TimerMove       = Random.Range(1.0f, 3.0f);
                     }
                 }
                 if (m_Enemy.CanMoveTo(m_MovingDirection))
                 {
                     m_Enemy.Move(m_MovingDirection);
                 }
                 else
                 {
                     if (!m_Enemy.GetTile().GetNeighbour(m_MovingDirection).IsWalkable() || m_Enemy.GetTile().GetNeighbour(m_MovingDirection).GetUnit() is UnitEnemy)
                     {
                         List <E_Direction> directionsPossible = new List <E_Direction>();
                         if (m_MovingDirection != E_Direction.North && m_Enemy.CanMoveTo(E_Direction.North))
                         {
                             directionsPossible.Add(E_Direction.North);
                         }
                         if (m_MovingDirection != E_Direction.South && m_Enemy.CanMoveTo(E_Direction.South))
                         {
                             directionsPossible.Add(E_Direction.South);
                         }
                         if (m_MovingDirection != E_Direction.East && m_Enemy.CanMoveTo(E_Direction.East))
                         {
                             directionsPossible.Add(E_Direction.East);
                         }
                         if (m_MovingDirection != E_Direction.West && m_Enemy.CanMoveTo(E_Direction.West))
                         {
                             directionsPossible.Add(E_Direction.West);
                         }
                         if (directionsPossible.Count > 0)
                         {
                             m_MovingDirection = directionsPossible[Random.Range(0, directionsPossible.Count)];
                         }
                     }
                 }
             }
         }
         else
         {
             TurnOrder.RemoveUnit(this);
         }
     }
 }
Exemple #3
0
    public void UpdateInputMode(UnitPlayer _Player, ControllerPlayer _Controller)
    {
        if (Input.touchCount >= 1)
        {
            Touch touch = Input.touches[0];
            if (!m_HasStartedSwipe)
            {
                m_HasStartedSwipe    = true;
                m_SwipeStartPosition = touch.position;
            }
            UserInterface.DisplayMovementLine(m_SwipeStartPosition, touch.position);
            if (touch.phase == TouchPhase.Canceled)
            {
                m_HasStartedSwipe = false;
                UserInterface.HideMovementLine();
            }
            else if (touch.phase == TouchPhase.Ended)
            {
                Vector2 swipeDirection = touch.position - m_SwipeStartPosition;
                if (swipeDirection.sqrMagnitude > 100)
                {
                    if (Mathf.Abs(swipeDirection.x) > Mathf.Abs(swipeDirection.y))
                    {
                        if (swipeDirection.x > 0)
                        {
                            m_DirectionBuffer = E_Direction.East;
                        }
                        else
                        {
                            m_DirectionBuffer = E_Direction.West;
                        }
                    }
                    else
                    {
                        if (swipeDirection.y > 0)
                        {
                            m_DirectionBuffer = E_Direction.North;
                        }
                        else
                        {
                            m_DirectionBuffer = E_Direction.South;
                        }
                    }
                }
                m_HasStartedSwipe = false;
                UserInterface.HideMovementLine();
            }
        }

        if (_Player.CanMove())
        {
            if (m_DirectionBuffer != E_Direction.None && _Player.CanMoveTo(m_DirectionBuffer))
            {
                m_MovingDirection = m_DirectionBuffer;
                m_DirectionBuffer = E_Direction.None;
            }
            if (m_MovingDirection != E_Direction.None)
            {
                I_Unit unitOnTile = _Player.GetTile().GetNeighbour(m_MovingDirection).GetUnit();
                if (_Player.CanMoveTo(m_MovingDirection))
                {
                    _Player.Move(m_MovingDirection);
                    TurnOrder.StartAllUnitsTurn();
                }
                else if (unitOnTile is UnitEnemy)
                {
                    _Player.SetAttackingEnemy(unitOnTile as UnitEnemy);
                }
                else
                {
                    m_MovingDirection = E_Direction.None;
                }
            }
        }

        _Controller.SetAnimatorBool("IsMoving", _Player.IsMoving());
    }