コード例 #1
0
ファイル: Trap.cs プロジェクト: Gimanua/Noughts-And-Crosses
 public void Place(LogicalPosition position)
 {
     if (Grids.ContainsKey(position))
     {
         TrappedGrids.Add(position, Placer);//TODO Fixa detta ASAP
     }
 }
コード例 #2
0
        private List <LogicalPosition> GetNeighbors(LogicalPosition from, HashSet <LogicalPosition> visited)
        {
            List <LogicalPosition> NeighBors = new List <LogicalPosition>();

            LogicalPosition[] sides = { new LogicalPosition(from.X - 1, from.Y), new LogicalPosition(from.X, from.Y - 1), new LogicalPosition(from.X + 1, from.Y), new LogicalPosition(from.X, from.Y + 1) };
            foreach (LogicalPosition position in sides)
            {
                if (Grids.ContainsKey(position) && !visited.Contains(position))
                {
                    NeighBors.Add(position);
                }
            }
            return(NeighBors);
        }
コード例 #3
0
ファイル: VMapLoader.cs プロジェクト: karliky/MeshViewer
        public void Render(int centerTileX, int centerTileY)
        {
            if (IsTiled)
            {
                var wmoProgram      = ShaderProgramCache.Instance.Get("wmo");
                var view            = Matrix4.Mult(Game.Camera.View, Game.Camera.Projection);
                var cameraDirection = Game.Camera.Forward;

                wmoProgram.Use();
                wmoProgram.UniformMatrix4("projection_view", false, ref view);
                wmoProgram.UniformVector3("camera_direction", ref cameraDirection);

                const int MAX_CHUNK_DISTANCE = 1; /// Debugging

                lock (Grids)
                {
                    foreach (var grid in Grids)
                    {
                        if (grid.Value != null && Math.Abs(grid.Value.X - centerTileX) > MAX_CHUNK_DISTANCE && Math.Abs(grid.Value.Y - centerTileY) > MAX_CHUNK_DISTANCE)
                        {
                            grid.Value.Unload();
                        }
                    }

                    for (var i = centerTileY - MAX_CHUNK_DISTANCE; i <= centerTileY + MAX_CHUNK_DISTANCE; ++i)
                    {
                        for (var j = centerTileX - MAX_CHUNK_DISTANCE; j <= centerTileX + MAX_CHUNK_DISTANCE; ++j)
                        {
                            if (!Grids.ContainsKey(PackTile(j, i)))
                            {
                                LoadTile(j, i);
                            }
                        }
                    }

                    foreach (var mapGrid in Grids.Values)
                    {
                        if (mapGrid == null || !(Math.Abs(centerTileX - mapGrid.X) <= MAX_CHUNK_DISTANCE && Math.Abs(centerTileY - mapGrid.Y) <= MAX_CHUNK_DISTANCE))
                        {
                            continue;
                        }

                        mapGrid.Render();
                    }
                }
            }
            //else
            //GlobalModel.Render();
        }
コード例 #4
0
        public void Render(int centerTileX, int centerTileY)
        {
            const int MAX_CHUNK_DISTANCE = 1; /// Debugging

            var terrainProgram  = ShaderProgramCache.Instance.Get("terrain");
            var projModelView   = Matrix4.Mult(Game.Camera.View, Game.Camera.Projection);
            var cameraDirection = Game.Camera.Forward;

            terrainProgram.Use();
            terrainProgram.UniformMatrix4("modelViewProjection", false, ref projModelView);
            terrainProgram.UniformVector3("camera_direction", ref cameraDirection);

            lock (Grids)
            {
                foreach (var grid in Grids)
                {
                    if (grid.Value != null && Math.Abs(grid.Value.X - centerTileX) > MAX_CHUNK_DISTANCE && Math.Abs(grid.Value.Y - centerTileY) > MAX_CHUNK_DISTANCE)
                    {
                        grid.Value.Unload();
                    }
                }

                for (var i = centerTileY - MAX_CHUNK_DISTANCE; i <= centerTileY + MAX_CHUNK_DISTANCE; ++i)
                {
                    for (var j = centerTileX - MAX_CHUNK_DISTANCE; j <= centerTileX + MAX_CHUNK_DISTANCE; ++j)
                    {
                        if (!Grids.ContainsKey(PackTile(j, i)))
                        {
                            LoadTile(j, i);
                        }
                    }
                }

                foreach (var mapGrid in Grids.Values)
                {
                    if (mapGrid != null && Math.Abs(centerTileX - mapGrid.X) <= MAX_CHUNK_DISTANCE && Math.Abs(centerTileY - mapGrid.Y) <= MAX_CHUNK_DISTANCE)
                    {
                        mapGrid.Render();
                    }
                }
            }
        }
コード例 #5
0
ファイル: VMapLoader.cs プロジェクト: karliky/MeshViewer
        public void LoadTile(int tileX, int tileY)
        {
            var gridHash = PackTile(tileX, tileY);

            if (Grids.ContainsKey(gridHash))
            {
                return;
            }

            // Placeholder until loaded.
            Grids[gridHash] = null;
            Task.Factory.StartNew(() =>
            {
                var gridLoader = new VMapTileLoader(Directory, MapID, tileX, tileY);
                if (gridLoader.FileExists)
                {
                    lock (Grids) Grids[gridHash] = gridLoader;
                }
            });
        }
コード例 #6
0
        public void LoadTile(int tileX, int tileY)
        {
            var gridHash = PackTile(tileX, tileY);

            if (Grids.ContainsKey(gridHash))
            {
                return;
            }

            // Placeholder until the task executes
            Grids[gridHash] = null;
            Task.Factory.StartNew(() =>
            {
                var gridLoader = new GridMapLoader(Directory, MapID, tileX, tileY)
                {
                    Program = ShaderProgramCache.Instance.Get("terrain")
                };
                if (gridLoader.FileExists)
                {
                    lock (Grids) Grids[gridHash] = gridLoader;
                }
            });
        }