private bool ArePointsConnected(Point firstPoint, Point secondPoint) { //Build tcodmap TCODFov tcodMap = new TCODFov(Width, Height); for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { tcodMap.SetCell(i, j, !baseMap.mapSquares[i, j].BlocksLight, baseMap.mapSquares[i, j].Walkable); } } //Try to walk the path between the 2 staircases TCODPathFinding path = new TCODPathFinding(tcodMap, 1.0); path.ComputePath(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y); //Find the first step. We need to load x and y with the origin of the path int x = upStaircase.x; int y = upStaircase.y; bool obstacleHit = false; //If there's no routeable path if (path.IsPathEmpty()) { obstacleHit = true; } path.Dispose(); tcodMap.Dispose(); return(!obstacleHit); }
public void updateFovMap(int level, FovMap fovMap) { TCODFov tcodLevel = new TCODFov(fovMap.Width, fovMap.Height); for (int j = 0; j < fovMap.Width; j++) { for (int k = 0; k < fovMap.Height; k++) { if (fovMap.getCell(j, k) != FOVTerrain.Blocking) { tcodLevel.SetCell(j, k, true, false); } else { tcodLevel.SetCell(j, k, false, false); } } } levelTCODMaps[level] = tcodLevel; levelTCODMapSizes[level] = new WidthHeight(fovMap.Width, fovMap.Height); }
public void Init() { fov = new TCODFov(5, 5); for (int i = 0; i < 5; ++i) //width { for (int j = 0; j < 5; ++j) //height { fov.SetCell(i, j, room[j, i] == '.', room[j, i] == '.'); } } pathFindingFOV = new TCODPathFinding(fov, 1.0); pathFindingCallback = new TCODPathFinding(5, 5, 1.0, new TCODPathCallback(TCODPathCallback)); }
public void updateMap(int level, PathingMap terrainMap) { TCODFov tcodLevel = new TCODFov(terrainMap.Width, terrainMap.Height); for (int j = 0; j < terrainMap.Width; j++) { for (int k = 0; k < terrainMap.Height; k++) { tcodLevel.SetCell(j, k, true, terrainMap.getCell(j, k) == PathingTerrain.Walkable); } } levelTCODMaps[level] = tcodLevel; //Ignoring closed doors TCODFov tcodLevelNoClosedDoors = new TCODFov(terrainMap.Width, terrainMap.Height); for (int j = 0; j < terrainMap.Width; j++) { for (int k = 0; k < terrainMap.Height; k++) { tcodLevelNoClosedDoors.SetCell(j, k, true, terrainMap.getCell(j, k) == PathingTerrain.Walkable || terrainMap.getCell(j, k) == PathingTerrain.ClosedDoor); } } levelTCODMapsIgnoringClosedDoors[level] = tcodLevelNoClosedDoors; //Ignoring closed doors and locks TCODFov tcodLevelNoClosedDoorsAndLocks = new TCODFov(terrainMap.Width, terrainMap.Height); for (int j = 0; j < terrainMap.Width; j++) { for (int k = 0; k < terrainMap.Height; k++) { tcodLevelNoClosedDoorsAndLocks.SetCell(j, k, true, terrainMap.getCell(j, k) == PathingTerrain.Walkable || terrainMap.getCell(j, k) == PathingTerrain.ClosedDoor || terrainMap.getCell(j, k) == PathingTerrain.ClosedLock); } } levelTCODMapsIgnoringClosedDoorsAndLocks[level] = tcodLevelNoClosedDoorsAndLocks; }
/// <summary> /// Refresh the TCOD maps used for FOV and pathfinding /// Unoptimised at present /// </summary> internal void RefreshTCODMap(int levelToRefresh) { //Fail if we have been asked for an invalid level if (levelToRefresh < 0 || levelToRefresh > levels.Count) { LogFile.Log.LogEntry("RefreshTCODMap: Level " + levelToRefresh + " does not exist"); return; } Map level = levels[levelToRefresh]; TCODFov tcodLevel = levelTCODMaps[levelToRefresh]; for (int j = 0; j < level.width; j++) { for (int k = 0; k < level.height; k++) { tcodLevel.SetCell(j, k, !level.mapSquares[j, k].BlocksLight, level.mapSquares[j, k].Walkable); } } }
public static void TestTCODFovTest() { int x = 1; int y = 1; RootConsole.Width = 80; RootConsole.Height = 50; RootConsole.WindowTitle = "FOV Tester"; RootConsole.Fullscreen = false; using (RootConsole console = RootConsole.GetInstance()) { console.Clear(); using (TCODFov fov = new TCODFov(5, 5)) { for (int i = 0; i < 5; ++i) //width { for (int j = 0; j < 5; ++j) //height { fov.SetCell(i, j, room[j, i] == '.', room[j, i] == '.'); } } KeyPress key; do { PaintFOVTest(console, x, y, fov); key = Keyboard.WaitForKeyPress(false); switch (key.KeyCode) { case KeyCode.TCODK_UP: if (room[y - 1, x] == '.') { y--; } break; case KeyCode.TCODK_DOWN: if (room[y + 1, x] == '.') { y++; } break; case KeyCode.TCODK_LEFT: if (room[y, x - 1] == '.') { x--; } break; case KeyCode.TCODK_RIGHT: if (room[y, x + 1] == '.') { x++; } break; } }while (key.Character != 'q' && !console.IsWindowClosed()); } } }