Esempio n. 1
0
    public Settlement(Kingdom kingdom, string name, SettlementBuilder builder)
    {
        IMPORTANT              = builder.ENTR_NODE;
        Name                   = name;
        KingdomID              = kingdom.KingdomID;
        TileSize               = builder.TileSize;
        Centre                 = builder.Centre;
        BaseCoord              = builder.BaseCoord;
        SettlementBounds       = new Recti(BaseCoord.x, BaseCoord.z, TileSize, TileSize);
        SettlementChunks       = builder.SettlementChunks;
        Buildings              = builder.Buildings;
        SettlementNPCIDs       = new List <int>();
        SettlementLeaderNPCIDs = new List <int>();
        tNodes                 = builder.TestNodes2;
        //SettlementNPCs = new List<NPC>();
        //setBuild = builder;

        PathNodes      = builder.PathNodes;
        SettlementType = builder.SettlementType;
        foreach (Building b in Buildings)
        {
            b.SetSettlement(this);
        }

        SettlementPathFinder = builder.SettlementPathFinder;
    }
Esempio n. 2
0
    public Dictionary <Vec2i, ChunkData> GenerateAllSettlementChunks(SettlementBuilder setBuild, Settlement set)
    {
        Vec2i baseChunk = new Vec2i(setBuild.BaseCoord.x / World.ChunkSize, setBuild.BaseCoord.z / World.ChunkSize);
        Dictionary <Vec2i, ChunkData> setChunks = new Dictionary <Vec2i, ChunkData>();
        int setSizeChunks = setBuild.TileSize / World.ChunkSize;

        for (int x = 0; x < setSizeChunks; x++)
        {
            for (int z = 0; z < setSizeChunks; z++)
            {
                ChunkBase cb = GameGenerator.TerrainGenerator.ChunkBases[baseChunk.x + x, baseChunk.z + z];
                ChunkData cd = null;
                if (cb.RiverNode != null || cb.Lake != null)
                {
                    cd = GameGenerator.ChunkGenerator.GenerateChunk(baseChunk.x + x, baseChunk.z + z);
                }
                else
                {
                    int[,] cTiles = new int[World.ChunkSize, World.ChunkSize];
                    Dictionary <int, WorldObjectData> cObj = new Dictionary <int, WorldObjectData>();
                    for (int x_ = 0; x_ < World.ChunkSize; x_++)
                    {
                        for (int z_ = 0; z_ < World.ChunkSize; z_++)
                        {
                            Tile st = setBuild.Tiles[x * World.ChunkSize + x_, z *World.ChunkSize + z_];
                            cTiles[x_, z_] = st == null ? Tile.GRASS.ID : st.ID;
                            cObj[WorldObject.ObjectPositionHash(x_, z_)] = setBuild.SettlementObjects[x * World.ChunkSize + x_, z *World.ChunkSize + z_];
                            if (setBuild.SettlementObjects[x * World.ChunkSize + x_, z *World.ChunkSize + z_] != null)
                            {
                                setBuild.SettlementObjects[x * World.ChunkSize + x_, z *World.ChunkSize + z_].SetPosition(new Vec2i(baseChunk.x + x + x_, baseChunk.z + z + z_));
                            }
                        }
                    }
                    cd = new ChunkData(baseChunk.x + x, baseChunk.z + z, cTiles, true, cObj);
                }


                cd.SetSettlement(set);
                setChunks.Add(new Vec2i(cd.X, cd.Z), cd);
            }
        }
        set.AfterApplyToWorld();
        return(setChunks);
    }
Esempio n. 3
0
    public Dictionary <Settlement, Dictionary <Vec2i, ChunkData> > GenerateAllSettlements()
    {
        Dictionary <Settlement, Dictionary <Vec2i, ChunkData> > setChunks = new Dictionary <Settlement, Dictionary <Vec2i, ChunkData> >(Settlements.Count);


        foreach (SettlementBase b in Settlements)
        {
            SettlementBuilder setBuild = new SettlementBuilder(GameGenerator, b);

            setBuild.GenerateSettlement();
            //Debug.EndProfile();

            Settlement set = new Settlement(Kingdom, "set", setBuild);
            World.AddSettlement(set);

            setChunks.Add(set, GenerateAllSettlementChunks(setBuild, set));

            //Debug.EndProfile();
        }

        return(setChunks);
    }
Esempio n. 4
0
    private void CreateWorld2()
    {
        World             world = new World();
        SettlementBase    b     = new SettlementBase(new Vec2i(8, 8), 8, SettlementType.CAPITAL);
        SettlementBuilder build = new SettlementBuilder(null, b);

        build.GenerateSettlement();

        /*foreach(SettlementPathNode p in build.nodes)
         * {
         *  TestNodes.Add(p);
         * }*/
        Tile[,] tiles           = build.Tiles;
        WorldObjectData[,] objs = build.SettlementObjects;
        int tileSize = build.TileSize;
        int cSize    = tileSize / World.ChunkSize;

        ChunkData[,] cData = new ChunkData[cSize, cSize];
        ChunkBase[,] cBase = new ChunkBase[cSize, cSize];
        for (int x = 0; x < cSize; x++)
        {
            for (int z = 0; z < cSize; z++)
            {
                cBase[x, z]             = new ChunkBase(new Vec2i(x, z), true);
                int[,] cTiles           = new int[World.ChunkSize, World.ChunkSize];
                WorldObjectData[,] cObj = new WorldObjectData[World.ChunkSize, World.ChunkSize];
                Dictionary <int, WorldObjectData> wObjData = new Dictionary <int, WorldObjectData>();
                for (int x_ = 0; x_ < World.ChunkSize; x_++)
                {
                    for (int z_ = 0; z_ < World.ChunkSize; z_++)
                    {
                        if (tiles[x * World.ChunkSize + x_, z *World.ChunkSize + z_] != null)
                        {
                            cTiles[x_, z_] = tiles[x * World.ChunkSize + x_, z *World.ChunkSize + z_].ID;
                        }
                        else
                        {
                            cTiles[x_, z_] = Tile.GRASS.ID;
                        }

                        if (objs[x * World.ChunkSize + x_, z *World.ChunkSize + z_] != null)
                        {
                            wObjData.Add(WorldObject.ObjectPositionHash(x_, z_), objs[x * World.ChunkSize + x_, z * World.ChunkSize + z_]);
                        }
                        // cObj[x_, z_] = objs[x * World.ChunkSize + x_, z * World.ChunkSize + z_];
                    }
                }
                cData[x, z] = new ChunkData(x, z, cTiles, true, wObjData);
            }
        }


        ChunkRegion r = new ChunkRegion(0, 0, cData);

        WorldManager.LoadedRegions[0, 0] = r;



        Kingdom k = new Kingdom("test", new Vec2i(0, 0));

        k.SetKingdomID(world.AddKingdom(k));
        Settlement set = new Settlement(k, "test_set", build);

        set.SetSettlementID(world.AddSettlement(set));

        WorldManager.SetWorld(world);

        KingdomNPCGenerator npcGen = new KingdomNPCGenerator(new GameGenerator(0), k, EntityManager);

        Debug.Log("BASE:" + set.BaseCoord);
        Debug.Log(cSize);
        npcGen.GenerateSettlementNPC(set);

        world.SetChunkBases(cBase);



        for (int x = 0; x < cSize - 1; x++)
        {
            for (int z = 0; z < cSize - 1; z++)
            {
                //LoadChunk(cData[x, z]);
                WorldManager.CRManager.LoadChunk(new Vec2i(x, z));
                EntityManager.LoadChunk(null, new Vec2i(x, z));
            }
        }

        /*
         * DungeonGenerator dugeonGenerator = new DungeonGenerator();
         * dungeon = dugeonGenerator.GenerateDungeon();
         * ChunkRegion r = new ChunkRegion(0, 0, dungeon.SubworldChunks);
         * world.LoadedRegions.Add(new Vec2i(0, 0), r);
         * WorldManager.SetWorld(world);*/
        //world.Set
    }