Example #1
0
        /// <inheritdoc />
        public override void Pick()
        {
            // Ensure player is not moving objects
            if (ActiveAxis != Axis.None)
            {
                return;
            }

            // Get mouse ray and try to hit foliage instance
            var foliage = GizmoMode.SelectedFoliage;

            if (!foliage)
            {
                return;
            }
            var ray = Owner.MouseRay;

            FoliageTools.Intersects(foliage, ray, out _, out _, out var instanceIndex);

            // Change the selection (with undo)
            if (GizmoMode.SelectedInstanceIndex == instanceIndex)
            {
                return;
            }
            var action = new EditSelectedInstanceIndexAction(GizmoMode.SelectedInstanceIndex, instanceIndex);

            action.Do();
            Owner.Undo?.AddAction(action);
        }
Example #2
0
        /// <summary>
        /// Called to update foliage painting logic.
        /// </summary>
        /// <param name="dt">The delta time (in seconds).</param>
        private void PaintUpdate(float dt)
        {
            // Skip if is not painting
            if (!IsPainting)
            {
                return;
            }

            // Edit the foliage
            var foliage                    = SelectedFoliage;
            int foliageTypesCount          = foliage.FoliageTypesCount;
            var foliageTypeModelIdsToPaint = Editor.Instance.Windows.ToolboxWin.Foliage.FoliageTypeModelIdsToPaint;

            if (_foliageTypesIndices == null)
            {
                _foliageTypesIndices = new List <int>(foliageTypesCount);
            }
            else
            {
                _foliageTypesIndices.Clear();
            }
            for (int index = 0; index < foliageTypesCount; index++)
            {
                var model = foliage.GetFoliageType(index).Model;
                if (model && (!foliageTypeModelIdsToPaint.TryGetValue(model.ID, out var selected) || selected))
                {
                    _foliageTypesIndices.Add(index);
                }
            }
            // TODO: don't call _foliageTypesIndices.ToArray() but reuse allocation
            FoliageTools.Paint(foliage, _foliageTypesIndices.ToArray(), Mode.CursorPosition, Mode.CurrentBrush.Size * 0.5f, !Owner.IsControlDown);
        }
Example #3
0
        /// <inheritdoc />
        public override void Pick()
        {
            // Get mouse ray and try to hit foliage instance
            var foliage = Mode.SelectedFoliage;

            if (!foliage)
            {
                return;
            }
            var ray = Owner.MouseRay;

            FoliageTools.Intersects(foliage, ray, out _, out _, out var instanceIndex);
            Mode.SelectedInstanceIndex = instanceIndex;
        }
Example #4
0
        /// <inheritdoc />
        public override void Pick()
        {
            // Ensure player is not moving objects
            if (ActiveAxis != Axis.None)
            {
                return;
            }

            // Get mouse ray and try to hit foliage instance
            var foliage = GizmoMode.SelectedFoliage;

            if (!foliage)
            {
                return;
            }
            var ray = Owner.MouseRay;

            FoliageTools.Intersects(foliage, ray, out _, out _, out var instanceIndex);
            GizmoMode.SelectedInstanceIndex = instanceIndex;
        }