public void Place(LogicalPosition position) { if (Grids.ContainsKey(position)) { TrappedGrids.Add(position, Placer);//TODO Fixa detta ASAP } }
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); }
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(); }
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(); } } } }
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; } }); }
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; } }); }