Exemplo n.º 1
0
        /// <inheritdoc/>
        public override void OnDrawGizmos(TileSystem system)
        {
            // We need to populate properties of `IBrushContext` for preview generation.
            var brush = (PreviousToolEvent != null && PreviousToolEvent.IsRightButtonPressed)
                ? ToolUtility.SelectedBrushSecondary
                : ToolUtility.SelectedBrush;

            if (!PlopUtility.CanPlopWithBrush(brush))
            {
                return;
            }

            // Do not draw immediate preview when mouse is positioned over a plop
            // unless overpainting is permitted.
            if (!this.allowOverpaint && ToolUtility.ActivePlop != null)
            {
                return;
            }

            // Offset preview against mouse position.
            Vector3 placementPoint = PlopUtility.PositionFromPlopPoint(system, this.ApplySnapping(this.localMousePoint));

            ImmediatePreviewUtility.Matrix = system.transform.localToWorldMatrix * MathUtility.TranslationMatrix(placementPoint);

            this._fakeContext.TileSystem = system;
            this._fakeContext.Brush      = brush;

            // Pretend to paint tile so that we can see its data beforehand!
            var previewTile = ImmediatePreviewUtility.GetPreviewTileData(this._fakeContext, brush, ToolUtility.Rotation);

            // Plop tool does not support orientations.
            previewTile.orientationMask = 0;

            var args = GetPaintingArgs(brush);

            if (args.variation == Brush.RANDOM_VARIATION)
            {
                args.variation = this.PreRandomizeVariation(brush, 0);
            }
            previewTile.variationIndex = (byte)args.ResolveVariation(0);

            brush.OnDrawImmediatePreview(this._fakeContext, previewTile, ImmediatePreviewUtility.PreviewMaterial, brush);
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public override void OnDrawGizmos(TileSystem system)
        {
            var brush = (PreviousToolEvent != null && PreviousToolEvent.IsRightButtonPressed)
                ? ToolUtility.SelectedBrushSecondary
                : ToolUtility.SelectedBrush;

            if (brush == null)
            {
                return;
            }

            // Do not draw immediate preview when larger radius is selected.
            if (this.NozzleSize > 1)
            {
                return;
            }

            // Only draw immediate preview when not disabled on per-brush basis.
            if (!brush.disableImmediatePreview)
            {
                // Preview is forced when see-through material is used.
                bool force = ImmediatePreviewUtility.IsSeeThroughPreviewMaterial;

                // Only display immediate preview if it differs from actual tile.
                var existingTile = ToolUtility.ActiveTile;
                if (existingTile == null || existingTile.brush != brush || existingTile.PaintedRotation != ToolUtility.Rotation || force)
                {
                    var context     = Brush.GetSharedContext(brush, system, ToolUtility.ActiveTileIndex);
                    var previewTile = ImmediatePreviewUtility.GetPreviewTileData(context, brush, ToolUtility.Rotation);

                    var args = this.GetPaintingArgs(brush);
                    if (args.variation == Brush.RANDOM_VARIATION)
                    {
                        args.variation = this.PreRandomizeVariation(brush, previewTile.orientationMask);
                    }
                    previewTile.variationIndex = (byte)args.ResolveVariation(previewTile.orientationMask);

                    ImmediatePreviewUtility.Matrix = system.transform.localToWorldMatrix;
                    brush.OnDrawImmediatePreview(context, previewTile, ImmediatePreviewUtility.PreviewMaterial, brush);
                }
            }
        }