Exemple #1
0
 public TerrainCell(TerrainCellData data, int cellSize, Vector3 baseBlockSize)
 {
     Theme         = TerrainBlock.GetTheme();
     this.cellSize = cellSize;
     CellSize      = baseBlockSize;
     LoadData(data);
 }
Exemple #2
0
    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);
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    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);
    }
Exemple #5
0
 // 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);
         }
     }
 }
Exemple #6
0
    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);
    }
Exemple #7
0
 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);
     }
 }
Exemple #8
0
    /* 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();
    }
Exemple #9
0
    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);
    }