/// <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); }
/// <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); }
/// <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; }
/// <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; }