public void Transition(Direction roomDirection, bool unlock)
        {
            var newRoom = CurrentRoom;

            switch (roomDirection)
            {
            case Direction.Up:
                newRoom.Y--;
                break;

            case Direction.Down:
                newRoom.Y++;
                break;

            case Direction.Left:
                newRoom.X--;
                break;

            case Direction.Right:
                newRoom.X++;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (unlock)
            {
                _rooms[newRoom.Y][newRoom.X].Doors[DirectionUtility.Flip(roomDirection)]?.Unblock();
            }

            Scene?.DestroyProjectiles();
            Pan(CurrentRoom, newRoom, roomDirection);
        }
Beispiel #2
0
 public override void Halt()
 {
     _agentStatus     = AgentState.Halted;
     _agentClock      = ActionDelay;
     _statusDirection = DirectionUtility.Flip(_statusDirection);
     Move(_statusDirection, 2);
 }
Beispiel #3
0
        public void ExecuteAction()
        {
            if (_agentClock > 0)
            {
                _agentClock--;
            }

            switch (_agentStatus)
            {
            case AgentState.Ready:     //determine next action
                UpdateAction();
                break;

            case AgentState.Stunned:
            case AgentState.Halted:
                if (_agentClock == 0)
                {
                    _agentStatus = AgentState.Ready;
                }

                break;

            case AgentState.Knocked:
                if (_agentClock == 0)
                {
                    Speed        = 1;
                    _agentStatus = AgentState.Ready;
                }
                else
                {
                    Move(DirectionUtility.Flip(_currentDirection));
                }

                break;

            case AgentState.Moving:
                if (_agentClock != 0)
                {
                    Move(_currentDirection);
                }
                else
                {
                    _agentStatus = AgentState.Ready;
                }

                break;

            case AgentState.Attacking:
                break;

            default:
                throw new NotImplementedException();
            }
        }
Beispiel #4
0
 private void Move()
 {
     if (_movementTimer > 0)
     {
         _movementTimer--;
         for (var scale = 2; scale > 0; scale--)
         {
             Move(_direction);
         }
     }
     else
     {
         Move(DirectionUtility.Flip(_direction));
         _restored = Location.Equals(_origin);
     }
 }
Beispiel #5
0
 private void FlipDirection()
 {
     _currentDirection = DirectionUtility.Flip(_currentDirection);
 }
Beispiel #6
0
 protected override void Knockback()
 {
     _agentStatus     = AgentState.Knocked;
     _agentClock      = ActionDelay;
     _statusDirection = DirectionUtility.Flip(_statusDirection);
 }