public TerrainCell(TerrainCellData data, int cellSize, Vector3 baseBlockSize) { Theme = TerrainBlock.GetTheme(); this.cellSize = cellSize; CellSize = baseBlockSize; LoadData(data); }
public TerrainCellData UnrenderCell(int id) { if (cellsData.ContainsKey(id)) { return(cellsData[id]); } if (!cells.ContainsKey(id)) { return(null); } TerrainCell cell = cells[id]; TerrainCellData cellData = cell.GetData(); foreach (Actor actor in ActorsAtCoords(cell.coords)) { UnrenderActor(actor.id); } foreach (Item item in ItemsAtCoords(cell.coords)) { UnrenderItem(item.id); } cells.Remove(id); cell.QueueFree(); cellsData.Add(id, cellData); return(cellData); }
public TerrainCellData GenerateFlatCell(Vector2 coords) { TerrainCellData data = new TerrainCellData(); data.xCoord = (int)coords.x; data.yCoord = (int)coords.y; data.id = world.CoordsToCellId((int)coords.x, (int)coords.y); for (int i = 0; i < cellSize; i++) { for (int j = 0; j < cellSize; j++) { TerrainBlock block = new TerrainBlock(); block.gpx = i; block.gpz = j; block.blockId = TerrainBlock.Blocks.Dirt; data.blocks.Add(block); } } // Add blocks to each corner data.blocks.Add(new TerrainBlock(new Vector3(1, 1, 1))); data.blocks.Add(new TerrainBlock(new Vector3(cellSize - 2, 1, 1))); data.blocks.Add(new TerrainBlock(new Vector3(1, 1, cellSize - 2))); data.blocks.Add(new TerrainBlock(new Vector3(cellSize - 2, 1, cellSize - 2))); return(data); }
public TerrainCellData GetData() { TerrainCellData data = new TerrainCellData(); data.xCoord = (int)coords.x; data.yCoord = (int)coords.y; data.id = id; data.blocks = blockData; return(data); }
// Fill out grid of world public void GenerateTerrain() { cells = new System.Collections.Generic.Dictionary <int, TerrainCellData>(); for (int i = 0; i < worldHeight; i++) // y { for (int j = 0; j < worldWidth; j++) // x { TerrainCellData tcd = GenerateCell(new Vector2(j, i)); cells.Add(tcd.id, tcd); } } }
public TerrainCellData LoadCell(int id) { string cellFile = CellFileName(id); IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(cellFile, FileMode.Open, FileAccess.Read, FileShare.Read); TerrainCellData ret = (TerrainCellData)formatter.Deserialize(stream); stream.Close(); return(ret); }
public void LoadData(TerrainCellData data) { coords = new Vector2(data.xCoord, data.yCoord); id = data.id; blockData = data.blocks; foreach (TerrainBlock block in data.blocks) { int x = block.gpx; int y = block.gpy; int z = block.gpz; int meshId = (int)block.blockId; SetCellItem(x, y, z, meshId); } }
/* Save one cell into its own file. */ public void SaveCell(TerrainCellData data) { string cellFile = CellFileName(data.id); GD.Print("Saving cell " + data.id + " to " + cellFile); // Delete an existing cell file. System.IO.File.Delete(cellFile); IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(cellFile, FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, data); stream.Close(); }
public TerrainCell RenderCell(int id) { if (!Util.ValidCellIndex(id, WorldWidth)) { return(null); } if (cells.ContainsKey(id)) { return(cells[id]); } if (!cellsData.ContainsKey(id)) { AdventureDb db = new AdventureDb(saveFile); TerrainCellData data = db.LoadCell(id); cellsData.Add(id, data); } TerrainCellData cellData = cellsData[id]; cellsData.Remove(id); TerrainCell cell = new TerrainCell(cellData, CellSize, BaseBlockSize()); Vector3 cellPos = Util.CellPositionFromCoords(cell.coords, GetCellScale()); cell.SetCenteredPosition(cellPos); cells.Add(cell.id, cell); AddChild(cell); foreach (ActorData actor in ActorsDataAtCoords(cell.coords)) { RenderActor(actor.id); } foreach (ItemData item in ItemDataAtCoords(cell.coords)) { GD.Print("Item found at " + cell.coords); RenderItem(item.id); } return(cell); }