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); }
public override void Halt() { _agentStatus = AgentState.Halted; _agentClock = ActionDelay; _statusDirection = DirectionUtility.Flip(_statusDirection); Move(_statusDirection, 2); }
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(); } }
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); } }
private void FlipDirection() { _currentDirection = DirectionUtility.Flip(_currentDirection); }
protected override void Knockback() { _agentStatus = AgentState.Knocked; _agentClock = ActionDelay; _statusDirection = DirectionUtility.Flip(_statusDirection); }