Esempio n. 1
0
    public FrustumCalculation(ComputeShader shader, TerrainBuilder t)
    {
        tBuilder = t; calcShader = shader;
        //setup
        frustumKernel = calcShader.FindKernel("FrustumCulling");

        //test
        //plane.GetComponent<Renderer>().sharedMaterial.mainTexture = frustumTexture;
    }
Esempio n. 2
0
    private void generateSurroundingTerrain()
    {
        TerrainBuilderReturnPacket terrainPacket = TerrainBuilder.generateTerrain_titleVer(Constants.roomWidthHeight, Constants.numOfVertsPerEdge);

        Mesh[,] terrainMeshes = terrainPacket.getTerrainMeshes();
        // Mesh[,] terrainMeshes = TerrainBuilder.sliceHeightArrayIntoMultipleMeshes(terrainPacket.getHeightArray(), Constants.roomWidthHeight, Constants.numOfVertsPerEdge);

        int numOfRooms_horizontal = terrainMeshes.GetLength(0);
        int numOfRooms_vertical   = terrainMeshes.GetLength(1);


        Color32[] terrainColors = persistentData.getTerrainColors();

        Texture2D terrainTexture = new Texture2D(4, 1);

        terrainTexture.wrapMode   = TextureWrapMode.Clamp;
        terrainTexture.filterMode = FilterMode.Point;

        terrainMaterial.mainTexture = terrainTexture;

        terrainTexture.SetPixel(0, 0, terrainColors[0]);
        terrainTexture.SetPixel(1, 0, terrainColors[1]);
        terrainTexture.SetPixel(2, 0, terrainColors[2]);
        terrainTexture.SetPixel(3, 0, terrainColors[3]);
        terrainTexture.Apply();

        waterPlane.GetComponent <Renderer>().material.SetColor("_Color", new Color32(terrainColors[0].r, terrainColors[0].g, terrainColors[0].b, 64));

        byte  fogInc   = 153;
        float fogScale = 0.4f;

        RenderSettings.fogColor = new Color32((byte)(terrainColors[2].r * fogScale + fogInc), (byte)(terrainColors[2].g * fogScale + fogInc), (byte)(terrainColors[2].b * fogScale + fogInc), 255);

        // Instantiate the 3D terrain meshes:
        GameObject newTerrainParent = new GameObject("Empty");

        for (int indexX = 0; indexX < numOfRooms_horizontal; indexX++)
        {
            for (int indexY = 0; indexY < numOfRooms_vertical; indexY++)
            {
                GameObject newTerrain = new GameObject("Empty");
                newTerrain.AddComponent <MeshFilter>();
                newTerrain.AddComponent <MeshRenderer>();
                newTerrain.GetComponent <MeshRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                newTerrain.GetComponent <MeshFilter>().mesh   = terrainMeshes[indexX, indexY];
                newTerrain.GetComponent <Renderer>().material = terrainMaterial;

                newTerrain.GetComponent <Transform>().position = new Vector3(((indexX * Constants.roomWidthHeight) - 1.5f * Constants.roomWidthHeight), 0,
                                                                             ((-indexY * Constants.roomWidthHeight) + 3.5f * Constants.roomWidthHeight));
                newTerrain.GetComponent <Transform>().parent = newTerrainParent.GetComponent <Transform>();
            }
        }

        newTerrainParent.GetComponent <Transform>().localScale  = new Vector3(100f, 100f, 100f);
        newTerrainParent.GetComponent <Transform>().eulerAngles = new Vector3(2.3f, 0f, 0f);
        newTerrainParent.GetComponent <Transform>().position    = new Vector3(0f, -223f, 0f);
    }
Esempio n. 3
0
    /*private void OnDrawGizmos() {
     *  Gizmos.color = Color.green;
     *  Gizmos.DrawWireCube(instanceBound.center, instanceBound.size);
     * }*/

    public void BuildTerrainTool()
    {
        terrainBuilder = new TerrainBuilder(heightMap, terrainHeight, terrainMat);
        GameObject terrain = GameObject.Find("terrain");

        if (terrain)
        {
            DestroyImmediate(terrain);
        }
        terrainBuilder.BuildTerrain(transform);
    }
Esempio n. 4
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        TerrainBuilder myScript = (TerrainBuilder)target;

        if (GUILayout.Button("Build Object"))
        {
            myScript.BuildTerrain();
        }
    }
    private static void ThreadFunction_Demo(object parentClass)
    {
        PersistentData dataClass = ((PersistentData)parentClass);

        TerrainBuilderReturnPacket terrainPacket_thread = TerrainBuilder.generateTerrain_DemoVer(Constants.roomWidthHeight, Constants.numOfVertsPerEdge);

        bool[,] boolArray_noNoise = terrainPacket_thread.getBoolArray_noNoise();
        Color32[] minimapColorArray = MinimapBaseColorMaker.convertBoolArrayToMinimapColorArray(boolArray_noNoise, boolArray_noNoise.GetLength(0), boolArray_noNoise.GetLength(1));

        dataClass.setLoadingData(terrainPacket_thread, minimapColorArray);
    }
Esempio n. 6
0
 private void CalculateGridSize()
 {
     if (terrainPrefab.Count > 0)
     {
         TerrainBuilder terrainBuilder = terrainPrefab[0].GetComponent <TerrainBuilder>();
         MeshRenderer   terrainMesh    = terrainBuilder.transform.Find("Terrains").GetChild(0).GetComponent <MeshRenderer>();
         gridSize = new Vector2(terrainMesh.bounds.size.x, terrainMesh.bounds.size.z);
         //offsetX = Mathf.RoundToInt(terrainBuilder.index_offset - (terrainBuilder.activate_size * 0.5f) );
         offsetX = terrainBuilder.index_offset;
     }
 }
        public CompleteWorld GenerateWorldTerrain()
        {
            var world   = new CompleteWorld();
            var terrain = world.Terrain;

            terrain.Init();
            var terrainbuilder = new TerrainBuilder();

            terrainbuilder.Init(terrain);
            terrainbuilder.DiamondAlgoritm();
            return(world);
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            Terrain terrain = new Terrain(8);

            terrain.Init();
            TerrainBuilder builder = new TerrainBuilder();

            builder.Init(terrain);
            builder.DiamondAlgoritm();

            var encoder = new ImageEncoder();

            //  encoder.Encode(terrain);
            encoder.Decode(terrain, "C:\\TEST.png");
        }
Esempio n. 9
0
 // Use this for initialization
 void Start()
 {
     UI = GameObject.Find("Canvas");
     Camera.main.GetComponent <CameraController>().keepTransform = this.transform;
     Camera.main.GetComponent <CameraController>().seekKeep      = true;
     tb = GameObject.Find("Terrain").GetComponent <TerrainBuilder>();
     try{ statTracker = GameObject.FindGameObjectWithTag("stat_tracker").GetComponent <StatTracker>(); } catch {}
     escButton = GameObject.Find("Quit");
     escButton.SetActive(false);
     resourceIndicator   = UI.transform.Find("Info_Panel/Resources").GetComponent <Text>();
     spawnCountIndicator = UI.transform.Find("Info_Panel/Unit_Cap_Control/Respawn").GetComponent <Text>();
     spawnTimerIndicator = UI.transform.Find("Info_Panel/Unit_Cap_Control/SpawnCountdown").GetComponent <Text>();
     unitPanel[0]        = UI.transform.Find("Unit_Panel/Unit0").GetComponent <Button>();
     unitPanel[1]        = UI.transform.Find("Unit_Panel/Unit0_0").GetComponent <Button>();
     unitPanel[2]        = UI.transform.Find("Unit_Panel/Unit0_1").GetComponent <Button>();
 }
Esempio n. 10
0
    public TerrainBuilder AssignSRandomTerrain()
    {
        float          noiseValue = Mathf.PerlinNoise(_line_index * slopeRate + perlin_offsetX, perlin_offsetY);
        TerrainBuilder newTerrain = IdentifyTerrainPiece(noiseValue);

        //If terrainholder reach its maximum capacity
        if (_terrainsHolder.Count > maxTerrainCapacity)
        {
            TerrainBuilder eraseTerrain = _terrainsHolder.Dequeue();
            eraseTerrain.OnTerrainDestroy();
            gridMap.RemoveAt(0);
            PoolManager.instance.Destroy(eraseTerrain.gameObject);
        }

        return(newTerrain);
    }
Esempio n. 11
0
    void Awake()
    {
        //GenMathData();
        sizeBuffer = new ComputeBuffer(6, sizeof(float));
        float[] sizeBufferData = new float[6];
        sizeBuffer.SetData(sizeBufferData);
        Shader.SetGlobalBuffer("sizeBuffer", sizeBuffer);
        //地形
        terrainBuilder = new TerrainBuilder(heightMap, terrainHeight, terrainMat);
        GameObject terrain = GameObject.Find("terrain");

        if (!terrain)
        {
            terrainBuilder.BuildTerrain(transform);
        }
        //视锥体
        frustumCalc = new FrustumCalculation(calcShader, terrainBuilder);
        //草叶
        grassGen = new GrassGenerator(grassDensityMap, grassAmountPerTile,
                                      pregenerateGrassAmount, grassMaterial, TerrainBuilder.PATCH_SIZE);
        grassMesh = grassGen.generateGrassTile();
        grassGen.PregenerateGrassInfo();

        //terrain data buffer
        Texture terrainTex = terrainBuilder.GetTerrainHeightTexture();
        Texture densityTex = grassGen.GetTerrainDensityTexture();

        Shader.SetGlobalTexture("terrainHeightTex", terrainTex);
        frustumCalc.SetTextureFromGlobal("terrainHeightTex");
        grassMaterial.SetTexture("terrainDensityTex", densityTex);

        Shader.SetGlobalFloat("terrainHeight", terrainHeight);
        frustumCalc.SetFloat("terrainHeight", terrainHeight);

        grassMaterial.SetInt("grassAmountPerTile", grassAmountPerTile);
        grassMaterial.SetInt("pregenerateGrassAmount", pregenerateGrassAmount);

        argsBuffer = new ComputeBuffer(1, sizeof(uint) * 5,
                                       ComputeBufferType.IndirectArguments);
        counterBuffer = new ComputeBuffer(1, sizeof(uint), ComputeBufferType.Counter);

        SetShadowTexture();
    }
Esempio n. 12
0
    protected virtual void Start()
    {
        keep = GameObject.FindObjectOfType <KeepManager>();
        anim = transform.GetComponentInChildren <AnimationController>();
        tb   = GameObject.Find("Terrain").GetComponent <TerrainBuilder>();
        try{ statTracker = GameObject.FindGameObjectWithTag("stat_tracker").GetComponent <StatTracker>(); } catch {}
        maxHealth       = health;
        pathRefreshRate = 5f;
        GameObject globalNav = GameObject.FindGameObjectWithTag("global_nav");

        if (globalNav != null)
        {
            navigationController = globalNav.GetComponent <NavigationController>();
        }

        canvas    = GameObject.Find("Canvas").GetComponent <Canvas>();
        healthBar = Instantiate(sliderPrefab, transform.position, Quaternion.Euler(0, 0, 0)) as Slider;
        healthBar.transform.SetParent(canvas.transform, false);
        setRails(false);
        stateDelegate = IdleState;
    }
Esempio n. 13
0
    private TerrainBuilder InstantiateTerrain(int object_id)
    {
        GameObject createdObject = PoolManager.instance.ReuseObject(object_id);

        createdObject.SetActive(true);
        createdObject.transform.SetParent(_terainholder.transform);
        createdObject.transform.localPosition = new Vector3(0, 0, _line_index);
        createdObject.SetActive(true);

        TerrainBuilder terrainBuilder = createdObject.GetComponent <TerrainBuilder>();

        terrainBuilder.SetUp();
        terrainBuilder.GenerateObstacle();

        _terrainsHolder.Enqueue(terrainBuilder);
        gridMap.Add(terrainBuilder.grids);


        _line_index++;
        return(createdObject.GetComponent <TerrainBuilder>());
    }
Esempio n. 14
0
    public void GeneratePoolingObject()
    {
        if (themeSTP == null)
        {
            Debug.LogError("ThemeSTP not assign");
            return;
        }

        //All type of terrain;
        int poolNum = 18;

        foreach (GameObject t_prefab in themeSTP.terrainPrefab)
        {
            TerrainBuilder tBuilder = t_prefab.GetComponent <TerrainBuilder>();
            PoolManager.instance.CreatePool(t_prefab, tBuilder.terrain_stp._id, poolNum);
        }

        //Other object (Vehicle, Obstacle, Units)
        foreach (STPObject t_object in themeSTP.stpObjectHolder)
        {
            PoolManager.instance.CreatePool(t_object.prefab, t_object._id, t_object.poolingNum);
        }
    }
 public TerrainApplication()
 {
     SocketMessageTypes = new List <SocketMessageTypeBase>();
     SocketMessageTypes.Add(TerrainCommunication);
     Builder = new TerrainBuilder();
 }
        private Traffic GetTerrain_CMD(string args)
        {
            ResponseType responseType = ResponseType.Failed;
            int          seed         = 0;
            int          width        = 0;
            int          height       = 0;
            IModule      module       = null;
            List <GradientPresets.GradientKeyData> gradient = new List <GradientPresets.GradientKeyData>();
            MapData      mdata;
            MessageTypes type = MessageTypes.None;

            string[] TextureFiles = new string[0];
            string   message      = string.Empty;

            if (_server.WorldLoaded)
            {
                if (_server.Users.SessionKeyExists(args))
                {
                    string         user    = _server.Users.GetConnectedUser(args).Name;
                    TerrainBuilder builder = _server.Worlds.CurrentWorld.Terrain;
                    responseType = ResponseType.Successfull;
                    seed         = builder.Seed;
                    width        = builder.Width;
                    height       = builder.Height;
                    module       = builder.NoiseModule;
                    gradient     = new List <GradientPresets.GradientKeyData>(builder.GradientPreset);
                    TextureFiles = new List <string>(GradientCreator.TextureFiles.Keys).ToArray();
                    message      = "success";

                    // make sure images are cleared. They will be sent seperatly.
                    for (int i = 0; i < gradient.Count; i++)
                    {
                        gradient[i].images.Clear();
                    }

                    mdata = new MapData(responseType, seed, width, height, gradient, TextureFiles, message);
                    string sendStr   = JsonConvert.SerializeObject(mdata);
                    string moduleStr = JsonConvert.SerializeObject(module, new JsonSerializerSettings {
                        TypeNameHandling = TypeNameHandling.All
                    });
                    _server.SockServ.Send(user, "setterrainmodule", moduleStr);
                    _server.SockServ.Send(user, "setterraindata", sendStr);


                    System.Threading.ManualResetEvent reset = new System.Threading.ManualResetEvent(false);
                    foreach (string imageName in GradientCreator.TextureFiles.Keys)
                    {
                        //reset.WaitOne(1);
                        Color[]       image       = ColorConvert.LibColList(GradientCreator.TextureFiles[imageName]);
                        ImageFileData imageStruct = new ImageFileData(imageName, image);
                        string        imageStr    = JsonConvert.SerializeObject(imageStruct);
                        _server.SockServ.Send(user, "setimage", imageStr);
                        //Logger.Log("sent image: {0}", imageName);
                    }
                    message = "success";
                    type    = MessageTypes.Success;
                    return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message))));
                }
                else
                {
                    message = "Invalid session key";
                    type    = MessageTypes.Not_Logged_in;
                    return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message))));
                }
            }
            message = "World not loaded";
            type    = MessageTypes.World_Not_Loaded;
            return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message))));
        }
Esempio n. 17
0
 void Start()
 {
     selection = GameObject.FindGameObjectWithTag("Player").GetComponent <KeepManager>();
     tb        = GameObject.Find("Terrain").GetComponent <TerrainBuilder> ();
     StartCoroutine(generateNavMap());
 }