public void Update()
        {
            _utTextureRendererProxy.Update();
            _commonExecutor.Update();
            _unityThreadComputeShaderExecutorObject.Update();
            MyTexturePair texturePair;
            bool          takeSucceded = _resultBag.TryTake(out texturePair);

            if (takeSucceded)
            {
                var unitySideLength = 10f;
                var realSideLength  = 240 * 24;
                var metersPerUnit   = realSideLength / unitySideLength;

                var gameObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
                var material   = new Material(Shader.Find("Custom/Terrain/Terrain_Debug"));
                gameObject.GetComponent <MeshRenderer>().material = material;
                gameObject.name = "Terrain";
                gameObject.transform.localRotation          = Quaternion.Euler(0, 0, 0);
                gameObject.transform.localScale             = new Vector3(10, 6500 / metersPerUnit, 10);
                gameObject.transform.localPosition          = new Vector3(0, 0, 0);
                gameObject.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);

                material.SetTexture("_HeightmapTex0", texturePair.Tex0);
                material.SetTexture("_HeightmapTex1", texturePair.Tex1);
            }
        }
Ejemplo n.º 2
0
    /// <summary>
    /// Called everytime the inspected object is selected.
    /// </summary>
    private void OnEnable()
    {
        planeGenerator           = (PlaneGenerator)target;
        serializedPlaneGenerator = new SerializedObject(planeGenerator);

        InitStyles();
    }
Ejemplo n.º 3
0
    private void Awake()
    {
        _mesh = PlaneGenerator.Generate(_gridSize, _cellSize, "OceanMesh");
        _mesh.MarkDynamic();

        _vertices = _mesh.vertices;
    }
Ejemplo n.º 4
0
        public void Start()
        {
            //var heightTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\smallCut.png", 240,
            //    240, TextureFormat.RGBA32, true, true);
            //_currentHeightmap = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTexture);

            DiamondSquareCreator creator = new DiamondSquareCreator(new RandomProvider(22));

            _currentHeightmap = creator.CreateDiamondSquareNoiseArray(new IntVector2(240, 240), 64);
            MyArrayUtils.Multiply(_currentHeightmap.HeightmapAsArray, 0.1f);

            _go = GameObject.CreatePrimitive(PrimitiveType.Quad);
            var material = new Material(Shader.Find("Custom/Terrain/Terrain_Debug"));

            _go.GetComponent <MeshRenderer>().material = material;
            _go.name = "Terrain";
            _go.transform.localRotation          = Quaternion.Euler(0, 0, 0);
            _go.transform.localScale             = new Vector3(10, 10, 10);
            _go.transform.localPosition          = new Vector3(0, 0, 0);
            _go.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);

            var doneTexture =
                HeightmapUtils.CreateTextureFromHeightmap(_currentHeightmap);

            _go.GetComponent <MeshRenderer>().material.SetTexture("_HeightmapTex0", doneTexture);
            _go.GetComponent <MeshRenderer>().material.SetTexture("_HeightmapTex1", doneTexture);
            _oldDoneTexture = doneTexture;
        }
    void updateMesh(int index, int idz, GameObject terrainObject, Transform gO, int lod, MeshFilter mf, float xDisp, float yDisp, float interval2, bool update)
    {
        //if (mf.sharedMesh!=null)mf.sharedMesh.Clear();

        MeshData meshData = PlaneGenerator.Generate(interval2 * 2, interval2 * 2, textQual / lod - 2, textQual / lod - 2);

        if (sphere)
        {
            meshData.vertices = spheritize(meshData.vertices, new Vector3(xDisp, radius, yDisp));
        }
        if (useNoise)
        {
            meshData.vertices = addNormalNoise(meshData.vertices, planetInfo.nmArray [index], meshHeightMultiplier);
        }
        Vector3 movement = meshAverage(meshData.vertices);

        gO.localPosition += translateByPivot(idz, new Vector2(movement.x, movement.z), movement.y);
        meshData.vertices = translateMesh(meshData.vertices, -movement);
        //Debug.Log (mesh.vertices.Length.ToString());
        Mesh mesh = meshData.CreateMesh();

        if (!update)
        {
            mf.sharedMesh = mesh;
        }
        else
        {
            mf.mesh = mesh;
        }

        planetInfo.mcArray [index].sharedMesh = mesh;
    }
Ejemplo n.º 6
0
    void Start()
    {
        GameObject     thePlayer       = GameObject.Find("GameManager");
        PlaneGenerator generatorScript = thePlayer.GetComponent <PlaneGenerator>();

        x = (generatorScript.row - 1) * 10;
        y = (generatorScript.col - 1) * 10;
    }
Ejemplo n.º 7
0
        public HeightPyramidSegmentShapeGroup CreateGroup(HeightPyramidLevelTemplate pyramidLevelTemplate, HeightPyramidLevel level, GameObject pyramidRootGo)
        {
            var parentGO = new GameObject("ETerrainParent " + level);
            var center   = pyramidLevelTemplate.Center;

            parentGO.transform.localPosition = new Vector3(center.x, 0, center.y);

            var ringTemplateElementMesh = _meshGenerator.AddOrder(() =>
                                                                  PlaneGenerator.CreateETerrainSegmentMesh(_perLevelConfiguration.RingObjectMeshVertexLength.X, _perLevelConfiguration.RingObjectMeshVertexLength.Y))
                                          .Result; //todo
            var centerMesh = _meshGenerator.AddOrder(() =>
                                                     PlaneGenerator.CreateETerrainSegmentMesh(_perLevelConfiguration.CenterObjectMeshVertexLength.X, _perLevelConfiguration.CenterObjectMeshVertexLength.Y))
                             .Result; //todo

            var shapeMeshesToCombine = new List <CombineInstance>();

            foreach (var shapeTemplate in pyramidLevelTemplate.ShapeTemplates)
            {
                Mesh thisSegmentMesh = null;
                if (shapeTemplate.RingIndex == 0) //center
                {
                    thisSegmentMesh = centerMesh;
                }
                else
                {
                    thisSegmentMesh = ringTemplateElementMesh;
                }

                var trs = CreateTrsMatrixForShape(shapeTemplate);
                shapeMeshesToCombine.Add(new CombineInstance()
                {
                    transform = trs,
                    mesh      = thisSegmentMesh
                });
            }

            var finalMesh = _meshGenerator.AddOrder(() =>
            {
                var m = MeshGenerationUtils.CreateMeshAsSum(shapeMeshesToCombine);
                MeshGenerationUtils.RecalculateUvAsInPlane(m);
                return(m);
            }).Result; //TODO

            MeshGenerationUtils.SetYBoundsToInfinity(finalMesh);

            var mainObject = CreateShapeObject(finalMesh, "MainObject", center, pyramidLevelTemplate.FlatSize);

            mainObject.transform.SetParent(parentGO.transform);

            parentGO.transform.localScale = new Vector3(1, _commonConfiguration.YScale, 1);
            parentGO.transform.SetParent(pyramidRootGo.transform);
            return(new HeightPyramidSegmentShapeGroup()
            {
                CentralShape = mainObject,
                ParentGameObject = parentGO,
            });
        }
Ejemplo n.º 8
0
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);

            var rgbaMainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\n49_e019_1arc_v3.png", 3600,
                                                                           3600,
                                                                           TextureFormat.ARGB32, true, false);

            MainTexture = _transformator.EncodedHeightTextureToPlainAsync(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = rgbaMainTexture
            }).Result;

            //var heightArray = HeightmapUtils.CreateHeightmapArrayFromTexture(MainTexture);
            //for (int x = 0; x < 5; x++)
            //{
            //    for (int y = 0; y < 5; y++)
            //    {
            //        heightArray.HeightmapAsArray[x, y] = 0.3f;
            //    }
            //}
            //MainTexture = HeightmapUtils.CreateTextureFromHeightmap(heightArray);


            InitializeFields();

            var unitySideLength = 10f;
            var realSideLength  = 240 * 24;
            var metersPerUnit   = realSideLength / unitySideLength;

            _gameObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
            var material = new Material(Shader.Find("Custom/Terrain/Terrain_Debug_Plain"));

            _gameObject.GetComponent <MeshRenderer>().material = material;
            _gameObject.name = "Terrain";
            _gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);

            //_gameObject.transform.localScale = new Vector3(10, (6500 / metersPerUnit) , 10);
            //_gameObject.transform.localPosition = new Vector3(0 , 0, 0);

            //_gameObject.transform.localScale = new Vector3(10, (6500 / metersPerUnit) * 8, 10);
            //_gameObject.transform.localPosition = new Vector3(0, 0, 0);

            _gameObject.transform.localScale             = new Vector3(10, 1 / 64f * (6500 / metersPerUnit) * 8 * 8, 10);
            _gameObject.transform.localPosition          = new Vector3(0, -30, 0);
            _gameObject.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);

            RegenerateTextures();

            //Camera.main.transform.localPosition = new Vector3(10,2,0);
            //Camera.main.transform.eulerAngles = new Vector3(30,-45,0);
            Camera.main.transform.localPosition = new Vector3(-1, -25, 10);
            Camera.main.transform.eulerAngles   = new Vector3(30, 132, 0);
        }
Ejemplo n.º 9
0
    private void OnTriggerEnter(Collider other)
    {
        PlaneGenerator planeGenerator = other.GetComponent <PlaneGenerator>();

        if (planeGenerator == null)
        {
            Debug.LogError("Deform tool was triggered by something that isn't deformable.");
            return;
        }

        planeGenerators.Add(planeGenerator);
    }
    void updateMesh(int lod, MeshFilter mf, float[,] noiseMap, float interval2)
    {
        if (mf.sharedMesh != null)
        {
            mf.sharedMesh.Clear();
        }

        MeshData mesh = PlaneGenerator.Generate(interval2 * 2, interval2 * 2, textQual / lod - 2, textQual / lod - 2);

        mesh.vertices = addNormalNoise(mesh.vertices, noiseMap, meshHeightMultiplier, false);

        mf.sharedMesh = mesh.CreateMesh();
    }
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);

            var rgbaMainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\n49_e019_1arc_v3.png", 3600,
                                                                           3600,
                                                                           TextureFormat.ARGB32, true, false);


            TerrainTextureFormatTransformator transformator =
                new TerrainTextureFormatTransformator(new CommonExecutorUTProxy());
            var mainTexture = transformator.EncodedHeightTextureToPlainAsync(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = rgbaMainTexture
            }).Result;


            var gameObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
            var material   = new Material(Shader.Find("Custom/Terrain/Ring1"));

            TerrainAndNormalTexture pair = CreateTerrainAndNormalTexture(mainTexture);

            material.SetTexture("_HeightmapTex", pair.HeightTexture);
            material.SetTexture("_NormalmapTex", pair.NormalTexture);

            gameObject.GetComponent <MeshRenderer>().material = material;
            gameObject.name = "Terrain";
            gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);

            var unitySideLength = 10f;
            var realSideLength  = 240 * 24;
            var metersPerUnit   = realSideLength / unitySideLength;

            if (_terrainResolution == TerrainCardinalResolution.MIN_RESOLUTION)
            {
                gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit), 10);
                gameObject.transform.localPosition = new Vector3(0, 0, 0);
            }
            else if (_terrainResolution == TerrainCardinalResolution.MID_RESOLUTION)
            {
                gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit) * 8, 10);
                gameObject.transform.localPosition = new Vector3(0, 0, 0);
            }
            else
            {
                gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit) * 8 * 8, 10);
                gameObject.transform.localPosition = new Vector3(0, -30, 0);
            }
            gameObject.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);
        }
Ejemplo n.º 12
0
    void Start()
    {
        // Generate Plane
        p = GetComponent <PlaneGenerator>();
        p.Generate();

        // Attach Wave Material & Remove Shadow Casting
        MeshRenderer mR = GetComponent <MeshRenderer>();

        mR.material          = wave;
        mR.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;

        m = GetComponent <MeshFilter>().mesh;
    }
    protected void Plane(PlaneGenerator planeGen)
    {
        var kernel = compute.FindKernel("Plane");

        compute.SetMatrix("_Transform", transform.localToWorldMatrix);
        compute.SetFloat("_DT", Time.deltaTime);

        var plane = planeGen.GetPlane();

        compute.SetVector("_PlaneNormal", plane.normal);
        compute.SetFloat("_PlaneDistance", plane.distance);
        compute.SetFloat("_PlaneWidth", planeGen.Width);

        KernelGrids(kernel);
    }
Ejemplo n.º 14
0
        public static void CreateTerrainShowingGameObject(Texture2D conventionalRing1Texture, float heightDelta)
        {
            _terrainGameObject      = GameObject.CreatePrimitive(PrimitiveType.Plane);
            _terrainGameObject.name = "Terrain";
            var terrainMaterial = new Material(Shader.Find("Custom/Terrain/Terrain1"));

            terrainMaterial.SetTexture("_HeightmapTex", conventionalRing1Texture);
            terrainMaterial.SetFloat("_MaxHeight", heightDelta);

            _terrainGameObject.GetComponent <Renderer>().material = terrainMaterial;
            _terrainGameObject.GetComponent <MeshFilter>().mesh   = PlaneGenerator.CreateFlatPlaneMesh(256, 250);
            GameObject.Destroy(_terrainGameObject.GetComponent <MeshCollider>());
            _terrainGameObject.transform.localScale    = new Vector3(100, 100.0f / 712.0f, 100);
            _terrainGameObject.transform.localPosition = new Vector3(10.0f, -60f, 0f);
        }
Ejemplo n.º 15
0
        public async Task <GRingMeshDetail> ProvideMeshDetailsAsync()
        {
            var mesh = await _meshGenerator.AddOrder(
                () => PlaneGenerator.CreateFlatPlaneMesh(_gameObjectMeshResolution.X, _gameObjectMeshResolution.Y));

            var pack = new UniformsPack();

            pack.SetUniform("_HeightmapLodOffset", _heightmapLodOffset);

            return(new GRingMeshDetail()
            {
                Mesh = mesh,
                Uniforms = pack,
                HeightmapLod = _heightmapLodOffset
            });
        }
Ejemplo n.º 16
0
        public void CreateTerrainObject(TextureWithSize textureWithSize, Vector2 startPosition)
        {
            var go = GameObject.CreatePrimitive(PrimitiveType.Plane);

            go.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(241, 241);

            var material = new Material(Shader.Find("Custom/Debug/SimpleTerrain"));

            material.SetTexture("_HeightmapTex", textureWithSize.Texture);
            material.SetFloat("_HeightmapTexWidth", 241);

            go.GetComponent <MeshRenderer>().material = material;
            go.transform.localPosition = new Vector3(startPosition.x, 0, startPosition.y);
            go.transform.localScale    = new Vector3(90, 10, 90);
            go.name = $"TerrainAt" + startPosition;
        }
Ejemplo n.º 17
0
        public void Update()
        {
            _utTextureRendererProxy.Update();
            _commonExecutorUtProxy.Update();
            _computeShaderExecutorObject.Update();

            GeneratedTerrainElements generatedElement;

            if (_generatedElements.TryTake(out generatedElement))
            {
                var heightElement = generatedElement.HeightElement;
                var normalElement = generatedElement.NormalElement;

                var gameObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
                var material   = new Material(Shader.Find("Custom/Terrain/Ring1"));
                material.SetTexture("_HeightmapTex", heightElement.TokenizedElement.DetailElement.Texture.Texture);
                material.SetVector("_HeightmapUv", heightElement.UvBase.ToVector4());

                material.SetTexture("_NormalmapTex", normalElement.TokenizedElement.DetailElement.Texture.Texture);
                material.SetVector("_NormalmapUv", normalElement.UvBase.ToVector4());

                gameObject.GetComponent <MeshRenderer>().material = material;
                gameObject.name = "Terrain";
                gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);

                var unitySideLength = 10f;
                var realSideLength  = 240 * 24;
                var metersPerUnit   = realSideLength / unitySideLength;

                if (_terrainResolution == TerrainCardinalResolution.MIN_RESOLUTION)
                {
                    gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit), 10);
                    gameObject.transform.localPosition = new Vector3(0, 0, 0);
                }
                else if (_terrainResolution == TerrainCardinalResolution.MID_RESOLUTION)
                {
                    gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit) * 8, 10);
                    gameObject.transform.localPosition = new Vector3(0, 0, 0);
                }
                else
                {
                    gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit) * 8 * 8, 10);
                    gameObject.transform.localPosition = new Vector3(0, -30, 0);
                }
                gameObject.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);
            }
        }
Ejemplo n.º 18
0
        public HeightPyramidSegmentShapeGroup CreateGroup(HeightPyramidLevelTemplate pyramidLevelTemplate, HeightPyramidLevel level, GameObject pyramidRootGo)
        {
            var parentGO = new GameObject("ETerrainParent " + level);
            var center   = pyramidLevelTemplate.Center;

            parentGO.transform.localPosition = new Vector3(center.x, 0, center.y);

            var objectsPerRing = pyramidLevelTemplate.PerRingTemplates.Keys.ToDictionary(c => c, c => new List <GameObject>());

            GameObject centerObject = null;

            var ring1ElementMesh =
                _meshGenerator.AddOrder(() => PlaneGenerator.CreateETerrainSegmentMesh(
                                            _perLevelConfiguration.RingObjectMeshVertexLength.X, _perLevelConfiguration.RingObjectMeshVertexLength.Y)).Result; //todo

            ring1ElementMesh.RecalculateBounds();
            MeshGenerationUtils.SetYBounds(ring1ElementMesh, 0f, 1f);
            foreach (var shapeTemplate in pyramidLevelTemplate.ShapeTemplates)
            {
                if (shapeTemplate.RingIndex == 0) //center
                {
                    var centerMesh = _meshGenerator.AddOrder(() =>
                                                             PlaneGenerator.CreateETerrainSegmentMesh(_perLevelConfiguration.CenterObjectMeshVertexLength.X,
                                                                                                      _perLevelConfiguration.CenterObjectMeshVertexLength.Y))
                                     .Result; //todo
                    MeshGenerationUtils.SetYBounds(centerMesh, 0f, 1f);
                    centerObject = CreateShapeObject(centerMesh, shapeTemplate, "Center");

                    centerObject.transform.SetParent(parentGO.transform);
                }
                else
                {
                    var shape = CreateShapeObject(ring1ElementMesh, shapeTemplate, "Ring " + shapeTemplate.RingIndex);
                    shape.transform.SetParent(parentGO.transform);
                    objectsPerRing[shapeTemplate.RingIndex].Add(shape);
                }
            }

            parentGO.transform.localScale = new Vector3(1, _commonConfiguration.YScale, 1);
            parentGO.transform.SetParent(pyramidRootGo.transform);
            return(new HeightPyramidSegmentShapeGroup()
            {
                CentralShape = centerObject,
                ParentGameObject = parentGO,
                ShapesPerRing = objectsPerRing
            });
        }
        private void CreateComparisionObject()
        {
            _go = GameObject.CreatePrimitive(PrimitiveType.Quad);
            var material = new Material(Shader.Find("Custom/Terrain/Terrain_Debug"));

            _go.GetComponent <MeshRenderer>().material = material;
            _go.name = "Terrain";
            _go.transform.localRotation          = Quaternion.Euler(0, 0, 0);
            _go.transform.localScale             = new Vector3(10, 1, 10);
            _go.transform.localPosition          = new Vector3(0, 0, 0);
            _go.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);

            var doneTexture =
                HeightmapUtils.CreateTextureFromHeightmap(_currentHeightmap);

            _go.GetComponent <MeshRenderer>().material.SetTexture("_HeightmapTex0", doneTexture);
            _go.GetComponent <MeshRenderer>().material.SetTexture("_HeightmapTex1", doneTexture);
        }
        public void Start3()
        {
            var length = 50;

            float[,] heightArray = new float[length, length];
            for (int x = 0; x < length; x++)
            {
                for (int y = 0; y < length; y++)
                {
                    var ax = x / (float)length * 2 * Mathf.PI;
                    var ay = y / (float)length * 2 * Mathf.PI;

                    heightArray[x, y] = Mathf.Sin(ax) / 10;
                }
            }
            var mesh = PlaneGenerator.CreatePlaneMesh(1, 1, heightArray);

            MyAssetDatabase.CreateAndSaveAsset(mesh, "Assets/NPRResources/SimpleMesh1.asset");
        }
Ejemplo n.º 21
0
        public static GameObject CreateFlatTerrainPlane(Point2D gameObjectSize, MyRectangle inGamePosition,
                                                        UniformsPack pack)
        {
            var gameObject      = new GameObject("Ring1 terrain object " + inGamePosition.ToString());
            var terrainMaterial = new Material(Shader.Find("Custom/Terrain/Terrain1"));

            pack.SetUniformsToMaterial(terrainMaterial);

            gameObject.AddComponent <MeshRenderer>();
            gameObject.GetComponent <Renderer>().material = terrainMaterial;

            gameObject.AddComponent <MeshFilter>().mesh =
                PlaneGenerator.CreateFlatPlaneMesh(gameObjectSize.X, gameObjectSize.Y);

            gameObject.transform.localScale    = new Vector3(inGamePosition.Width, 1, inGamePosition.Height);
            gameObject.transform.localPosition = new Vector3(inGamePosition.X, 0, inGamePosition.Y);

            return(gameObject);
        }
    void RandomGenerateMap()
    {
        GameObject     planeObject = new GameObject("Plane Object");
        PlaneGenerator myPlaneGen  = planeObject.AddComponent <PlaneGenerator>();

        myPlaneGen.Size = new Vector3(40f, 0f, 40f);
        planeObject.transform.position = new Vector3(-450f, -1f, -450f);

        GameObject roadObject = new GameObject("Road_Object");

        myRoadGen = roadObject.AddComponent <RoadGenerator>();

        myRoadGen.RoadRadius   = Random.Range(80, 111);
        myRoadGen.RoadSegments = Random.Range(260, 360);
        myRoadGen.RoadWaviness = Random.Range(80, 201);
        myRoadGen.WaveScale    = Random.Range(1.6f, 2.4f);
        myRoadGen.WaveOffset   = new Vector2(Random.Range(0.65f, 1.65f), Random.Range(1.35f, 2.5f));
        myRoadGen.WaveStep     = new Vector2(Random.Range(0.01f, 0.02f), Random.Range(0.01f, 0.03f));
    }
Ejemplo n.º 23
0
 // Use this for initialization
 void Start()
 {
     anchor         = GameObject.Find("Anchor");
     giboData       = GameObject.Find("GiboData").GetComponent <GiboData>();
     publicVariable = GameObject.Find("PublicVariable").GetComponent <PublicVariable>();
     PlaneGenerator.SetActive(false);
     for (i = 1; i <= 9; i++)
     {
         for (j = 1; j <= 10; j++)
         {
             position_name          = "w" + i + "h" + j;
             mal_object             = GameObject.Find(position_name);
             mal_position[i, j]     = mal_object.transform.position;
             attackedPosition[i, j] = false;
         }
     }
     ReadDate();
     CreateDefaultMal();
 }
Ejemplo n.º 24
0
        public static GameObject CreateHeightedTerrainPlane(Point2D gameObjectSize,
                                                            MyRectangle inGamePosition, UniformsPack pack, HeightmapArray simplifiedMap)
        {
            var gameObject      = new GameObject("Ring1 terrain object " + inGamePosition.ToString());
            var terrainMaterial = new Material(Shader.Find("Custom/Terrain/Ring1DirectHeight"));

            pack.SetUniformsToMaterial(terrainMaterial);

            gameObject.AddComponent <MeshRenderer>();
            gameObject.GetComponent <Renderer>().material = terrainMaterial;
            gameObject.AddComponent <MeshFilter>();

            PlaneGenerator.createPlaneMeshFilter(gameObject.GetComponent <MeshFilter>(), 1, 1,
                                                 simplifiedMap.HeightmapAsArray);

            gameObject.transform.localScale    = new Vector3(inGamePosition.Width, 1, inGamePosition.Height);
            gameObject.transform.localPosition = new Vector3(inGamePosition.X, 0, inGamePosition.Y);

            return(gameObject);
        }
Ejemplo n.º 25
0
        public static SubmapPlane CreatePlaneObject(float[,] heightArray)
        {
            var planeObj = new GameObject {
                name = "myTestPlane"
            };

            PlaneGenerator.createPlaneMeshFilter(planeObj.AddComponent <MeshFilter>(), 1, 1, heightArray);

            var renderer = planeObj.AddComponent <MeshRenderer>();

            renderer.material.shader = Shader.Find("Particles/Additive");
            Texture2D tex = new Texture2D(1, 1);

            tex.SetPixel(0, 0, Color.green);
            tex.Apply();
            renderer.material.mainTexture = tex;
            renderer.material.color       = Color.green;

            return(new SubmapPlane(planeObj));
        }
Ejemplo n.º 26
0
        private async Task <GRingTerrainId> CreateTerrainAsync()
        {
            var triplet = _tripletProvider.ProvideTriplet();

            var mesh = await _meshGeneratorUtProxy.AddOrder(() => PlaneGenerator.CreateFlatPlaneMesh(65, 65));

            var creationTemplatesList = new List <Ring1GroundPieceCreationTemplate>();
            int layerIndex            = 0;

            UniformsPack pack = new UniformsPack();

            pack.SetUniform("_LodLevel", _flatLod.ScalarValue);
            pack.SetUniform("_NodeId", LastId);

            var groundShapeDetails = await _groundShapeProvider.ProvideGroundTextureDetail();

            _groundShapeToken = groundShapeDetails.GroundShapeToken;
            pack.MergeWith(groundShapeDetails.Uniforms);

            creationTemplatesList.Add(
                new Ring1GroundPieceCreationTemplate()
            {
                Name             = $"TerrainElementLayer l:{layerIndex} fl:{_flatLod.ScalarValue}, X:{LastId++}",
                ParentGameObject = _parentObject,
                PieceMesh        = mesh,
                TransformTriplet = triplet,
                ShaderName       = "Custom/Terrain/DebugTerrainedLod",
                //ShaderName = "Custom/Terrain/Ring0",
                ShaderKeywordSet = groundShapeDetails.ShaderKeywordSet,
                Uniforms         = pack,
                Modifier         = new Ring1GroundPieceModifier()
            });


            var toReturn = new GRingTerrainId()
            {
                ElementsIds = creationTemplatesList.Select(c => _orderGrabber.AddCreationOrder(c)).ToList()
            };

            return(toReturn);
        }
        protected override async Task <UInt32> CreateTerrainAsync()
        {
            var ring1Position = Ring1Node.Ring1Position;

            var xOffset = _globalHeightmap.Width * ring1Position.X;
            var yOffset = _globalHeightmap.Height * ring1Position.Y;
            var width   = _globalHeightmap.Width * ring1Position.Width;
            var height  = _globalHeightmap.Height * ring1Position.Height;

            var subArray = slicer.GetSubarrayWithEmptyMarginsSafe(_globalHeightmap.HeightmapAsArray, (int)xOffset,
                                                                  (int)yOffset,
                                                                  (int)width, (int)height);

            Point2D newGameObjectSize = new Point2D(33, 33);

            var simplifiedMap = simplyfyer.SimplyfyHeightmap(new HeightmapArray(subArray), newGameObjectSize.X - 1,
                                                             newGameObjectSize.Y - 1);

            var mesh = await _meshGenerator.AddOrder(
                () => PlaneGenerator.CreatePlaneMesh(1, 1, simplifiedMap.HeightmapAsArray));

            UniformsPack pack = await CreateUniformsPack(Ring1Node);

            var inGamePosition = _coordsCalculator.CalculateGlobalObjectPosition(Ring1Node.Ring1Position);

            var triplet = new MyTransformTriplet(new Vector3(inGamePosition.X, 0, inGamePosition.Y), Vector3.zero,
                                                 new Vector3(inGamePosition.Width, 1, inGamePosition.Height));

            var creationTemplate = new Ring1GroundPieceCreationTemplate()
            {
                Name             = "Ring1 terrain object " + inGamePosition.ToString(),
                ParentGameObject = ParentObject,
                PieceMesh        = mesh,
                ShaderName       = "Custom/Terrain/Ring1DirectHeight",
                TransformTriplet = triplet,
                Uniforms         = pack
            };
            var objectId = OrderGrabber.AddCreationOrder(creationTemplate);

            return(objectId);
        }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        PlaneGenerator script = (PlaneGenerator)target;

        if (GUI.changed)
        {
        }

        if (GUILayout.Button("Generate Plane"))
        {
            script.GeneratePlane();
        }

        if (GUILayout.Button("Destroy Planes"))
        {
            //foreach(GameObject go in GameObject.FindGameObjectsWithTag("root"))
            //    GameObject.DestroyImmediate(go);
        }
    }
Ejemplo n.º 29
0
        private void CreateDebugObject(DebugObjectSpecification specification, Texture weldTexture, TerrainWeldUvs uvs)
        {
            var go = GameObject.CreatePrimitive(PrimitiveType.Plane);

            go.GetComponent <MeshFilter>().mesh =
                PlaneGenerator.CreateFlatPlaneMesh(specification.MeshResolution.X, specification.MeshResolution.Y);
            Material material = new Material(Shader.Find("Custom/Test/TerrainWelding"));

            material.SetTexture("_HeightmapTex", specification.HeightTexture.Texture);
            material.SetVector("_HeightmapUv", specification.HeightmapUv);
            material.SetFloat("_HeightmapLodOffset", specification.HeightmapLodOffset);
            material.SetTexture("_WeldTexture", weldTexture);

            material.SetVector("_LeftWeldTextureUvRange", uvs.LeftUv);
            material.SetVector("_RightWeldTextureUvRange", uvs.RightUv);
            material.SetVector("_TopWeldTextureUvRange", uvs.TopUv);
            material.SetVector("_BottomWeldTextureUvRange", uvs.BottomUv);

            go.GetComponent <MeshRenderer>().material = material;
            go.transform.localPosition = new Vector3(specification.StartPos.x, 0, specification.StartPos.y);
            go.transform.localScale    = specification.LocalScale;
        }
Ejemplo n.º 30
0
    void GenerateWorld()
    {
        // Divide the big terrain in smaller parts. There is a limit of vertices per mesh
        int numGrids = TOTAL_GRID_SIZE / GRID_SIZE;

        gridLand  = new GameObject[numGrids * numGrids];
        gridWater = new GameObject[numGrids * numGrids];

        for (int x = 0; x < numGrids; x++)
        {
            for (int y = 0; y < numGrids; y++)
            {
                int idx = x + y * numGrids;

                // Calculate the offsets
                int posX = x * (GRID_SIZE - 1);
                int posY = y * (GRID_SIZE - 1);

                // Delegate generation of planes to a static class
                Mesh mesh = PlaneGenerator.GeneratePlane(GRID_SIZE, TOTAL_GRID_SIZE, posX, posY).CreateMesh();
                mesh.bounds = new Bounds(new Vector3(GRID_SIZE / 2, 0, GRID_SIZE / 2), new Vector3(GRID_SIZE, TERRAIN_HEIGHT * 2, GRID_SIZE));

                gridLand[idx] = new GameObject("Grid Land " + idx.ToString());
                gridLand[idx].AddComponent <MeshFilter>();
                gridLand[idx].AddComponent <MeshRenderer>();
                gridLand[idx].GetComponent <Renderer>().material = landMat;
                gridLand[idx].GetComponent <MeshFilter>().mesh   = mesh;
                gridLand[idx].transform.localPosition            = new Vector3(-TOTAL_GRID_SIZE / 2 + posX, 0, -TOTAL_GRID_SIZE / 2 + posY);

                gridWater[idx] = new GameObject("Grid Water " + idx.ToString());
                gridWater[idx].AddComponent <MeshFilter>();
                gridWater[idx].AddComponent <MeshRenderer>();
                gridWater[idx].GetComponent <Renderer>().material = waterMat;
                gridWater[idx].GetComponent <MeshFilter>().mesh   = mesh;
                gridWater[idx].transform.localPosition            = new Vector3(-TOTAL_GRID_SIZE / 2 + posX, 0, -TOTAL_GRID_SIZE / 2 + posY);
            }
        }
    }