Skip to content

Commit 5d8b73f

Browse files
(v2) Scene editor: better tile sprite position tool.
1 parent 31190dc commit 5d8b73f

File tree

2 files changed

+40
-25
lines changed

2 files changed

+40
-25
lines changed

source/v2/phasereditor/phasereditor.scene.ui/src/phasereditor/scene/ui/editor/SceneCanvas.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,7 +1112,6 @@ public void mouseMove(MouseEvent e) {
11121112
for (var elem : _interactiveElements) {
11131113
if (elem.contains(e.x, e.y)) {
11141114
contains = true;
1115-
break;
11161115
}
11171116
}
11181117

@@ -1122,14 +1121,17 @@ public void mouseMove(MouseEvent e) {
11221121
elem.mouseMove(e);
11231122
}
11241123

1125-
redraw();
11261124
} else {
11271125

11281126
if (_dragObjectsEvents.isDragging()) {
11291127
_dragObjectsEvents.update(e);
11301128
}
11311129

11321130
}
1131+
1132+
if (!_interactiveElements.isEmpty()) {
1133+
redraw();
1134+
}
11331135
}
11341136

11351137
private boolean _dragDetected;

source/v2/phasereditor/phasereditor.scene.ui/src/phasereditor/scene/ui/editor/interactive/TilePositionElement.java

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525

2626
import org.eclipse.swt.SWT;
2727
import org.eclipse.swt.events.MouseEvent;
28+
import org.eclipse.swt.graphics.Color;
2829
import org.eclipse.swt.graphics.GC;
2930
import org.eclipse.swt.graphics.Transform;
3031
import org.eclipse.wb.swt.SWTResourceManager;
3132

3233
import phasereditor.scene.core.ObjectModel;
3334
import phasereditor.scene.core.TileSpriteComponent;
3435
import phasereditor.scene.ui.editor.SceneEditor;
36+
import phasereditor.ui.PhaserEditorUI;
3537

3638
/**
3739
* @author arian
@@ -40,6 +42,7 @@
4042
@SuppressWarnings("boxing")
4143
public class TilePositionElement extends RenderInteractiveElement {
4244

45+
private static final int BOX = 14;
4346
private static final int ARROW_LENGTH = 80;
4447
private int _globalX;
4548
private int _globalY;
@@ -48,6 +51,7 @@ public class TilePositionElement extends RenderInteractiveElement {
4851
private int _initialGlobalX;
4952
private boolean _changeX;
5053
private boolean _changeY;
54+
private boolean _hightlights;
5155

5256
public TilePositionElement(SceneEditor editor, List<ObjectModel> models, boolean changeX, boolean changeY) {
5357
super(editor, models);
@@ -114,46 +118,59 @@ public void render(GC gc) {
114118
globalAngle = globalAngle / size;
115119

116120
if (_changeX && _changeY) {
117-
gc.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
118-
119-
fillRect(gc, globalX, _globalY, globalAngle, 12);
120-
121-
gc.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
122-
fillRect(gc, globalX, _globalY, globalAngle, 10);
123-
121+
fillRect(gc, globalX, _globalY, globalAngle, BOX,
122+
SWTResourceManager.getColor(_hightlights ? SWT.COLOR_WHITE : SWT.COLOR_YELLOW));
124123
} else {
125124
gc.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
126125
gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
127126

128-
fillRect(gc, globalX, _globalY, globalAngle, 12);
129-
130-
gc.setLineWidth(3);
131-
gc.drawLine(centerGlobalX, centerGlobalY, globalX, globalY);
132-
gc.setLineWidth(1);
133-
134-
var color = SWTResourceManager.getColor(_changeX ? SWT.COLOR_RED : SWT.COLOR_GREEN);
127+
var color = SWTResourceManager
128+
.getColor(_hightlights ? SWT.COLOR_WHITE : (_changeX ? SWT.COLOR_RED : SWT.COLOR_GREEN));
135129

136130
gc.setBackground(color);
137131
gc.setForeground(color);
138132

139133
gc.drawLine(centerGlobalX, centerGlobalY, globalX, globalY);
140134

141-
fillRect(gc, globalX, globalY, globalAngle, 10);
135+
fillArrow(gc, globalX, globalY, globalAngle + (_changeY ? 90 : 0), BOX, color);
142136
}
143137

144138
_globalX = globalX;
145139
_globalY = globalY;
146140

147141
}
148142

149-
private static void fillRect(GC gc, int globalX, int globalY, float globalAngle, int size) {
143+
private static void fillArrow(GC gc, int globalX, int globalY, float globalAngle, int size, Color color) {
150144
var tx = new Transform(gc.getDevice());
151145

152146
tx.translate(globalX, globalY);
153147
tx.rotate(globalAngle);
148+
tx.translate(0, -size / 2);
154149
gc.setTransform(tx);
155150

151+
gc.setBackground(color);
152+
gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
153+
154+
gc.fillPolygon(new int[] { 0, 0, size, size / 2, 0, size });
155+
gc.drawPolygon(new int[] { 0, 0, size, size / 2, 0, size });
156+
157+
gc.setTransform(null);
158+
159+
tx.dispose();
160+
}
161+
162+
private static void fillRect(GC gc, int globalX, int globalY, float globalAngle, int size, Color color) {
163+
var tx = new Transform(gc.getDevice());
164+
165+
tx.translate(globalX, globalY);
166+
tx.rotate(globalAngle);
167+
gc.setTransform(tx);
168+
169+
gc.setBackground(color);
170+
gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
171+
156172
gc.fillRectangle(-size / 2, -size / 2, size, size);
173+
gc.drawRectangle(-size / 2, -size / 2, size, size);
157174

158175
gc.setTransform(null);
159176

@@ -167,15 +184,11 @@ public boolean contains(int sceneX, int sceneY) {
167184
return true;
168185
}
169186

170-
boolean b = _globalX - 5 <= sceneX
171-
172-
&& _globalX + 5 >= sceneX
173-
174-
&& _globalY - 5 <= sceneY
187+
var contains = PhaserEditorUI.distance(sceneX, sceneY, _globalX, _globalY) <= BOX;
175188

176-
&& _globalY + 5 >= sceneY;
189+
_hightlights = contains;
177190

178-
return b;
191+
return contains;
179192
}
180193

181194
@Override

0 commit comments

Comments
 (0)