Example #1
0
    public Grid(Setup_Render setup, Config_Map config, TerrainType[,] types)
    {
        gridUtils.InjectDependencies(this, setup.Mat_Terrain, setup.Mat_Border);
        _mapConfig = config;


        // GRID AND TILE INFORMATION
        Size          = config.GridSize;
        TileHeight    = config.TileSize;
        TileThickness = config.TileThickness;

        // for grid mesh
        Hexagons = new Hexagon[Size, Size];


        _terrainResource = new TerrainResource(setup);

        if (types == null)
        {
            _terrainTypes = MapGeneration.GenerateTerrainTypes(config);
        }
        else
        {
            _terrainTypes = types;
        }


        // Init Hexagons with Border
        InitHexagons();
        InitVertexData();
    }
Example #2
0
    private Grid InitGrid(Setup_Render renderSetup, Config_Map mapConfig, TerrainType[,] terrain = null)
    {
        Grid grid = new Grid(renderSetup, mapConfig, terrain);

        transform.position = Vector3.zero;
        grid.WMatrix       = transform.localToWorldMatrix;

        return(grid);
    }
Example #3
0
    public static bool GenerateModels(Config_Map mapConfig, out List <List <Vector4> > models)
    {
        models = new List <List <Vector4> >();

        foreach (Config_Model config in mapConfig.Models)
        {
            models.Add(GenerateModelPlacementPointsScattered(config, mapConfig.SpawnAmount).ToList());
        }

        return(models != null);
    }
Example #4
0
    public void InitModelButtons(Config_Map mapConfig)
    {
        _terraintoolkit ??= FindObjectOfType <TerrainToolkit>();

        // for each model, add 1 button to parent
        for (int i = 0; i < mapConfig.Models.Count; i++)
        {
            var buttonID = i;
            var button   = Instantiate(_addModelButtonPrefab, _modelBar.transform);
            button.GetComponent <UI_ModelView>().Init(mapConfig.Models[i].Thumbnail, mapConfig.Models[i].ThumbnailName);
            button.onClick.AddListener(() => _terraintoolkit.OnClickAddSModel(buttonID));
        }
    }
Example #5
0
    public static TerrainType[,] GenerateTerrainTypes(Config_Map config)
    {
        TerrainType[,] tileTypes = CreateNewBlankTerrain(config);

        if (config.AmountMountain > 0)
        {
            ComputeMountains(config, ref tileTypes);
        }
        if (config.AmountWater > 0)
        {
            ComputeWater(config, ref tileTypes);
        }

        return(tileTypes);
    }
Example #6
0
    private void Awake()
    {
        _renderSetup = MAP_DATA.RENDER_SETUP;
        _mapConfig   = MAP_DATA.MAP_CONFIG;


        if (MAP_DATA.MAPSAVE == null)
        {
            LaunchNewPlaythrough();
        }
        else
        {
            LaunchNewPlaythrough(
                SerializationHandler.DeserializeTerrainData(),
                SerializationHandler.DeserializeTerrainTypes(),
                MAP_DATA.MAPSAVE.modelData
                );
        }
    }
Example #7
0
    //todo: generation
    private static void ComputeWater(Config_Map config, ref TerrainType[,] types)
    {
        for (int x = 0; x < types.GetLength(0); x++)
        {
            for (int y = 0; y < types.GetLength(1); y++)
            {
                float px   = x / (float)config.GridSize;
                float py   = y / (float)config.GridSize;
                float prob = Mathf.PerlinNoise(px, py) * config.AmountWater;

                float r = Random.Range(0f, 1f);

                if (r < prob)
                {
                    types[x, y] = new TerrainType(config.WaterTerrain);
                }
                //  else tileTypes[x, y] = TileType.blank;
                // Debug.Log( $"X: {x}, Y: {y} : Mountain Prob is {prob}" );
            }
        }
    }
Example #8
0
    private static TerrainType[,] CreateNewBlankTerrain(Config_Map config)
    {
        if (config.BlankTerrain == null)
        {
#if UNITY_EDITOR
            Debug.LogError($"At least 1 Blank Terrain Type needs to be added to any Map Config. Please add a Blank Terrain to {config.MapName}");
#endif
            return(null);
        }

        TerrainType[,] types = new TerrainType[config.GridSize, config.GridSize];

        for (int i = 0; i < types.GetLength(0); i++)
        {
            for (int j = 0; j < types.GetLength(1); j++)
            {
                types[i, j] = new TerrainType(config.BlankTerrain);
            }
        }

        return(types);
    }
Example #9
0
    public void LaunchNewBenchmark(bool initMeshUtils = false, Vector3[] updateHexagons = null, TerrainType[,] terrain = null, meshUtils.SerializedModelRegister[] modeldata = null)
    {
        _renderSetup = MAP_DATA.RENDER_SETUP;
        _mapConfig   = MAP_DATA.MAP_CONFIG;
        SetGlobalParams();

        // take config
        _grid = InitGrid(_renderSetup, _mapConfig, terrain);
        InitGridRenderer();
        updateHexagons ??= GenerateNewActiveHexagons();


        if (initMeshUtils)
        {
            InitModelPools(modeldata);
        }


        // load fearures
        //_grid.InitFeatures();

        UpdateGridFromSaveFile(updateHexagons);
    }
Example #10
0
    private void InitModelPools(meshUtils.SerializedModelRegister[] modeldata)
    {
        // load models
        Config_Map   mapConfig   = _mapConfig;
        Setup_Render renderSetup = _renderSetup;

        meshUtils.Init(mapConfig.Models.Count);

        var meshinit = FindObjectOfType <Meshpooling.MeshInit>();        //Todo: Create ModelResource

        var uihandler = FindObjectOfType <UIHandler>();

        uihandler.InitModelButtons(mapConfig);

        //TODO: Create Buttons per model

        List <Config_Model> singlepool = new List <Config_Model>();
        List <Config_Model> multipool  = new List <Config_Model>();
        int type = 0;

        foreach (Config_Model model in mapConfig.Models)
        {
            model.MeshType = type;

            if (model.PoolSingle)
            {
                singlepool.Add(model);
            }
            else
            {
                multipool.Add(model);
            }

            type++;
        }



        meshinit.Init(renderSetup.Compute_MeshPool, multipool);
        meshinit.RunMeshes();

        List <List <Vector4> > models;

        if (modeldata != null)
        {
            models = meshUtils.DeserializeModelRegister(modeldata);
        }
        else
        {
            MapGeneration.GenerateModels(mapConfig, out models);
        }



        List <Vector3[]> poslist = new();

        for (int i = 0; i < models.Count; i++)
        {
            Vector4[] positions = models[i].ToArray();

            Vector3[] posdata = new Vector3[positions.Length];
            for (int j = 0; j < positions.Length; j++)
            {
                posdata[j] = new Vector3(positions[j].x, positions[j].y, positions[j].z);
            }

            poslist.Add(posdata);
        }

        GenerateSinglePools(singlepool);

        meshUtils.SpawnFromPool(poslist);
        meshUtils.RegisterAllToHexagons();
    }