public void Execute(Mobile mobile, Map map, Tile nonPlayerCharacterTile) { if (mobile.CanAttack(map, nonPlayerCharacterTile)) { map.GetPlayer().HitPoints -= 3; Status.WriteToStatusLine("Bob bores you to death... literally!"); return; } }
public void Execute(Mobile mobile, Map map, Tile nonPlayerCharacterTile) { if (Program.RandomNumber(4) < 3) { //Move var direction = map.GetDirectionRandom(); if (direction != null) { map.MoveMobile(direction, nonPlayerCharacterTile); } } else { //Attack if (nonPlayerCharacterTile.Mobile.CanAttack(map, nonPlayerCharacterTile)) { map.GetPlayer().HitPoints -= 3; Status.WriteToStatusLine("The rat bites you!"); } } }
public void Execute(Mobile mobile, Map map, Tile nonPlayerCharacterTile) { if (mobile.CanAttack(map, nonPlayerCharacterTile)) { mobile.Event = Transition.Attack; return; } var playerTile = map.GetPlayerTile(); var tileToMoveTo = map.GetShortestDistanceDirectionToPlayer(mobile, playerTile.Location, nonPlayerCharacterTile.Location); //if null, don't move if (tileToMoveTo != null) { if (tileToMoveTo.TypeId == Constants.TypeIds.Door) { map.ToggleDoor(tileToMoveTo, false); } else { var tile = map.MoveMobile(nonPlayerCharacterTile, tileToMoveTo); } } }
public virtual void Execute(Mobile mobile, Map map, Tile nonPlayerCharacterTile) { if (mobile.CanAttack(map, nonPlayerCharacterTile)) { mobile.Event = Transition.Attack; } else { mobile.Event = Transition.Chase; } }
public void UpdateState(Map map, Tile nonPlayerCharacterTile) { if (CurrentState != null) CurrentState.Execute(this, map, nonPlayerCharacterTile); else System.Diagnostics.Trace.WriteLine("zero state"); }
public virtual bool CanMoveTo(Tile tile) { List<int> canMoveToTiles = new List<int> { Constants.TypeIds.Floor, Constants.TypeIds.OpenDoor }; //See if this map object can make the requested move return canMoveToTiles.Contains(tile.TypeId) && tile.Mobile == null; }
public virtual bool CanMoveOnPath(Tile tile) { //TODO This list will need to vary depending on the mobile (Can Move To also) List<int> canMoveToTiles = new List<int> { Constants.TypeIds.Floor, Constants.TypeIds.OpenDoor }; //See if this map object can make the requested move return canMoveToTiles.Contains(tile.TypeId) && ((tile.Mobile == null) || (tile.Mobile.MobileId == Constants.MobileId.Player)); }
public bool CanAttack(Map map, Tile nonPlayerCharacterTile) { var topStart = nonPlayerCharacterTile.Location.Top - 1 < 1 ? 1 : nonPlayerCharacterTile.Location.Top - 1; var leftStart = nonPlayerCharacterTile.Location.Left - 1 < 1 ? 1 : nonPlayerCharacterTile.Location.Left - 1; var playerTile = map.GetPlayerTile(); for (int top = topStart; top <= nonPlayerCharacterTile.Location.Top + 1; top++) { for (int left = leftStart; left <= nonPlayerCharacterTile.Location.Left + 1; left++) { if (playerTile.Location.Top == top && playerTile.Location.Left == left) { return true; } } } return false; }
public void ToggleDoor(Tile tileToUse, bool isOpen) { this.Tiles.Remove(tileToUse); if (isOpen) { this.Tiles.Add(new Tile { Location = tileToUse.Location, TypeId = Constants.TypeIds.Door }); } else { this.Tiles.Add(new Tile { Location = tileToUse.Location, TypeId = Constants.TypeIds.OpenDoor }); } }
public Tile MoveMobile(Tile mobileMapTile, Tile tileToMoveTo) { if (mobileMapTile.Mobile.CanMoveTo(tileToMoveTo)) { tileToMoveTo.Mobile = mobileMapTile.Mobile; mobileMapTile.Mobile = null; this.Outdated = true; return tileToMoveTo; } return null; }
public Tile MoveMobile(LocalKeyInfo keyInfo, Tile mobileMapTile) { var mapLocation = new Location(mobileMapTile.Location.Left, mobileMapTile.Location.Top); var tileToMoveTo = this.GetTileInDirection(keyInfo, mapLocation); return this.MoveMobile(mobileMapTile, tileToMoveTo); }