Skip to content

Commit

Permalink
Highly experimental animation rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
Crazydiamonde committed Sep 9, 2024
1 parent 6699adc commit 77a9e55
Show file tree
Hide file tree
Showing 38 changed files with 968 additions and 705 deletions.
Binary file modified WooGLE.jar
Binary file not shown.
117 changes: 117 additions & 0 deletions src/main/java/com/woogleFX/editorObjects/Asset.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package com.woogleFX.editorObjects;

import com.woogleFX.engine.SelectionManager;
import com.woogleFX.engine.fx.AssetTab;
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
import com.woogleFX.engine.undoHandling.userActions.UserAction;
import com.woogleFX.gameData.level.GameVersion;
import com.woogleFX.gameData.level.VisibilitySettings;

import java.util.Arrays;
import java.util.Stack;

public abstract class Asset {

public final Stack<UserAction[]> redoActions = new Stack<>();
public final Stack<UserAction[]> undoActions = new Stack<>();


private double offsetX = 0;
public double getOffsetX() {
return offsetX;
}
public void setOffsetX(double offsetX) {
this.offsetX = offsetX;
}


private double offsetY = 0;
public double getOffsetY() {
return offsetY;
}
public void setOffsetY(double offsetY) {
this.offsetY = offsetY;
}


private double zoom = 1;
public double getZoom() {
return zoom;
}
public void setZoom(double zoom) {
this.zoom = zoom;
}


private final VisibilitySettings visibilitySettings = new VisibilitySettings();
public VisibilitySettings getVisibilitySettings() {
return visibilitySettings;
}


private String levelName;
public String getLevelName() {
return levelName;
}
public void setLevelName(String levelName) {
this.levelName = levelName;
}


private int editingStatus;
public int getEditingStatus() {
return editingStatus;
}
public void setEditingStatus(int editingStatus, boolean shouldSelect) {
this.editingStatus = editingStatus;
getAssetTab().update(editingStatus, shouldSelect);
}


private EditorObject[] selected = new EditorObject[]{};
public EditorObject[] getSelected() {
return selected;
}
public void setSelected(EditorObject[] selected) {
this.selected = selected;
SelectionManager.goToSelectedInHierarchy();
}
public void clearSelection() {
selected = new EditorObject[]{};
FXHierarchy.getHierarchy().getSelectionModel().clearSelection();
}
public boolean isSelected(EditorObject EditorObject) {
return Arrays.stream(selected).anyMatch(e -> e == EditorObject);
}


private int lastSavedUndoPosition = 0;
public int getLastSavedUndoPosition() {
return lastSavedUndoPosition;
}
public void setLastSavedUndoPosition(int position) {
this.lastSavedUndoPosition = position;
}

private AssetTab assetTab;
public AssetTab getAssetTab() {
return assetTab;
}
public void setAssetTab(AssetTab assetTab) {
this.assetTab = assetTab;
}


private final GameVersion version;
public GameVersion getVersion() {
return version;
}

public Asset(GameVersion version) {
this.version = version;
}


public abstract void resetCamera();

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.woogleFX.editorObjects.objectComponents.generic.RotatableProperty;
import com.woogleFX.engine.fx.FXCanvas;
import com.woogleFX.engine.fx.FXContainers;
import com.woogleFX.engine.fx.FXLevelSelectPane;
import com.woogleFX.engine.fx.FXAssetSelectPane;
import com.woogleFX.engine.renderer.Renderer;
import com.woogleFX.engine.LevelManager;
import com.woogleFX.editorObjects.DragSettings;
Expand Down Expand Up @@ -41,7 +41,7 @@ public void draw(GraphicsContext graphicsContext, boolean selected) {

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

Point2D top = new Point2D(screenX - screenY / Math.tan(rotation) - 4, 0);
boolean topPossible = top.getX() >= 0 && top.getX() <= WIDTH;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/woogleFX/engine/Initializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ private static void initializeGUI() {
FXContainers.init();
FXEditorButtons.init();
FXHierarchy.init();
FXLevelSelectPane.init();
FXAssetSelectPane.init();
FXMenu.init();
FXPropertiesView.init();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.woogleFX.gameData.level;
package com.woogleFX.engine.fx;

import com.woogleFX.editorObjects.Asset;
import com.woogleFX.editorObjects.EditorObject;
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
import com.woogleFX.file.FileManager;
import com.woogleFX.gameData.level._Level;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
Expand All @@ -12,17 +14,17 @@
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;

public class LevelTab extends Tab {
public class AssetTab extends Tab {

private final _Level level;
public _Level getLevel() {
return level;
private final Asset asset;
public Asset getAsset() {
return asset;
}


public LevelTab(String text, _Level level) {
public AssetTab(String text, Asset asset) {
super(text);
this.level = level;
this.asset = asset;
}

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

if (editingStatus == NO_UNSAVED_CHANGES) {
currentStatusImage = switch (level.getVersion()) {
currentStatusImage = switch (asset.getVersion()) {
case VERSION_WOG1_OLD -> noChangesImageOld;
case VERSION_WOG1_NEW -> noChangesImageNew;
default -> noChangesImage2;
};
} else if (editingStatus == UNSAVED_CHANGES) {
currentStatusImage = switch (level.getVersion()) {
currentStatusImage = switch (asset.getVersion()) {
case VERSION_WOG1_OLD -> changesImageOld;
case VERSION_WOG1_NEW -> changesImageNew;
default -> changesImage2;
};
} else if (editingStatus == UNSAVED_CHANGES_UNMODIFIABLE) {
currentStatusImage = switch (level.getVersion()) {
currentStatusImage = switch (asset.getVersion()) {
case VERSION_WOG1_OLD -> changesUnmodifiableImageOld;
case VERSION_WOG1_NEW -> changesUnmodifiableImageNew;
default -> changesUnmodifiableImage2;
Expand All @@ -75,7 +77,7 @@ public void update(int editingStatus, boolean shouldSelect) {
StackPane graphicContainer = new StackPane();
graphicContainer.prefWidthProperty().bind(getTabPane().tabMaxWidthProperty());
StackPane.setAlignment(pane, Pos.CENTER_LEFT);
graphicContainer.getChildren().addAll(pane, new Label(level.getLevelName()));
graphicContainer.getChildren().addAll(pane, new Label(asset.getLevelName()));
setGraphic(graphicContainer);
if (shouldSelect) {
getTabPane().getSelectionModel().select(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,37 @@
import com.woogleFX.engine.LevelManager;
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
import com.woogleFX.engine.gui.alarms.CloseTabAlarm;
import com.woogleFX.gameData.level.LevelTab;
import com.woogleFX.gameData.level.WOG1Level;
import com.woogleFX.gameData.level.WOG2Level;
import com.woogleFX.gameData.level._Level;
import javafx.scene.control.TabPane;

public class FXLevelSelectPane {
public class FXAssetSelectPane {

private static final TabPane levelSelectPane = new TabPane();
public static TabPane getLevelSelectPane() {
return levelSelectPane;
private static final TabPane assetSelectPane = new TabPane();
public static TabPane getAssetSelectPane() {
return assetSelectPane;
}


public static LevelTab levelSelectButton(_Level level) {
public static AssetTab levelSelectButton(_Level level) {

// Instantiate the tab.
LevelTab tab = new LevelTab(level.getLevelName(), level);
AssetTab tab = new AssetTab(level.getLevelName(), level);

// Override the default close operation of the tab.
tab.setOnCloseRequest(event -> {
event.consume();
// If the level has unsaved changes:
if (level.getEditingStatus() == LevelTab.UNSAVED_CHANGES) {
if (level.getEditingStatus() == AssetTab.UNSAVED_CHANGES) {
// Show a dialogue asking the user if they want to close the level without
// saving changes first.
CloseTabAlarm.show(tab, level);
} else {
// Close the tab.
if (tab.getTabPane().getTabs().size() == 1) {
FXLevelSelectPane.getLevelSelectPane().setMinHeight(0);
FXLevelSelectPane.getLevelSelectPane().setMaxHeight(0);
FXAssetSelectPane.getAssetSelectPane().setMinHeight(0);
FXAssetSelectPane.getAssetSelectPane().setMaxHeight(0);
// If all tabs are closed, clear the side pane
FXHierarchy.getHierarchy().setRoot(null);
// Clear the properties pane too
Expand Down Expand Up @@ -94,9 +93,9 @@ public static LevelTab levelSelectButton(_Level level) {

} else {
// Destroy and replace the level tab to prevent an unknown freezing issue.
if (level.getLevelTab() != null && level.getLevelTab().getTabPane() != null
&& level.getLevelTab().getTabPane().getTabs().contains(level.getLevelTab())
&& !level.getLevelTab().getTabPane().getTabs().isEmpty()) {
if (level.getAssetTab() != null && level.getAssetTab().getTabPane() != null
&& level.getAssetTab().getTabPane().getTabs().contains(level.getAssetTab())
&& !level.getAssetTab().getTabPane().getTabs().isEmpty()) {
level.setEditingStatus(level.getEditingStatus(), false);
}

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

public static void init() {

levelSelectPane.getSelectionModel().selectedItemProperty().addListener((observableValue, tab, t1) -> {
assetSelectPane.getSelectionModel().selectedItemProperty().addListener((observableValue, tab, t1) -> {
if (t1 == null) {
LevelManager.setLevel(null);
LevelManager.onSetLevel(null);
Expand All @@ -118,23 +117,23 @@ public static void init() {
}
});

levelSelectPane.widthProperty().addListener((observableValue, number, t1) -> {
int numTabs = levelSelectPane.getTabs().size();
assetSelectPane.widthProperty().addListener((observableValue, number, t1) -> {
int numTabs = assetSelectPane.getTabs().size();
double tabSize = 1 / (numTabs + 1.0);
levelSelectPane.setTabMaxWidth(tabSize * (levelSelectPane.getWidth() - 15) - 15);
levelSelectPane.setTabMinWidth(tabSize * (levelSelectPane.getWidth() - 15) - 15);
assetSelectPane.setTabMaxWidth(tabSize * (assetSelectPane.getWidth() - 15) - 15);
assetSelectPane.setTabMinWidth(tabSize * (assetSelectPane.getWidth() - 15) - 15);
});

levelSelectPane.setMinHeight(0);
levelSelectPane.setMaxHeight(0);
assetSelectPane.setMinHeight(0);
assetSelectPane.setMaxHeight(0);

levelSelectPane.setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS);
assetSelectPane.setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS);

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

levelSelectPane.setTabDragPolicy(TabPane.TabDragPolicy.REORDER);
levelSelectPane.setStyle("-fx-open-tab-animation: NONE");
assetSelectPane.setTabDragPolicy(TabPane.TabDragPolicy.REORDER);
assetSelectPane.setStyle("-fx-open-tab-animation: NONE");

}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/woogleFX/engine/fx/FXCanvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static Point2D getScreenCenter() {
}

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


Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/woogleFX/engine/fx/FXContainers.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public static void init() {
FXHierarchy.getHierarchy().setPrefHeight(height);
});

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

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

Expand Down
15 changes: 8 additions & 7 deletions src/main/java/com/woogleFX/engine/gui/alarms/CloseTabAlarm.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.woogleFX.engine.gui.alarms;

import com.woogleFX.editorObjects.Asset;
import com.woogleFX.editorObjects.EditorObject;
import com.woogleFX.engine.LevelManager;
import com.woogleFX.engine.fx.FXLevelSelectPane;
import com.woogleFX.engine.fx.FXAssetSelectPane;
import com.woogleFX.engine.fx.FXPropertiesView;
import com.woogleFX.engine.fx.hierarchy.FXHierarchy;
import com.woogleFX.gameData.level.LevelCloser;
Expand All @@ -22,8 +23,8 @@ public static void show(Tab tab, _Level level) {
alert.showAndWait().ifPresent(buttonType -> {
if (buttonType.equals(ButtonType.OK)) {
if (tab.getTabPane().getTabs().size() == 1) {
FXLevelSelectPane.getLevelSelectPane().setMinHeight(0);
FXLevelSelectPane.getLevelSelectPane().setMaxHeight(0);
FXAssetSelectPane.getAssetSelectPane().setMinHeight(0);
FXAssetSelectPane.getAssetSelectPane().setMaxHeight(0);
FXHierarchy.getHierarchy().setRoot(null);
FXPropertiesView.changeTableView(new EditorObject[]{});
}
Expand All @@ -34,7 +35,7 @@ public static void show(Tab tab, _Level level) {
});
}

public static void showClosingEditor(Tab tab, _Level level) {
public static void showClosingEditor(Tab tab, Asset asset) {

Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setHeaderText("Unsaved Changes");
Expand All @@ -43,8 +44,8 @@ public static void showClosingEditor(Tab tab, _Level level) {
alert.showAndWait().ifPresent(buttonType -> {
if (buttonType.equals(ButtonType.OK)) {
if (tab.getTabPane().getTabs().size() == 1) {
FXLevelSelectPane.getLevelSelectPane().setMinHeight(0);
FXLevelSelectPane.getLevelSelectPane().setMaxHeight(0);
FXAssetSelectPane.getAssetSelectPane().setMinHeight(0);
FXAssetSelectPane.getAssetSelectPane().setMaxHeight(0);
FXHierarchy.getHierarchy().setRoot(null);
FXPropertiesView.changeTableView(new EditorObject[]{});
}
Expand All @@ -53,7 +54,7 @@ public static void showClosingEditor(Tab tab, _Level level) {
LevelCloser.resumeLevelClosing();
});
} else if (buttonType.equals(ButtonType.CANCEL)) {
level.setEditingStatus(level.getEditingStatus(), level == LevelManager.getLevel());
asset.setEditingStatus(asset.getEditingStatus(), asset == LevelManager.getLevel());
}
});
}
Expand Down
Loading

0 comments on commit 77a9e55

Please sign in to comment.