public bool CanMove(Vector2 position) { if (position.x < 0 || position.x >= dungeon.width || position.y < 0 || position.y >= dungeon.height) { return(false); } char c = dungeon.canvas[(int)position.x, (int)position.y]; if (c == 'x' || c == 'o' || c == '{') { BaseVisual v = GetObject(position); if (v != null) { return(false); } if (player.position == position) { return(false); } return(true); } return(false); }
private void Visual_EntityTick(BaseVisual visual) { //TODO make dynamic bool willMove = dungeon.random.Next(0, 3) >= 1; // 75% if (willMove) { bool horizontal = dungeon.random.Next(0, 2) == 0; int value = dungeon.random.Next(-1, 2); Vector2 movement = new Vector2(horizontal ? value : 0, horizontal ? 0 : value); if (CanMove(visual.position + movement)) { SetEnemyPosition((EnemyVisual)visual, visual.position + movement); } } }
public void MovePlayer(Vector2 movement) { Vector2 newPosition = player.position + movement; if (CanMove(newPosition)) { SetPlayerPosition(newPosition); return; } // found something, check if it's an object BaseVisual obj = GetObject(newPosition); if (obj != null) { obj.Action(); } }
private void Player_EntityTick(BaseVisual visual) { switch (playerAction) { case Command.MoveUp: dungeonManager.MovePlayer(new Vector2(0, -1)); break; case Command.MoveDown: dungeonManager.MovePlayer(new Vector2(0, 1)); break; case Command.MoveLeft: dungeonManager.MovePlayer(new Vector2(-1, 0)); break; case Command.MoveRight: dungeonManager.MovePlayer(new Vector2(1, 0)); break; } }