private void Paint_Internal(PaintEntry entry, bool isTemporary) { Assert.ArgumentNotNull(entry, nameof(entry)); var material = entry.brushSnapshot.material; var go = new GameObject("PaintEntry"); var renderer = go.AddComponent <MeshRenderer> (); renderer.material = material; renderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; renderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; renderer.receiveShadows = false; renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; renderer.allowOcclusionWhenDynamic = false; var meshFilter = go.AddComponent <MeshFilter> (); meshFilter.mesh = entry.Mesh; var objectWidth = entry.BrushPositions.Count * distanceBetweenBrushes; if (isTemporary) { rendererStation.UseItTemporary(go, objectWidth); var chunksToRender = CalculateChunksToRender(entry.brushSnapshot.percentageSize, entry.BrushPositions); var renderContext = CalculateRenderContext(chunksToRender); NotifyNeedRender(renderContext); entry.BrushPositionAdded += l => { meshFilter.mesh = entry.Mesh; var newChunksToRender = CalculateChunksToRender(entry.brushSnapshot.percentageSize, l); var newRenderContext = CalculateRenderContext(newChunksToRender); NotifyNeedRender(newRenderContext); }; } else { var chunksToRender = CalculateChunksToRender(entry.brushSnapshot.percentageSize, entry.BrushPositions); var renderContext = CalculateRenderContext(chunksToRender); var command = new PaintCommand(rendererStation, go, objectWidth, () => NotifyNeedRender(renderContext)); undoRedoManager.Do(command); } }
public void PaintFinal(PaintEntry entry) => Paint_Internal(entry, false);
public void PaintTemporary(PaintEntry entry) => Paint_Internal(entry, true);