Skip to content

Commit 77a9e55

Browse files
committed
Highly experimental animation rendering
1 parent 6699adc commit 77a9e55

38 files changed

+968
-705
lines changed

WooGLE.jar

11.7 KB
Binary file not shown.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package com.woogleFX.editorObjects;
2+
3+
import com.woogleFX.engine.SelectionManager;
4+
import com.woogleFX.engine.fx.AssetTab;
5+
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
6+
import com.woogleFX.engine.undoHandling.userActions.UserAction;
7+
import com.woogleFX.gameData.level.GameVersion;
8+
import com.woogleFX.gameData.level.VisibilitySettings;
9+
10+
import java.util.Arrays;
11+
import java.util.Stack;
12+
13+
public abstract class Asset {
14+
15+
public final Stack<UserAction[]> redoActions = new Stack<>();
16+
public final Stack<UserAction[]> undoActions = new Stack<>();
17+
18+
19+
private double offsetX = 0;
20+
public double getOffsetX() {
21+
return offsetX;
22+
}
23+
public void setOffsetX(double offsetX) {
24+
this.offsetX = offsetX;
25+
}
26+
27+
28+
private double offsetY = 0;
29+
public double getOffsetY() {
30+
return offsetY;
31+
}
32+
public void setOffsetY(double offsetY) {
33+
this.offsetY = offsetY;
34+
}
35+
36+
37+
private double zoom = 1;
38+
public double getZoom() {
39+
return zoom;
40+
}
41+
public void setZoom(double zoom) {
42+
this.zoom = zoom;
43+
}
44+
45+
46+
private final VisibilitySettings visibilitySettings = new VisibilitySettings();
47+
public VisibilitySettings getVisibilitySettings() {
48+
return visibilitySettings;
49+
}
50+
51+
52+
private String levelName;
53+
public String getLevelName() {
54+
return levelName;
55+
}
56+
public void setLevelName(String levelName) {
57+
this.levelName = levelName;
58+
}
59+
60+
61+
private int editingStatus;
62+
public int getEditingStatus() {
63+
return editingStatus;
64+
}
65+
public void setEditingStatus(int editingStatus, boolean shouldSelect) {
66+
this.editingStatus = editingStatus;
67+
getAssetTab().update(editingStatus, shouldSelect);
68+
}
69+
70+
71+
private EditorObject[] selected = new EditorObject[]{};
72+
public EditorObject[] getSelected() {
73+
return selected;
74+
}
75+
public void setSelected(EditorObject[] selected) {
76+
this.selected = selected;
77+
SelectionManager.goToSelectedInHierarchy();
78+
}
79+
public void clearSelection() {
80+
selected = new EditorObject[]{};
81+
FXHierarchy.getHierarchy().getSelectionModel().clearSelection();
82+
}
83+
public boolean isSelected(EditorObject EditorObject) {
84+
return Arrays.stream(selected).anyMatch(e -> e == EditorObject);
85+
}
86+
87+
88+
private int lastSavedUndoPosition = 0;
89+
public int getLastSavedUndoPosition() {
90+
return lastSavedUndoPosition;
91+
}
92+
public void setLastSavedUndoPosition(int position) {
93+
this.lastSavedUndoPosition = position;
94+
}
95+
96+
private AssetTab assetTab;
97+
public AssetTab getAssetTab() {
98+
return assetTab;
99+
}
100+
public void setAssetTab(AssetTab assetTab) {
101+
this.assetTab = assetTab;
102+
}
103+
104+
105+
private final GameVersion version;
106+
public GameVersion getVersion() {
107+
return version;
108+
}
109+
110+
public Asset(GameVersion version) {
111+
this.version = version;
112+
}
113+
114+
115+
public abstract void resetCamera();
116+
117+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.woogleFX.editorObjects.objectComponents.generic.RotatableProperty;
55
import com.woogleFX.engine.fx.FXCanvas;
66
import com.woogleFX.engine.fx.FXContainers;
7-
import com.woogleFX.engine.fx.FXLevelSelectPane;
7+
import com.woogleFX.engine.fx.FXAssetSelectPane;
88
import com.woogleFX.engine.renderer.Renderer;
99
import com.woogleFX.engine.LevelManager;
1010
import com.woogleFX.editorObjects.DragSettings;
@@ -41,7 +41,7 @@ public void draw(GraphicsContext graphicsContext, boolean selected) {
4141

4242
SplitPane splitPane = FXContainers.getSplitPane();
4343
double WIDTH = splitPane.getDividerPositions()[0] * splitPane.getWidth() - 6;
44-
double HEIGHT = FXCanvas.getCanvas().getHeight() - FXLevelSelectPane.getLevelSelectPane().getHeight();
44+
double HEIGHT = FXCanvas.getCanvas().getHeight() - FXAssetSelectPane.getAssetSelectPane().getHeight();
4545

4646
Point2D top = new Point2D(screenX - screenY / Math.tan(rotation) - 4, 0);
4747
boolean topPossible = top.getX() >= 0 && top.getX() <= WIDTH;

src/main/java/com/woogleFX/engine/Initializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private static void initializeGUI() {
7070
FXContainers.init();
7171
FXEditorButtons.init();
7272
FXHierarchy.init();
73-
FXLevelSelectPane.init();
73+
FXAssetSelectPane.init();
7474
FXMenu.init();
7575
FXPropertiesView.init();
7676

src/main/java/com/woogleFX/gameData/level/LevelTab.java renamed to src/main/java/com/woogleFX/engine/fx/AssetTab.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
package com.woogleFX.gameData.level;
1+
package com.woogleFX.engine.fx;
22

3+
import com.woogleFX.editorObjects.Asset;
34
import com.woogleFX.editorObjects.EditorObject;
45
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
56
import com.woogleFX.file.FileManager;
7+
import com.woogleFX.gameData.level._Level;
68
import javafx.geometry.Pos;
79
import javafx.scene.control.Label;
810
import javafx.scene.control.Tab;
@@ -12,17 +14,17 @@
1214
import javafx.scene.layout.AnchorPane;
1315
import javafx.scene.layout.StackPane;
1416

15-
public class LevelTab extends Tab {
17+
public class AssetTab extends Tab {
1618

17-
private final _Level level;
18-
public _Level getLevel() {
19-
return level;
19+
private final Asset asset;
20+
public Asset getAsset() {
21+
return asset;
2022
}
2123

2224

23-
public LevelTab(String text, _Level level) {
25+
public AssetTab(String text, Asset asset) {
2426
super(text);
25-
this.level = level;
27+
this.asset = asset;
2628
}
2729

2830
public static final int NO_UNSAVED_CHANGES = 0;
@@ -47,19 +49,19 @@ public void update(int editingStatus, boolean shouldSelect) {
4749
Image currentStatusImage = null;
4850

4951
if (editingStatus == NO_UNSAVED_CHANGES) {
50-
currentStatusImage = switch (level.getVersion()) {
52+
currentStatusImage = switch (asset.getVersion()) {
5153
case VERSION_WOG1_OLD -> noChangesImageOld;
5254
case VERSION_WOG1_NEW -> noChangesImageNew;
5355
default -> noChangesImage2;
5456
};
5557
} else if (editingStatus == UNSAVED_CHANGES) {
56-
currentStatusImage = switch (level.getVersion()) {
58+
currentStatusImage = switch (asset.getVersion()) {
5759
case VERSION_WOG1_OLD -> changesImageOld;
5860
case VERSION_WOG1_NEW -> changesImageNew;
5961
default -> changesImage2;
6062
};
6163
} else if (editingStatus == UNSAVED_CHANGES_UNMODIFIABLE) {
62-
currentStatusImage = switch (level.getVersion()) {
64+
currentStatusImage = switch (asset.getVersion()) {
6365
case VERSION_WOG1_OLD -> changesUnmodifiableImageOld;
6466
case VERSION_WOG1_NEW -> changesUnmodifiableImageNew;
6567
default -> changesUnmodifiableImage2;
@@ -75,7 +77,7 @@ public void update(int editingStatus, boolean shouldSelect) {
7577
StackPane graphicContainer = new StackPane();
7678
graphicContainer.prefWidthProperty().bind(getTabPane().tabMaxWidthProperty());
7779
StackPane.setAlignment(pane, Pos.CENTER_LEFT);
78-
graphicContainer.getChildren().addAll(pane, new Label(level.getLevelName()));
80+
graphicContainer.getChildren().addAll(pane, new Label(asset.getLevelName()));
7981
setGraphic(graphicContainer);
8082
if (shouldSelect) {
8183
getTabPane().getSelectionModel().select(this);

src/main/java/com/woogleFX/engine/fx/FXLevelSelectPane.java renamed to src/main/java/com/woogleFX/engine/fx/FXAssetSelectPane.java

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,37 @@
44
import com.woogleFX.engine.LevelManager;
55
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
66
import com.woogleFX.engine.gui.alarms.CloseTabAlarm;
7-
import com.woogleFX.gameData.level.LevelTab;
87
import com.woogleFX.gameData.level.WOG1Level;
98
import com.woogleFX.gameData.level.WOG2Level;
109
import com.woogleFX.gameData.level._Level;
1110
import javafx.scene.control.TabPane;
1211

13-
public class FXLevelSelectPane {
12+
public class FXAssetSelectPane {
1413

15-
private static final TabPane levelSelectPane = new TabPane();
16-
public static TabPane getLevelSelectPane() {
17-
return levelSelectPane;
14+
private static final TabPane assetSelectPane = new TabPane();
15+
public static TabPane getAssetSelectPane() {
16+
return assetSelectPane;
1817
}
1918

2019

21-
public static LevelTab levelSelectButton(_Level level) {
20+
public static AssetTab levelSelectButton(_Level level) {
2221

2322
// Instantiate the tab.
24-
LevelTab tab = new LevelTab(level.getLevelName(), level);
23+
AssetTab tab = new AssetTab(level.getLevelName(), level);
2524

2625
// Override the default close operation of the tab.
2726
tab.setOnCloseRequest(event -> {
2827
event.consume();
2928
// If the level has unsaved changes:
30-
if (level.getEditingStatus() == LevelTab.UNSAVED_CHANGES) {
29+
if (level.getEditingStatus() == AssetTab.UNSAVED_CHANGES) {
3130
// Show a dialogue asking the user if they want to close the level without
3231
// saving changes first.
3332
CloseTabAlarm.show(tab, level);
3433
} else {
3534
// Close the tab.
3635
if (tab.getTabPane().getTabs().size() == 1) {
37-
FXLevelSelectPane.getLevelSelectPane().setMinHeight(0);
38-
FXLevelSelectPane.getLevelSelectPane().setMaxHeight(0);
36+
FXAssetSelectPane.getAssetSelectPane().setMinHeight(0);
37+
FXAssetSelectPane.getAssetSelectPane().setMaxHeight(0);
3938
// If all tabs are closed, clear the side pane
4039
FXHierarchy.getHierarchy().setRoot(null);
4140
// Clear the properties pane too
@@ -94,9 +93,9 @@ public static LevelTab levelSelectButton(_Level level) {
9493

9594
} else {
9695
// Destroy and replace the level tab to prevent an unknown freezing issue.
97-
if (level.getLevelTab() != null && level.getLevelTab().getTabPane() != null
98-
&& level.getLevelTab().getTabPane().getTabs().contains(level.getLevelTab())
99-
&& !level.getLevelTab().getTabPane().getTabs().isEmpty()) {
96+
if (level.getAssetTab() != null && level.getAssetTab().getTabPane() != null
97+
&& level.getAssetTab().getTabPane().getTabs().contains(level.getAssetTab())
98+
&& !level.getAssetTab().getTabPane().getTabs().isEmpty()) {
10099
level.setEditingStatus(level.getEditingStatus(), false);
101100
}
102101

@@ -109,7 +108,7 @@ public static LevelTab levelSelectButton(_Level level) {
109108

110109
public static void init() {
111110

112-
levelSelectPane.getSelectionModel().selectedItemProperty().addListener((observableValue, tab, t1) -> {
111+
assetSelectPane.getSelectionModel().selectedItemProperty().addListener((observableValue, tab, t1) -> {
113112
if (t1 == null) {
114113
LevelManager.setLevel(null);
115114
LevelManager.onSetLevel(null);
@@ -118,23 +117,23 @@ public static void init() {
118117
}
119118
});
120119

121-
levelSelectPane.widthProperty().addListener((observableValue, number, t1) -> {
122-
int numTabs = levelSelectPane.getTabs().size();
120+
assetSelectPane.widthProperty().addListener((observableValue, number, t1) -> {
121+
int numTabs = assetSelectPane.getTabs().size();
123122
double tabSize = 1 / (numTabs + 1.0);
124-
levelSelectPane.setTabMaxWidth(tabSize * (levelSelectPane.getWidth() - 15) - 15);
125-
levelSelectPane.setTabMinWidth(tabSize * (levelSelectPane.getWidth() - 15) - 15);
123+
assetSelectPane.setTabMaxWidth(tabSize * (assetSelectPane.getWidth() - 15) - 15);
124+
assetSelectPane.setTabMinWidth(tabSize * (assetSelectPane.getWidth() - 15) - 15);
126125
});
127126

128-
levelSelectPane.setMinHeight(0);
129-
levelSelectPane.setMaxHeight(0);
127+
assetSelectPane.setMinHeight(0);
128+
assetSelectPane.setMaxHeight(0);
130129

131-
levelSelectPane.setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS);
130+
assetSelectPane.setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS);
132131

133132
FXPropertiesView.getPropertiesView().prefHeightProperty()
134133
.bind(FXContainers.getViewPane().heightProperty().subtract(FXPropertiesView.getPropertiesView().layoutYProperty()));
135134

136-
levelSelectPane.setTabDragPolicy(TabPane.TabDragPolicy.REORDER);
137-
levelSelectPane.setStyle("-fx-open-tab-animation: NONE");
135+
assetSelectPane.setTabDragPolicy(TabPane.TabDragPolicy.REORDER);
136+
assetSelectPane.setStyle("-fx-open-tab-animation: NONE");
138137

139138
}
140139

src/main/java/com/woogleFX/engine/fx/FXCanvas.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public static Point2D getScreenCenter() {
1818
}
1919

2020
public static double getMouseYOffset() {
21-
return FXLevelSelectPane.getLevelSelectPane().getHeight() + FXContainers.getvBox().getChildren().get(4).getLayoutY();
21+
return FXAssetSelectPane.getAssetSelectPane().getHeight() + FXContainers.getvBox().getChildren().get(4).getLayoutY();
2222
}
2323

2424

src/main/java/com/woogleFX/engine/fx/FXContainers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static void init() {
6060
FXHierarchy.getHierarchy().setPrefHeight(height);
6161
});
6262

63-
splitPane.getItems().addAll(new VBox(FXLevelSelectPane.getLevelSelectPane(), pane), viewPane);
63+
splitPane.getItems().addAll(new VBox(FXAssetSelectPane.getAssetSelectPane(), pane), viewPane);
6464

6565
splitPane.getDividers().get(0).setPosition(0.7);
6666

src/main/java/com/woogleFX/engine/gui/alarms/CloseTabAlarm.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.woogleFX.engine.gui.alarms;
22

3+
import com.woogleFX.editorObjects.Asset;
34
import com.woogleFX.editorObjects.EditorObject;
45
import com.woogleFX.engine.LevelManager;
5-
import com.woogleFX.engine.fx.FXLevelSelectPane;
6+
import com.woogleFX.engine.fx.FXAssetSelectPane;
67
import com.woogleFX.engine.fx.FXPropertiesView;
78
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
89
import com.woogleFX.gameData.level.LevelCloser;
@@ -22,8 +23,8 @@ public static void show(Tab tab, _Level level) {
2223
alert.showAndWait().ifPresent(buttonType -> {
2324
if (buttonType.equals(ButtonType.OK)) {
2425
if (tab.getTabPane().getTabs().size() == 1) {
25-
FXLevelSelectPane.getLevelSelectPane().setMinHeight(0);
26-
FXLevelSelectPane.getLevelSelectPane().setMaxHeight(0);
26+
FXAssetSelectPane.getAssetSelectPane().setMinHeight(0);
27+
FXAssetSelectPane.getAssetSelectPane().setMaxHeight(0);
2728
FXHierarchy.getHierarchy().setRoot(null);
2829
FXPropertiesView.changeTableView(new EditorObject[]{});
2930
}
@@ -34,7 +35,7 @@ public static void show(Tab tab, _Level level) {
3435
});
3536
}
3637

37-
public static void showClosingEditor(Tab tab, _Level level) {
38+
public static void showClosingEditor(Tab tab, Asset asset) {
3839

3940
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
4041
alert.setHeaderText("Unsaved Changes");
@@ -43,8 +44,8 @@ public static void showClosingEditor(Tab tab, _Level level) {
4344
alert.showAndWait().ifPresent(buttonType -> {
4445
if (buttonType.equals(ButtonType.OK)) {
4546
if (tab.getTabPane().getTabs().size() == 1) {
46-
FXLevelSelectPane.getLevelSelectPane().setMinHeight(0);
47-
FXLevelSelectPane.getLevelSelectPane().setMaxHeight(0);
47+
FXAssetSelectPane.getAssetSelectPane().setMinHeight(0);
48+
FXAssetSelectPane.getAssetSelectPane().setMaxHeight(0);
4849
FXHierarchy.getHierarchy().setRoot(null);
4950
FXPropertiesView.changeTableView(new EditorObject[]{});
5051
}
@@ -53,7 +54,7 @@ public static void showClosingEditor(Tab tab, _Level level) {
5354
LevelCloser.resumeLevelClosing();
5455
});
5556
} else if (buttonType.equals(ButtonType.CANCEL)) {
56-
level.setEditingStatus(level.getEditingStatus(), level == LevelManager.getLevel());
57+
asset.setEditingStatus(asset.getEditingStatus(), asset == LevelManager.getLevel());
5758
}
5859
});
5960
}

0 commit comments

Comments
 (0)