Esempio n. 1
0
    public static Town.Town MakeTown(
        Coord index,
        int townOffsetX = 0, // WE USE THESE <---- TO DO THE SUB-TILE RENDER OFFSETS FROM TOWN INFO
        int townOffsetZ = 0,
        int seed        = 0,
        int patches     = 0)
    {
        //   Debug.Log("*** REALLY * MAKING A TOWN ***********");


        Town.TownOptions opt = new Town.TownOptions();

        // TODO. make global Tile size from Terrain
        opt.mapOffset  = new Town.Geom.Vector2(index.x * 1000, index.z * 1000);
        opt.townOffset = new Town.Geom.Vector2(townOffsetX * 1000, townOffsetZ * 1000);
        opt.Patches    = (patches == 0)? RandomGen.NextValidRandomPatchAmountFromTGOSRange() : patches;
        opt.Overlay    = TownGlobalObjectService.ProduceOverlay;
        opt.Water      = false; // ( RandomGen.Next() % 2 == 0)?true:false;
        opt.CityDetail = true;
        opt.Walls      = true;
        opt.Towers     = true;
        //   Debug.Log(opt.Patches + " patches requested");
        opt.Seed = (seed == 0) ? opt.Seed : seed;

        opt.coord = index;

        Town.Town town = new Town.Town(opt);
        // town.coord = index;
        // town.Options.coord = index;

        MeshRenderer = new TownMeshRenderer(town, opt, TownGlobalObjectService.rendererOptions);

        TownGlobalObject.TownsWaitingToRender.Enqueue(MeshRenderer);

        TownGlobalObject.TownWaitingToRender = true;


        //Debug.LogFormat("{0} is {1} for location with {2} of {3} and {4} of {5} for {6} of size {7} ",
        //    nameof(index),
        //    index,
        //    nameof(opt.mapOffset),
        //    opt.mapOffset,
        //    nameof(opt.townOffset),
        //    opt.townOffset,
        //    town.name,
        //    opt.Patches
        //    );



        return(town);
    }
Esempio n. 2
0
    public void Generate()
    {
        Clear();
        Profiler.BeginSample("TownGenerator");

        var town = new Town.Town(townOptions);

        var renderer = new TownMeshRenderer(town, townOptions, rendererOptions);

        renderer.Generate();

        Profiler.EndSample();
    }
        public void Generate()
        {
            for (int i = TownRoot.childCount - 1; i > -1; i--)
            {
                DestroyImmediate(TownRoot.GetChild(i).gameObject);
            }

            var townOptions = new TownOptions
            {
                Overlay = true,
                Patches = Patches,
                Walls   = Walls,
                Water   = Water,
                Seed    = Seed
            };

            var town = new Town.Town(townOptions);

            var townRenderer = new TownMeshRenderer(town, townOptions);

            townRenderer.root             = TownRoot;
            townRenderer.GateMaterial     = GateMaterial;
            townRenderer.TowerMaterial    = TowerMaterial;
            townRenderer.WallMaterial     = WallMaterial;
            townRenderer.RoadMaterial     = RoadMaterial;
            townRenderer.WaterMaterial    = WaterMaterial;
            townRenderer.BuildingMaterial = BuildingMaterial;
            townRenderer.OverlayMaterial  = OverlayMaterial;
            townRenderer.Generate();

            if (townRenderer.Walls != null)
            {
                foreach (Transform child in townRenderer.Walls.transform)
                {
                    var modifier = child.gameObject.AddComponent <NavMeshModifier> ();
                    modifier.overrideArea = true;
                    modifier.area         = 6;
                }
            }

            if (townRenderer.Waters != null)
            {
                foreach (Transform child in townRenderer.Waters.transform)
                {
                    var modifier = child.gameObject.AddComponent <NavMeshModifier> ();
                    modifier.overrideArea = true;
                    modifier.area         = 5;
                }
            }

            foreach (Transform child in townRenderer.Roads.transform)
            {
                var modifier = child.gameObject.AddComponent <NavMeshModifier> ();
                modifier.overrideArea = true;
                modifier.area         = 3;
            }

            foreach (Transform child in townRenderer.Buildings.transform)
            {
                var modifier = child.gameObject.AddComponent <NavMeshModifier> ();
                modifier.overrideArea = true;
                modifier.area         = 4;
                child.gameObject.AddComponent <Building> ();
            }

            GetComponent <BuildNavMesh> ().Build((AsyncOperation operation) =>
            {
                NavMeshQuerySystem.PurgeCacheStatic();
                Debug.Log("Town built. Cache purged.");
            });
        }