public bool AddMonster(BaseMonster.MonTypes monType, Vector2 gridPos, int level = 1) { int i = 0; while (i < MaxMonsters && Monsters[i] != null) { i++; } if (i >= MaxMonsters) return false; if (monType == BaseMonster.MonTypes.Normal) Monsters[i] = new BadGuy(gridPos, i); else if (monType == BaseMonster.MonTypes.Static) Monsters[i] = new BadGuy(gridPos, i, type: BodyType.Static); return true; }
private void ScreamHelper(BaseMonster mon, int X, int Y, int currDist, int MaxDist, Func<List<BaseTile>, bool> traversable) { if (currDist >= MaxDist) return; BaseTile CurrTile = grid[X, Y][0]; List<List<BaseTile>> columns = GetAdjColums(X, Y); for (int i = 0; i < columns.Count; i++) { if (traversable(columns[i])) { if (currDist < columns[i][0].dist) { columns[i][0].dist = currDist; columns[i][0].dirToShortest = CurrTile.GridPos; DijkstrasAlgHelper((int)columns[i][0].GridPos.X, (int)columns[i][0].GridPos.Y, currDist + 1, MaxDist, traversable); } } } }
//DijkstrasAlg public bool Scream(int X, int Y, int MaxDist, BaseMonster mon) { BaseTile CurrTile = grid[X, Y][0]; Func<List<BaseTile>, bool> traversable = tileCol => tileCol.Count == 1; List<Vector2> retDirections = new List<Vector2>(); for (int i = 0; i < MapWidth; i++) { for (int j = 0; j < MapHeight; j++) { if (grid[i, j].Count != 0) grid[i, j][0].dist = int.MaxValue; } } CurrTile.dist = 0; DijkstrasAlgHelper(X, Y, 1, MaxDist, traversable); BaseMonster Listener; for (int i = 0; i < MapWidth; i++) { for (int j = 0; j < MapHeight; j++) { Listener = Globals.Mobs.GetMobAt(i, j); if (grid[i, j][0].dist != int.MaxValue && Listener != null && Listener.Listen(mon)); } } return true; }
internal void AddMonster(BaseMonster mon1, BaseMonster mon2) { Vector2? newPos = Globals.map.FindAtHeightFree((int)mon1.GridPos.X, (int)mon1.GridPos.Y, 1, 4); if (newPos == null) return; AddMonster(mon1.type, (Vector2)newPos); }
public virtual bool Listen(BaseMonster mon) { return false; }