protected override void UpdateGeneratorInternal()
        {
            if (surfaceAssets == null)
            {
                var defaultRenderMaterial  = CSGMaterialManager.DefaultWallMaterial;
                var defaultPhysicsMaterial = CSGMaterialManager.DefaultPhysicsMaterial;
                surfaceAssets = new CSGSurfaceAsset[6]
                {
                    CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial),
                    CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial),
                    CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial),
                    CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial),
                    CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial),
                    CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial)
                };
            }

            if (surfaceDescriptions == null ||
                surfaceDescriptions.Length != 6)
            {
                // TODO: make this independent on plane position somehow
                var surfaceFlags = CSGDefaults.SurfaceFlags;
                surfaceDescriptions = new SurfaceDescription[6]
                {
                    new SurfaceDescription {
                        UV0 = UVMatrix.centered, surfaceFlags = surfaceFlags, smoothingGroup = 0
                    },
                    new SurfaceDescription {
                        UV0 = UVMatrix.centered, surfaceFlags = surfaceFlags, smoothingGroup = 0
                    },
                    new SurfaceDescription {
                        UV0 = UVMatrix.centered, surfaceFlags = surfaceFlags, smoothingGroup = 0
                    },
                    new SurfaceDescription {
                        UV0 = UVMatrix.centered, surfaceFlags = surfaceFlags, smoothingGroup = 0
                    },
                    new SurfaceDescription {
                        UV0 = UVMatrix.centered, surfaceFlags = surfaceFlags, smoothingGroup = 0
                    },
                    new SurfaceDescription {
                        UV0 = UVMatrix.centered, surfaceFlags = surfaceFlags, smoothingGroup = 0
                    }
                };
            }

            if (BoundsExtensions.IsValid(bounds.min, bounds.max))
            {
                BrushMeshAssetFactory.GenerateBoxAsset(brushMeshAsset, bounds, surfaceAssets, surfaceDescriptions);
            }
            else
            {
                brushMeshAsset.Clear();
            }
        }
        // TODO: improve naming
        public static CSGModel GetModelForNode(CSGModel overrideModel = null)
        {
            if (overrideModel)
            {
                BrushMeshAssetFactory.ActiveModel = overrideModel;
                return(overrideModel);
            }

            var activeModel = BrushMeshAssetFactory.ActiveModel;

            if (!activeModel)
            {
                activeModel = BrushMeshAssetFactory.Create <CSGModel>("Model");
                BrushMeshAssetFactory.ActiveModel = activeModel;
            }
            return(activeModel);
        }
Esempio n. 3
0
        public static bool GenerateCylinderAsset(CSGBrushMeshAsset brushMeshAsset, CSGCylinderDefinition definition)
        {
            definition.Validate();

            var tempTop    = definition.top;
            var tempBottom = definition.bottom;

            if (!definition.isEllipsoid)
            {
                tempTop.diameterZ    = tempTop.diameterX;
                tempBottom.diameterZ = tempBottom.diameterX;
            }

            switch (definition.type)
            {
            case CylinderShapeType.Cylinder:       return(BrushMeshAssetFactory.GenerateCylinderAsset(brushMeshAsset, tempBottom, tempTop.height, definition.rotation, definition.sides, definition.surfaceAssets, definition.surfaceDescriptions));

            case CylinderShapeType.ConicalFrustum: return(BrushMeshAssetFactory.GenerateConicalFrustumAsset(brushMeshAsset, tempBottom, tempTop, definition.rotation, definition.sides, definition.surfaceAssets, definition.surfaceDescriptions));

            case CylinderShapeType.Cone:           return(BrushMeshAssetFactory.GenerateConeAsset(brushMeshAsset, tempBottom, tempTop.height, definition.rotation, definition.sides, definition.surfaceAssets, definition.surfaceDescriptions));
            }
            return(false);
        }
Esempio n. 4
0
        protected override void UpdateGeneratorInternal()
        {
            if (surfaceAssets == null ||
                surfaceAssets.Length != 3)
            {
                var defaultRenderMaterial  = CSGMaterialManager.DefaultWallMaterial;
                var defaultPhysicsMaterial = CSGMaterialManager.DefaultPhysicsMaterial;
                surfaceAssets = new CSGSurfaceAsset[3];
                for (int i = 0; i < 3; i++) // Note: sides share same material
                {
                    surfaceAssets[i] = CSGSurfaceAsset.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial);
                }
            }

            if (Shape == null)
            {
                Shape = new Curve2D(DefaultShape);
            }

            int sides = Shape.controlPoints.Length;

            if (surfaceDescriptions == null ||
                surfaceDescriptions.Length != 2 + sides)
            {
                var surfaceFlags = CSGDefaults.SurfaceFlags;
                surfaceDescriptions = new SurfaceDescription[2 + sides];
                for (int i = 0; i < 2 + sides; i++)
                {
                    surfaceDescriptions[i] = new SurfaceDescription {
                        surfaceFlags = surfaceFlags, UV0 = UVMatrix.centered
                    };
                }
            }

            BrushMeshAssetFactory.GenerateExtrudedShapeAsset(brushMeshAsset, shape, path, curveSegments, surfaceAssets, ref surfaceDescriptions);
        }
Esempio n. 5
0
 protected override void UpdateGeneratorInternal()
 {
     BrushMeshAssetFactory.GenerateSphereAsset(brushMeshAsset, definition);
 }
Esempio n. 6
0
 protected override void UpdateGeneratorInternal()
 {
     BrushMeshAssetFactory.GenerateSpiralStairsAsset(brushMeshAsset, ref definition);
 }
 protected override void UpdateGeneratorInternal()
 {
     BrushMeshAssetFactory.GenerateCapsuleAsset(brushMeshAsset, ref definition);
 }
 protected override void UpdateGeneratorInternal()
 {
     BrushMeshAssetFactory.GeneratePathedStairsAsset(brushMeshAsset, definition);
 }