Skip to content

Commit 4b4cc45

Browse files
committed
Terrain rendering + fixes
1 parent b097f62 commit 4b4cc45

35 files changed

+1296
-221
lines changed

WooGLE.jar

34.7 MB
Binary file not shown.

pom.xml

Lines changed: 565 additions & 0 deletions
Large diffs are not rendered by default.

src/main/java/com/woogleFX/editorObjects/EditorObject.java

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.woogleFX.editorObjects;
22

3-
import java.io.IOException;
43
import java.io.InputStream;
54
import java.util.*;
65

@@ -64,18 +63,51 @@ public final void setVersion(GameVersion version) {
6463
}
6564

6665

66+
private static final Map<Class<? extends EditorObject>, AttributeManifest> attributeManifestMap = new HashMap<>();
67+
68+
6769
public EditorObject(EditorObject parent, String type, GameVersion version) {
6870
this.parent = parent;
6971
this.type = type;
7072
this.version = version;
7173

7274
try {
73-
String attributeManifestPath = "/" + getClass().getName().replace('.', '/') + ".xml";
74-
InputStream inputStream = getClass().getResourceAsStream(attributeManifestPath);
75-
AttributeManifest attributeManifest = new XmlMapper().readValue(inputStream, AttributeManifest.class);
76-
setAttributes(attributeManifest.getAttributes());
77-
for (EditorAttribute attribute : attributes) attribute.setObject(this);
78-
setMetaAttributes(new ArrayList<>(List.of(attributeManifest.getMetaAttributes())));
75+
AttributeManifest attributeManifest;
76+
if (attributeManifestMap.containsKey(getClass())) {
77+
attributeManifest = attributeManifestMap.get(getClass());
78+
} else {
79+
String attributeManifestPath = "/" + getClass().getName().replace('.', '/') + ".xml";
80+
InputStream inputStream = getClass().getResourceAsStream(attributeManifestPath);
81+
attributeManifest = new XmlMapper().readValue(inputStream, AttributeManifest.class);
82+
attributeManifestMap.put(getClass(), attributeManifest);
83+
}
84+
ArrayList<EditorAttribute> attributes1 = new ArrayList<>();
85+
for (EditorAttribute editorAttribute : attributeManifest.getAttributes()) {
86+
EditorAttribute realAttribute = new EditorAttribute();
87+
realAttribute.setDefaultValue(editorAttribute.getDefaultValue());
88+
realAttribute.setObject(this);
89+
realAttribute.setChildAlias(editorAttribute.getChildAlias());
90+
realAttribute.setValue(editorAttribute.stringValue());
91+
realAttribute.setName(editorAttribute.getName());
92+
realAttribute.setType(editorAttribute.getType());
93+
realAttribute.setRequired(editorAttribute.getRequired());
94+
attributes1.add(realAttribute);
95+
}
96+
setAttributes(attributes1.toArray(new EditorAttribute[0]));
97+
for (MetaEditorAttribute metaEditorAttribute : attributeManifest.getMetaAttributes()) {
98+
MetaEditorAttribute mine = new MetaEditorAttribute();
99+
mine.setName(metaEditorAttribute.getName());
100+
mine.setOpenByDefault(metaEditorAttribute.getOpenByDefault());
101+
mine.setChildren(new ArrayList<>());
102+
for (MetaEditorAttribute child : metaEditorAttribute.getChildren()) {
103+
MetaEditorAttribute mine2 = new MetaEditorAttribute();
104+
mine2.setName(child.getName());
105+
mine2.setOpenByDefault(child.getOpenByDefault());
106+
mine2.setChildren(new ArrayList<>());
107+
mine.getChildren().add(mine2);
108+
}
109+
metaAttributes.add(mine);
110+
}
79111
} catch (Exception e) {
80112
if (this instanceof _2_Level_BallInstance)
81113
e.printStackTrace();
@@ -145,7 +177,8 @@ public final boolean attributeExists(String name) {
145177
}
146178
public final EditorAttribute getAttribute(String name) {
147179
if (attributeAdapters.containsKey(name)) return attributeAdapters.get(name).getValue();
148-
for (AttributeAdapter attributeAdapter : attributeAdapters.values().toArray(new AttributeAdapter[0])) if (attributeAdapter.name.equals(name))
180+
AttributeAdapter[] array = attributeAdapters.values().toArray(new AttributeAdapter[0]);
181+
for (AttributeAdapter attributeAdapter : array) if (attributeAdapter.name.equals(name))
149182
{
150183
return attributeAdapter.getValue();
151184
}

src/main/java/com/woogleFX/editorObjects/ObjectManager.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,15 @@ public static void create(_Level _level, EditorObject _object, int row) {
5858

5959
int i = switch (level.getCurrentlySelectedSection()) {
6060
case "Terrain" -> 0;
61-
case "Balls" -> 1;
62-
case "Items" -> 2;
63-
case "Pins" -> 3;
64-
case "Camera" -> 4;
65-
case "Addin" -> 5;
61+
case "Terrain Groups" -> 1;
62+
case "Balls" -> 2;
63+
case "Items" -> 3;
64+
case "Pins" -> 4;
65+
case "Camera" -> 5;
66+
case "Addin" -> 6;
6667
default -> -1;
6768
};
68-
FXHierarchy.getNewHierarchySwitcherButtons().getSelectionModel().select((i + 1) % 6);
69+
FXHierarchy.getNewHierarchySwitcherButtons().getSelectionModel().select((i + 1) % 7);
6970
FXHierarchy.getNewHierarchySwitcherButtons().getSelectionModel().select(i);
7071

7172
FXHierarchy.getHierarchy().getSelectionModel().clearSelection();
@@ -224,13 +225,13 @@ public static void delete(_Level level) {
224225

225226
EditorObject parent = selected.getParent();
226227

227-
int row = parent.getChildren().indexOf(selected);
228+
int row = parent.getTreeItem().getChildren().indexOf(selected.getTreeItem());
228229

229230
objectDestructionActions.add(new ObjectDestructionAction(selected, Math.max(row, 0)));
230231

231232
deleteItem(level, selected, false);
232233

233-
EditorObject parentObject = (row <= 0) ? parent : parent.getChildren().get(row - 1);
234+
EditorObject parentObject = (row <= 0) ? parent : parent.getTreeItem().getChildren().get(row - 1).getValue();
234235
if (Arrays.stream(level.getSelected()).noneMatch(e -> e == parentObject)) newSelectionBuilder.add(parentObject);
235236
}
236237

src/main/java/com/woogleFX/editorObjects/clipboardHandling/ClipboardManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,14 @@ public static void paste() {
5151
String clipboard = Clipboard.getSystemClipboard().getString();
5252
if (clipboard == null) return;
5353

54-
EditorObject[] selectedList = ClipboardHandler.importFromClipboardString(clipboard);
55-
if (selectedList == null) return;
54+
55+
EditorObject[] selectedList;
56+
try {
57+
selectedList = ClipboardHandler.importFromClipboardString(clipboard);
58+
if (selectedList == null) return;
59+
} catch (Exception e) {
60+
return;
61+
}
5662

5763
ArrayList<UserAction> objectCreationActions = new ArrayList<>();
5864

src/main/java/com/woogleFX/editorObjects/objectComponents/CircleComponent.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,16 @@ public void draw(GraphicsContext graphicsContext, boolean selected) {
4040
double screenX = (x - radius) * zoom + offsetX;
4141
double screenY = (y - radius) * zoom + offsetY;
4242

43-
graphicsContext.setFill(getColor());
44-
graphicsContext.setStroke(getColor());
45-
graphicsContext.fillOval(screenX + zoom / 2, screenY + zoom / 2,
46-
(radius - 0.5) * 2 * zoom, (radius - 0.5) * 2 * zoom);
43+
double woag = Math.min(getEdgeSize(), Math.abs(radius)) / 2;
4744

48-
graphicsContext.setStroke(getBorderColor());
4945

50-
double woag = Math.min(getEdgeSize(), Math.abs(radius)) / 2;
46+
graphicsContext.setLineWidth(radius * 100 * zoom);
47+
graphicsContext.setStroke(getColor());
48+
graphicsContext.strokeOval(screenX + zoom / 2, screenY + zoom / 2,
49+
(radius - 0.5) * 2 * zoom, (radius - 0.5) * 2 * zoom);
5150

5251
graphicsContext.setLineWidth(woag * 2 * zoom);
52+
graphicsContext.setStroke(getBorderColor());
5353
if (getEdgeSize() != 0)
5454
graphicsContext.strokeOval(screenX + woag * zoom, screenY + woag * zoom,
5555
(radius - woag) * 2 * zoom, (radius - woag) * 2 * zoom);
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.woogleFX.editorObjects.objectComponents;
2+
3+
import com.woogleFX.editorObjects.DragSettings;
4+
import com.woogleFX.engine.LevelManager;
5+
import javafx.scene.canvas.GraphicsContext;
6+
import javafx.scene.effect.BlendMode;
7+
import javafx.scene.image.Image;
8+
import javafx.scene.paint.ImagePattern;
9+
import javafx.scene.shape.Polygon;
10+
import javafx.scene.transform.Affine;
11+
12+
public abstract class MeshComponent extends ObjectComponent {
13+
14+
public abstract Polygon getPolygon();
15+
16+
public abstract Image getImage();
17+
18+
public abstract double getX();
19+
20+
public abstract double getY();
21+
22+
public abstract double getScaleX();
23+
24+
public abstract double getScaleY();
25+
26+
public abstract double getDepth();
27+
28+
@Override
29+
public void draw(GraphicsContext graphicsContext, boolean selected) {
30+
31+
Polygon polygon = getPolygon();
32+
33+
Image image = getImage();
34+
35+
double offsetX = LevelManager.getLevel().getOffsetX();
36+
double offsetY = LevelManager.getLevel().getOffsetY();
37+
double zoom = LevelManager.getLevel().getZoom();
38+
39+
graphicsContext.save();
40+
41+
Affine t = graphicsContext.getTransform();
42+
t.appendTranslation(offsetX, offsetY);
43+
t.appendScale(zoom, zoom);
44+
graphicsContext.setTransform(t);
45+
46+
graphicsContext.setFill(new ImagePattern(image, 0, 0, image.getWidth() * getScaleX(), image.getHeight() * getScaleY(), false));
47+
48+
double[] xPoints = new double[polygon.getPoints().size() / 2];
49+
double[] yPoints = new double[polygon.getPoints().size() / 2];
50+
for (int i = 0; i < polygon.getPoints().size() / 2; i++) {
51+
xPoints[i] = polygon.getPoints().get(i * 2);
52+
yPoints[i] = polygon.getPoints().get(i * 2 + 1);
53+
}
54+
55+
graphicsContext.fillPolygon(xPoints, yPoints, polygon.getPoints().size() / 2);
56+
57+
graphicsContext.restore();
58+
59+
}
60+
61+
@Override
62+
public DragSettings mouseIntersection(double mouseX, double mouseY) {
63+
return DragSettings.NULL;
64+
}
65+
66+
@Override
67+
public DragSettings mouseIntersectingCorners(double mouseX, double mouseY) {
68+
return DragSettings.NULL;
69+
}
70+
71+
}

src/main/java/com/woogleFX/editorObjects/objectComponents/TextComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void draw(GraphicsContext graphicsContext, boolean selected) {
6868

6969
if (font == null) {
7070

71-
graphicsContext.setFont(Font.font(0.5));
71+
graphicsContext.setFont(getOtherFont());
7272
graphicsContext.setFill(Color.WHITE);
7373
graphicsContext.setStroke(Color.BLACK);
7474
graphicsContext.setLineWidth(0.03);

src/main/java/com/woogleFX/editorObjects/objectCreators/ObjectAdder.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,14 +205,15 @@ public static EditorObject addObject2(Class<? extends EditorObject> name, String
205205

206206
int i = switch (level.getCurrentlySelectedSection()) {
207207
case "Terrain" -> 0;
208-
case "Balls" -> 1;
209-
case "Items" -> 2;
210-
case "Pins" -> 3;
211-
case "Camera" -> 4;
212-
case "Addin" -> 5;
208+
case "Terrain Groups" -> 1;
209+
case "Balls" -> 2;
210+
case "Items" -> 3;
211+
case "Pins" -> 4;
212+
case "Camera" -> 5;
213+
case "Addin" -> 6;
213214
default -> -1;
214215
};
215-
FXHierarchy.getNewHierarchySwitcherButtons().getSelectionModel().select((i + 1) % 6);
216+
FXHierarchy.getNewHierarchySwitcherButtons().getSelectionModel().select((i + 1) % 7);
216217
FXHierarchy.getNewHierarchySwitcherButtons().getSelectionModel().select(i);
217218

218219
FXHierarchy.getHierarchy().getSelectionModel().clearSelection();

src/main/java/com/woogleFX/editorObjects/objectCreators/ObjectCreator.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,6 @@ public static EditorObject create2(Class<? extends EditorObject> tClass, EditorO
165165

166166
if (parent != null) toAdd.setParent(parent);
167167

168-
// System.out.println(name);
169-
170168
return toAdd;
171169

172170
}

0 commit comments

Comments
 (0)