public bool EnsureSize(int expectedSize) { if ((surfaces != null && expectedSize == surfaces.Length) || (surfaces == null && expectedSize == 0)) { return(false); } if (expectedSize == 0) { surfaces = null; return(true); } var defaultRenderMaterial = CSGMaterialManager.DefaultWallMaterial; var defaultPhysicsMaterial = CSGMaterialManager.DefaultPhysicsMaterial; var newSurfaces = new ChiselSurface[expectedSize]; var prevLength = (surfaces == null) ? 0 : surfaces.Length; if (prevLength > 0) { Array.Copy(surfaces, newSurfaces, Mathf.Min(newSurfaces.Length, prevLength)); } for (int i = prevLength; i < newSurfaces.Length; i++) { newSurfaces[i] = new ChiselSurface { surfaceDescription = SurfaceDescription.Default, brushMaterial = ChiselBrushMaterial.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial) }; } surfaces = newSurfaces; return(true); }
public static bool IsRegistered(ChiselBrushMaterial brushMaterial) { if (brushMaterial == null) { return(false); } return(registeredLookup.Contains(brushMaterial)); }
public static ChiselBrushMaterial CreateInstance(ChiselBrushMaterial other) { return(new ChiselBrushMaterial { LayerUsage = other.layerUsage, RenderMaterial = other.renderMaterial, PhysicsMaterial = other.physicsMaterial }); }
public static void OnLayerUsageFlagsChanged(ChiselBrushMaterial brushMaterial, LayerUsageFlags prevValue, LayerUsageFlags value) { if (!registeredLookup.Contains(brushMaterial) || (prevValue == value)) { return; } OnBrushMaterialChanged?.Invoke(brushMaterial); }
public SurfaceLayers GetLayerDefinition(ChiselBrushMaterial brushMaterial) { return(new SurfaceLayers { layerUsage = brushMaterial.layerUsage, layerParameter1 = brushMaterial.renderMaterial == null ? 0 : GetID(brushMaterial.renderMaterial), layerParameter2 = brushMaterial.physicsMaterial == null ? 0 : GetID(brushMaterial.physicsMaterial) }); }
public static void OnSetDirty(ChiselBrushMaterial brushMaterial) { if (!registeredLookup.Contains(brushMaterial)) { return; } OnBrushMaterialChanged?.Invoke(brushMaterial); }
public void Validate() { if (surfaceDefinition == null) { surfaceDefinition = new ChiselSurfaceDefinition(); } if (surfaceDefinition.EnsureSize((int)SurfaceSides.TotalSides)) { var defaultRenderMaterial = ChiselMaterialManager.DefaultWallMaterial; var defaultPhysicsMaterial = ChiselMaterialManager.DefaultPhysicsMaterial; surfaceDefinition.surfaces[(int)SurfaceSides.Top].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultFloorMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Bottom].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultFloorMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Left].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Right].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Front].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Back].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Tread].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultTreadMaterial, defaultPhysicsMaterial); surfaceDefinition.surfaces[(int)SurfaceSides.Step].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultStepMaterial, defaultPhysicsMaterial); for (int i = 0; i < surfaceDefinition.surfaces.Length; i++) { if (surfaceDefinition.surfaces[i].brushMaterial == null) { surfaceDefinition.surfaces[i].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultRenderMaterial, defaultPhysicsMaterial); } } } stepHeight = Mathf.Max(kMinStepHeight, stepHeight); stepDepth = Mathf.Clamp(stepDepth, kMinStepDepth, absDepth); treadHeight = Mathf.Max(0, treadHeight); nosingDepth = Mathf.Max(0, nosingDepth); nosingWidth = Mathf.Max(0, nosingWidth); width = Mathf.Max(kMinWidth, absWidth) * (width < 0 ? -1 : 1); depth = Mathf.Max(stepDepth, absDepth) * (depth < 0 ? -1 : 1); riserDepth = Mathf.Max(kMinRiserDepth, riserDepth); sideDepth = Mathf.Max(0, sideDepth); sideWidth = Mathf.Max(kMinSideWidth, sideWidth); sideHeight = Mathf.Max(0, sideHeight); var realHeight = Mathf.Max(stepHeight, absHeight); var maxPlateauHeight = realHeight - stepHeight; plateauHeight = Mathf.Clamp(plateauHeight, 0, maxPlateauHeight); var totalSteps = Mathf.Max(1, Mathf.FloorToInt((realHeight - plateauHeight + kStepSmudgeValue) / stepHeight)); var totalStepHeight = totalSteps * stepHeight; plateauHeight = Mathf.Max(0, realHeight - totalStepHeight); stepDepth = Mathf.Clamp(stepDepth, kMinStepDepth, absDepth / totalSteps); }
public static void OnPhysicsMaterialChanged(ChiselBrushMaterial brushMaterial, PhysicMaterial prevValue, PhysicMaterial value) { if (!registeredLookup.Contains(brushMaterial) || (prevValue == value)) { return; } DecRefCount(prevValue); IncRefCount(value); OnBrushMaterialChanged?.Invoke(brushMaterial); }
public static void Register(ChiselBrushMaterial brushMaterial) { if (brushMaterial == null || !registeredLookup.Add(brushMaterial)) { return; } brushMaterialToRenderMaterialLookup [brushMaterial] = IncRefCount(brushMaterial.RenderMaterial); brushMaterialToPhysicsMaterialLookup[brushMaterial] = IncRefCount(brushMaterial.PhysicsMaterial); OnBrushMaterialAdded?.Invoke(brushMaterial); }
public void UpdateSurfaces(ref ChiselSurfaceDefinition surfaceDefinition) { UnityEngine.Material defaultFloorMaterial = null; UnityEngine.Material defaultWallMaterial = null; UnityEngine.PhysicMaterial defaultPhysicsMaterial = null; var surfaces = surfaceDefinition.surfaces; if (surfaces[(int)SurfaceSides.Top].brushMaterial == null) { surfaces[(int)SurfaceSides.Top].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultFloorMaterial ??= ChiselMaterialManager.DefaultFloorMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Bottom].brushMaterial == null) { surfaces[(int)SurfaceSides.Bottom].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultFloorMaterial ??= ChiselMaterialManager.DefaultFloorMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Left].brushMaterial == null) { surfaces[(int)SurfaceSides.Left].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultWallMaterial ??= ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Right].brushMaterial == null) { surfaces[(int)SurfaceSides.Right].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultWallMaterial ??= ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Front].brushMaterial == null) { surfaces[(int)SurfaceSides.Front].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultWallMaterial ??= ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Back].brushMaterial == null) { surfaces[(int)SurfaceSides.Back].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultWallMaterial ??= ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Tread].brushMaterial == null) { surfaces[(int)SurfaceSides.Tread].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultTreadMaterial, defaultPhysicsMaterial); } if (surfaces[(int)SurfaceSides.Step].brushMaterial == null) { surfaces[(int)SurfaceSides.Step].brushMaterial = ChiselBrushMaterial.CreateInstance(ChiselMaterialManager.DefaultStepMaterial, defaultPhysicsMaterial); } for (int i = 0; i < surfaceDefinition.surfaces.Length; i++) { if (surfaceDefinition.surfaces[i].brushMaterial == null) { surfaceDefinition.surfaces[i].brushMaterial = ChiselBrushMaterial.CreateInstance(defaultWallMaterial ??= ChiselMaterialManager.DefaultWallMaterial, defaultPhysicsMaterial ??= ChiselMaterialManager.DefaultPhysicsMaterial); } } }
public static void Unregister(ChiselBrushMaterial brushMaterial) { if (!registeredLookup.Remove(brushMaterial)) { return; } brushMaterialToRenderMaterialLookup.Remove(brushMaterial); brushMaterialToPhysicsMaterialLookup.Remove(brushMaterial); DecRefCount(brushMaterial.RenderMaterial); DecRefCount(brushMaterial.PhysicsMaterial); OnBrushMaterialRemoved?.Invoke(brushMaterial); }
public static void NotifyContentsModified(ChiselBrushMaterial brushMaterial) { if (brushMaterial == null || !registeredLookup.Contains(brushMaterial)) { return; } RenderMaterialInstance renderMaterialInstance; if (brushMaterialToRenderMaterialLookup.TryGetValue(brushMaterial, out renderMaterialInstance)) { if ((renderMaterialInstance == null && brushMaterial.RenderMaterial) || (renderMaterialInstance != null && renderMaterialInstance.renderMaterial != brushMaterial.RenderMaterial)) { if (renderMaterialInstance != null) { DecRefCount(renderMaterialInstance.renderMaterial); } brushMaterialToRenderMaterialLookup[brushMaterial] = IncRefCount(brushMaterial.RenderMaterial); } } PhysicsMaterialInstance physicsMaterialInstance; if (brushMaterialToPhysicsMaterialLookup.TryGetValue(brushMaterial, out physicsMaterialInstance)) { if ((physicsMaterialInstance == null && brushMaterial.PhysicsMaterial) || (physicsMaterialInstance != null && physicsMaterialInstance.physicsMaterial != brushMaterial.PhysicsMaterial)) { if (physicsMaterialInstance != null) { DecRefCount(physicsMaterialInstance.physicsMaterial); } brushMaterialToPhysicsMaterialLookup[brushMaterial] = IncRefCount(brushMaterial.PhysicsMaterial); } } OnBrushMaterialChanged?.Invoke(brushMaterial); }
public static ChiselBrushMaterial CreateInstance(ChiselBrushMaterial other) { return(CreateInstance(other.renderMaterial, other.physicsMaterial, other.layerUsage)); }