예제 #1
0
        public void ProcessOrder(Ring1TerrainPainterOrder order)
        {
            foreach (var groundPieceTemplatePair in order.NewlyCreatedElements)
            {
                var template  = groundPieceTemplatePair.Value;
                var newObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
                newObject.name = template.Name;
                newObject.transform.localScale    = template.TransformTriplet.Scale;
                newObject.transform.localRotation = Quaternion.Euler(template.TransformTriplet.ForcedEulerRotation);
                newObject.transform.localPosition = template.TransformTriplet.Position =
                    template.TransformTriplet.Position;
                newObject.transform.SetParent(template.ParentGameObject.transform);

                var newMaterial = new Material(Shader.Find(template.ShaderName));
                foreach (var keyword in template.ShaderKeywordSet.Keywords)
                {
                    newMaterial.EnableKeyword(keyword);
                }
                template.Uniforms.SetUniformsToMaterial(newMaterial);

                newObject.GetComponent <UnityEngine.Renderer>().material = newMaterial;
                newObject.GetComponent <MeshFilter>().mesh = template.PieceMesh;
                GameObject.Destroy(newObject.GetComponent <MeshCollider>());

                _groundPieceGameObjects[groundPieceTemplatePair.Key] = newObject;
                template.Modifier.SetMaterial(newMaterial);
            }

            foreach (var pair in order.ActivationChanges)
            {
                _groundPieceGameObjects[pair.Key].SetActive(pair.Value && _makeTerrainVisible);
            }
        }
예제 #2
0
        public Ring1TerrainPainterOrder RetriveOrderAndClear()
        {
            var toReturn = _order;

            _order = new Ring1TerrainPainterOrder();
            return(toReturn);
        }