Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 public void PaintFinal(PaintEntry entry) => Paint_Internal(entry, false);
Beispiel #3
0
 public void PaintTemporary(PaintEntry entry) => Paint_Internal(entry, true);