Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        /// <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);
                }
            }
        }
Esempio n. 6
0
        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());
                }
            }
        }