Skip to content

Commit 22aa6fa

Browse files
committed
rubbers: Add scale support.
1 parent a0ec780 commit 22aa6fa

File tree

5 files changed

+49
-1
lines changed

5 files changed

+49
-1
lines changed

VisualPinball.Unity/VisualPinball.Unity.Editor/VPT/TransformInspector.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,9 @@ private void HandleMoveTool()
277277
private void HandleScaleTool()
278278
{
279279
var e = Event.current;
280-
if (e.type == EventType.MouseDown || e.type == EventType.MouseUp) {
280+
var startScaling = e.type == EventType.MouseDown;
281+
var endScaling = e.type == EventType.MouseUp;
282+
if (startScaling || endScaling) {
281283
_scaleFactor = _primaryItem.GetEditorScale().x;
282284
}
283285

@@ -290,6 +292,14 @@ private void HandleScaleTool()
290292
}
291293
var handleRot = _transform.rotation;
292294
var handleScale = HandleUtility.GetHandleSize(handlePos);
295+
296+
if (startScaling) {
297+
_primaryItem.EditorStartScaling();
298+
}
299+
if (endScaling) {
300+
_primaryItem.EditorEndScaling();
301+
}
302+
293303
switch (_primaryItem.EditorScaleType) {
294304

295305
case ItemDataTransformType.OneD: {

VisualPinball.Unity/VisualPinball.Unity/VPT/IMainRenderableComponent.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public interface IMainRenderableComponent : IMainComponent
5858
Entity Entity { get; set; }
5959
Vector3 GetEditorScale();
6060
void SetEditorScale(Vector3 pos);
61+
void EditorStartScaling();
62+
void EditorEndScaling();
6163
}
6264

6365
public enum ItemDataTransformType

VisualPinball.Unity/VisualPinball.Unity/VPT/MainRenderableComponent.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ public virtual void SetEditorRotation(Vector3 rot) { }
164164
public virtual ItemDataTransformType EditorScaleType => ItemDataTransformType.None;
165165
public virtual Vector3 GetEditorScale() => Vector3.zero;
166166
public virtual void SetEditorScale(Vector3 rot) { }
167+
public virtual void EditorStartScaling() {}
168+
public virtual void EditorEndScaling() {}
167169

168170
#endregion
169171
}

VisualPinball.Unity/VisualPinball.Unity/VPT/Rubber/RubberComponent.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
using System;
2525
using System.Collections.Generic;
26+
using System.Linq;
2627
using Unity.Entities;
2728
using UnityEngine;
2829
using VisualPinball.Engine.Math;
@@ -51,6 +52,12 @@ public class RubberComponent : MainRenderableComponent<RubberData>,
5152
[SerializeField]
5253
private DragPointData[] _dragPoints;
5354

55+
[NonSerialized]
56+
private float _scale = 1f;
57+
58+
[NonSerialized]
59+
private Vertex3D[] _scalingDragPoints;
60+
5461
#endregion
5562

5663
#region IRubberData
@@ -219,6 +226,31 @@ public override void SetEditorRotation(Vector3 rot) {
219226
RebuildMeshes();
220227
}
221228

229+
public override void EditorStartScaling()
230+
{
231+
_scalingDragPoints = _dragPoints.Select(dp => dp.Center).ToArray();
232+
_scale = 1f;
233+
}
234+
235+
public override void EditorEndScaling()
236+
{
237+
_scalingDragPoints = null;
238+
}
239+
240+
public override ItemDataTransformType EditorScaleType => ItemDataTransformType.OneD;
241+
public override Vector3 GetEditorScale() => new(_scale, 1f, 1f);
242+
public override void SetEditorScale(Vector3 vScale)
243+
{
244+
var scale = 1 + (vScale.x - 1) / 5f;
245+
_scale = scale;
246+
var center = DragPointCenter.ToVertex3D();
247+
for (var i = 0; i < _dragPoints.Length; i++) {
248+
_dragPoints[i].Center = center + scale * (_scalingDragPoints[i] - center);
249+
}
250+
251+
RebuildMeshes();
252+
}
253+
222254
#endregion
223255
}
224256
}

VisualPinball.Unity/VisualPinball.Unity/VPT/Surface/SlingshotComponent.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ public void SetEditorRotation(Vector3 pos) { }
256256
public ItemDataTransformType EditorScaleType => ItemDataTransformType.None;
257257
public Vector3 GetEditorScale() => Vector3.one;
258258
public void SetEditorScale(Vector3 pos) { }
259+
public void EditorStartScaling() { }
260+
public void EditorEndScaling() { }
259261

260262
#endregion
261263

0 commit comments

Comments
 (0)