diff --git a/.idea/artifacts/Age_engine_jar.xml b/.idea/artifacts/Age_engine_jar.xml new file mode 100644 index 0000000..f8fffd0 --- /dev/null +++ b/.idea/artifacts/Age_engine_jar.xml @@ -0,0 +1,12 @@ + + + $PROJECT_DIR$/out/artifacts/Age_engine_jar + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ac216bc..38d573b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index b68384a..38167d7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/src/main/java/engine/Display.java b/src/main/java/engine/Display.java index 1f71777..f84cbe3 100644 --- a/src/main/java/engine/Display.java +++ b/src/main/java/engine/Display.java @@ -2,6 +2,7 @@ import engine.listeners.Keyboard; import engine.listeners.Mouse; +import engine.rendering.Graphics; import javax.swing.*; import java.awt.*; @@ -105,6 +106,33 @@ public Display setBackgroundColor(Color bgColor) { return this; } + /** + * makes the window resizable + */ + public Display makeResizable(boolean b){ + frame.setResizable(b); + return this; + } + + /** + * Sets the width of the window + * @param width The value you want the width to be set to + */ + public Display setWidth(int width){ + this.width = width; + frame.setSize(this.width, this.height); + return this; + } + /** + * Sets the height of the window + * @param height The value you want the height to be set to + */ + public Display setHeight(int height){ + this.height = height; + frame.setSize(this.width, this.height); + return this; + } + /** * set the window's title to a given string * @@ -158,14 +186,14 @@ public BufferStrategy bs() { * @return Returns the screen width. */ public int getWidth() { - return canvas.getWidth(); + return width; } /** * @return Returns the screen height. */ public int getHeight() { - return canvas.getHeight(); + return height; } /** diff --git a/src/main/java/engine/Game.java b/src/main/java/engine/Game.java index 603269b..8c7230c 100644 --- a/src/main/java/engine/Game.java +++ b/src/main/java/engine/Game.java @@ -3,6 +3,7 @@ import engine.editor.EditScene; import engine.editor.SettingsScene; import engine.loops.Loop; +import engine.rendering.Graphics; import java.util.HashMap; import java.util.Map; @@ -15,6 +16,7 @@ public class Game { private static final Map displays = new HashMap<>(); private static final Map scenes = new HashMap<>(); private static Loop loop; + private static int FPS = 60; private Game() { throw new IllegalStateException("Utility class"); @@ -26,6 +28,7 @@ private Game() { public static void start() { loop = new Loop(); loop.start(); + loop.setFrameRate(FPS); } /** @@ -35,7 +38,9 @@ public static void start() { * @param frameRate The frame rate you want. */ public static void setFrameRate(int frameRate) { - loop.setFrameRate(frameRate); + FPS = frameRate; + if (loop != null) + loop.setFrameRate(frameRate); } /** diff --git a/src/main/java/engine/editor/EditScene.java b/src/main/java/engine/editor/EditScene.java index 2753bea..0835b23 100644 --- a/src/main/java/engine/editor/EditScene.java +++ b/src/main/java/engine/editor/EditScene.java @@ -2,7 +2,7 @@ import engine.Game; import engine.Scene; -import engine.editor.menu.Button; +import engine.mechanics.Button; import engine.editor.menu.Sprite; import engine.listeners.MouseButtons; import engine.mechanics.*; @@ -37,7 +37,7 @@ public void init() { g.fillRect(1100, 451, 1280, 720); }); TickBox t = new TickBox(1190, 650, 30, 30, this); - Button b = new Button(1130, 500, 100, 40) + Button b = new Button(1130, 500, 100, 40, this) .addEvent(MouseButtons.LEFT_DOWN, this::mouseHandler) .addEvent(MouseButtons.RIGHT_DOWN, this::mouseHandler) .addEvent(MouseButtons.MIDDLE_DOWN, this::mouseHandler) @@ -47,7 +47,7 @@ public void init() { .setTextColor(Color.red) .setFontSize(15) .setFont("JhengHei UI"); - Button settings = new Button(1130, 600, 100, 40) + Button settings = new Button(1130, 600, 100, 40, this) .addEvent(MouseButtons.LEFT_DOWN, e -> display.attachScene("Settings")) .setColor(Color.GREEN) .setText("Settings") diff --git a/src/main/java/engine/editor/SettingsScene.java b/src/main/java/engine/editor/SettingsScene.java index 510e026..17bbdce 100644 --- a/src/main/java/engine/editor/SettingsScene.java +++ b/src/main/java/engine/editor/SettingsScene.java @@ -1,7 +1,7 @@ package engine.editor; import engine.Scene; -import engine.editor.menu.Button; +import engine.mechanics.Button; import engine.listeners.MouseButtons; import engine.mechanics.TextBox; @@ -23,7 +23,7 @@ public void init() { .setMatcher("[0-9]*") .setMaxValue(4) .setText(String.valueOf(gridHeight)); - Button back = new Button(20, 20, 100, 40) + Button back = new Button(20, 20, 100, 40, this) .addEvent(MouseButtons.LEFT_DOWN, e -> { gridWidth = Integer.parseInt(gridWidthBox.getText()); gridHeight = Integer.parseInt(gridHeightBox.getText()); diff --git a/src/main/java/engine/listeners/Mouse.java b/src/main/java/engine/listeners/Mouse.java index 0e1ef65..9af9818 100644 --- a/src/main/java/engine/listeners/Mouse.java +++ b/src/main/java/engine/listeners/Mouse.java @@ -144,10 +144,10 @@ public Point getMousePos() { } private double scaledX(int x) { - return (x / ((double) (display.getWidth()) / 1280)); + return (x / ((double) (display.getWidth()) / Graphics.stdWidth)); } private double scaledY(int y) { - return (y / ((double) (display.getHeight()) / 720)); + return (y / ((double) (display.getHeight()) / Graphics.stdHeight)); } } diff --git a/src/main/java/engine/editor/menu/Button.java b/src/main/java/engine/mechanics/Button.java similarity index 93% rename from src/main/java/engine/editor/menu/Button.java rename to src/main/java/engine/mechanics/Button.java index 6297424..50dbda1 100644 --- a/src/main/java/engine/editor/menu/Button.java +++ b/src/main/java/engine/mechanics/Button.java @@ -1,10 +1,9 @@ -package engine.editor.menu; +package engine.mechanics; import engine.Entity; -import engine.Game; +import engine.Scene; import engine.listeners.Mouse; import engine.listeners.MouseButtons; -import engine.mechanics.Hitbox; import java.awt.*; import java.awt.event.MouseEvent; @@ -16,7 +15,7 @@ import static engine.rendering.Graphics.g; public class Button implements Entity { - private final Mouse mouseListener = Game.getScene("EditScene").mouseListener; + private final Mouse mouseListener; private final Hitbox h; private final Map> events = new EnumMap<>(MouseButtons.class); private final int x; @@ -32,7 +31,8 @@ public class Button implements Entity { private int fontSize = 13; private String fontFace = "Comic Sans MS"; - public Button(int x, int y, int width, int height) { + public Button(int x, int y, int width, int height, Scene scene) { + this.mouseListener = scene.mouseListener; this.x = x; this.y = y; this.width = width; diff --git a/src/main/java/engine/rendering/Graphics.java b/src/main/java/engine/rendering/Graphics.java index a295987..e7b686a 100644 --- a/src/main/java/engine/rendering/Graphics.java +++ b/src/main/java/engine/rendering/Graphics.java @@ -19,6 +19,8 @@ public class Graphics { public static Graphics2D g; private static int xOffset = 0; private static int yOffset = 0; + public static double stdWidth = 1280d; + public static double stdHeight = 720d; private Graphics() { throw new IllegalStateException("Utility class"); @@ -31,9 +33,9 @@ public static void graphicsLoop() { Game.getDisplays().values().forEach(e -> { BufferStrategy bs = e.bs(); g = (Graphics2D) bs.getDrawGraphics(); - g.setColor(Color.white); + g.setColor(e.getCanvas().getBackground()); g.fillRect(0, 0, e.getWidth(), e.getHeight()); - g.scale(e.getWidth() / 1280d, e.getHeight() / 720d); + g.scale(e.getWidth() / stdWidth, e.getHeight() / stdHeight); Graphics.g.translate(xOffset, yOffset); Scene s = Game.getScene(e.getAttachedScene()); if (s != null) { @@ -53,12 +55,12 @@ public static void graphicsLoop() { * @param y The y offset */ public static void moveCam(int x, int y) { - xOffset = -x + 640; - yOffset = -y + 360; + xOffset = x; + yOffset = y; } /** - * @return Returns the current offset + * @return Returns the current camera position */ public static Point getCamPos() { return new Point(xOffset, yOffset); diff --git a/src/main/java/engine/rendering/Image.java b/src/main/java/engine/rendering/Image.java index b546181..59faba8 100644 --- a/src/main/java/engine/rendering/Image.java +++ b/src/main/java/engine/rendering/Image.java @@ -31,7 +31,6 @@ public static BufferedImage load(String path) { return image; } catch (IOException | IllegalArgumentException e) { e.printStackTrace(); - System.exit(1); return null; } } diff --git a/src/main/java/game/Launcher.java b/src/main/java/game/Launcher.java deleted file mode 100644 index 1f4b862..0000000 --- a/src/main/java/game/Launcher.java +++ /dev/null @@ -1,26 +0,0 @@ -package game; - -import engine.Display; -import engine.Game; -import game.test.GameScene; - -public class Launcher { - - public static void main(String[] args) { -//// Display d = Game.display(); -//// d.setFullScreen(false); -//// d.setSize(1280, 720); -//// d.setBackgroundColor(Color.WHITE); -// Game.addScene(new TestScene(), "Test"); -// Game.addScene(new GameScene(), "Game"); -//// d.attachScene("Test"); -// -// Display d1 = Game.display("Game"); -// d1.attachScene("Game"); -// d1.setTitle("Test Game"); -// Game.start(); -// Game.setFrameRate(60); - - Game.startEditor(); - } -} diff --git a/src/main/java/game/TestObject.java b/src/main/java/game/TestObject.java deleted file mode 100644 index aa2706b..0000000 --- a/src/main/java/game/TestObject.java +++ /dev/null @@ -1,27 +0,0 @@ -package game; - -import engine.Entity; -import engine.Scene; -import engine.rendering.Graphics; - -public class TestObject implements Entity { - public int i = 0; - - public TestObject(Scene scene) { - } - - @Override - public void init() { - // TBD - } - - @Override - public void logicLoop() { - i++; - } - - @Override - public void renderLoop() { - Graphics.g.fillRect(0, 200, i, 520); - } -} diff --git a/src/main/java/game/TestScene.java b/src/main/java/game/TestScene.java deleted file mode 100644 index 5ca201f..0000000 --- a/src/main/java/game/TestScene.java +++ /dev/null @@ -1,41 +0,0 @@ -package game; - -import engine.Entity; -import engine.Scene; -import engine.loops.Loop; -import engine.rendering.Graphics; - -import java.awt.*; -import java.awt.event.KeyEvent; - -public class TestScene extends Scene { - - @Override - public void init() { - display.keyListener.addListener(KeyEvent.VK_SPACE, this::reset, false); - display.keyListener.addListener(KeyEvent.VK_ESCAPE, e -> { - System.exit(0); - return false; - }); - this.addObject(new TestObject(this)); - } - - @Override - public void logicLoop() { - for (int j = 0; j++ <= 1E6; ) Math.sin(4); // benchmark to increase the frameTimes - } - - public void reset(KeyEvent e) { - Entity o = this.getObject(0); - if (o instanceof TestObject) { - TestObject t = (TestObject) o; - t.i = 0; - } - } - - @Override - public void renderLoop() { - Graphics.g.setColor(Color.BLACK); - Graphics.g.drawString(String.format("Time per frame in ms: %.3f", Loop.frameTime / 1E6), 0, 100); - } -} diff --git a/src/main/java/game/test/GameScene.java b/src/main/java/game/test/GameScene.java deleted file mode 100644 index cf55502..0000000 --- a/src/main/java/game/test/GameScene.java +++ /dev/null @@ -1,25 +0,0 @@ -package game.test; - -import engine.Scene; -import engine.editor.menu.Button; -import engine.rendering.Graphics; - -public class GameScene extends Scene { - - @Override - public void init() { - Player2 pl = new Player2(); - //this.addObject(new Button(200, 200, 200, 50)); - this.addObject(pl); - } - - @Override - public void logicLoop() { - // why do you want this from me linter? - } - - @Override - public void renderLoop() { - Graphics.g.fillRect(-100, -100, 20, 20); - } -} diff --git a/src/main/java/game/test/Player2.java b/src/main/java/game/test/Player2.java deleted file mode 100644 index a6ab3b9..0000000 --- a/src/main/java/game/test/Player2.java +++ /dev/null @@ -1,92 +0,0 @@ -package game.test; - -import engine.Entity; -import engine.Game; -import engine.listeners.Keyboard; -import engine.loops.Loop; -import engine.mechanics.Hitbox; -import engine.rendering.Animation; -import engine.rendering.Graphics; -import engine.rendering.Image; - -import java.awt.*; -import java.awt.event.KeyEvent; -import java.awt.image.BufferedImage; -import java.util.ArrayList; - -import static engine.rendering.Graphics.g; -import static java.lang.Math.toRadians; - -public class Player2 implements Entity { - private static final int WIDTH = 20; - private static final int HEIGHT = 20; - private final Keyboard keyListener = Game.getScene("Game").keyListener; - private final ArrayList hitList = new ArrayList<>(); - private final BufferedImage img = Image.load("blush.png"); - private int x = 100; - private int y = 100; - public final Hitbox h = new Hitbox( - new Point(x, y), - new Point(x + WIDTH, y + HEIGHT) - ); - private int i = 0; - - @Override - public void init() { - hitList.add(new Hitbox(new Point(50, 0), new Point(200, 50))); - hitList.add(new Hitbox(new Point(200, 200), new Point(400, 400), new Point(200, 300))); - hitList.get(0).rotate(1); - Animation.createAnimation(Image.load("testSheet.png"), 3, 4, 20, null, "Idle"); - keyListener.addListener(KeyEvent.VK_SPACE, e -> Animation.play("Idle", x, y), false); - keyListener.addListener(KeyEvent.VK_SPACE, e -> y += 10, false); - } - - @Override - public void logicLoop() { - hitList.get(1).rotate(toRadians(i++)); - boolean inside = false; - for (Hitbox e : hitList) if (h.isInside(e)) inside = true; - if (!inside) { - double speed = 5; - for (double velo = ((keyListener.isHeld('W') ? 0 : 1) - (keyListener.isHeld('S') ? 0 : 1)) * speed; - Math.abs(velo) >= 1; velo *= 0.9) { - h.move(x, (int) (y + velo)); - inside = false; - for (Hitbox e : hitList) if (h.isInside(e)) inside = true; - if (!inside) { - y += velo; - break; - } - } - for (double velo = ((keyListener.isHeld('A') ? 0 : 1) - (keyListener.isHeld('D') ? 0 : 1)) * speed; - Math.abs(velo) >= 1; velo *= 0.9) { - h.move((int) (x + velo), y); - inside = false; - for (Hitbox e : hitList) if (h.isInside(e)) inside = true; - if (!inside) { - x += velo; - break; - } - } - } else while (inside) { - y++; - h.move(x, y); - inside = false; - for (Hitbox e : hitList) if (h.isInside(e)) inside = true; - } - h.move(x, y); - Graphics.moveCam(x, y); - } - - @Override - public void renderLoop() { - Animation.updatePos("Idle", x, y); - if (hitList.get(0).isInside(Game.getScene("Game").mouseListener.getMousePos())) - g.setColor(Color.CYAN); - else g.setColor(Color.blue); - g.drawImage(img, x, y, WIDTH, HEIGHT, null); - g.draw(h.getShape()); - g.drawString(String.format("Time per frame in ms: %.3f", Loop.frameTime / 1E6), -Graphics.getCamPos().x, 100 - Graphics.getCamPos().y); - hitList.forEach(e -> g.draw(e.getShape())); - } -} diff --git a/src/main/resources/blush.png b/src/main/resources/blush.png deleted file mode 100644 index bed050d..0000000 Binary files a/src/main/resources/blush.png and /dev/null differ diff --git a/src/main/resources/empty.ini b/src/main/resources/empty.ini deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/escape.wav b/src/main/resources/escape.wav deleted file mode 100644 index 8d086ae..0000000 Binary files a/src/main/resources/escape.wav and /dev/null differ diff --git a/src/main/resources/testSheet.png b/src/main/resources/testSheet.png deleted file mode 100644 index 547463e..0000000 Binary files a/src/main/resources/testSheet.png and /dev/null differ diff --git a/src/main/resources/yey.ini b/src/main/resources/yey.ini deleted file mode 100644 index 5a1b834..0000000 --- a/src/main/resources/yey.ini +++ /dev/null @@ -1,64 +0,0 @@ -[1117578015] -Pos = 128,384 -Image = blush.png -Scale = 1.0 -[1334243074] -Pos = 512,128 -Image = blush.png -Scale = 1.0 -[1239629989] -Pos = 128,128 -Image = blush.png -Scale = 1.0 -[33013872] -Pos = 384,512 -Image = blush.png -Scale = 2.0 -[1851464979] -Pos = 640,128 -Image = blush.png -Scale = 2.0 -[1133227845] -Pos = 256,256 -Image = blush.png -Scale = 1.0 -[948332756] -Pos = 256,384 -Image = blush.png -Scale = 1.0 -[1618069061] -Pos = 640,384 -Image = blush.png -Scale = 2.0 -[298323837] -Pos = 512,256 -Image = blush.png -Scale = 1.0 -[380362781] -Pos = 384,128 -Image = blush.png -Scale = 1.0 -[743688069] -Pos = 256,128 -Image = blush.png -Scale = 1.0 -[997091703] -Pos = 128,512 -Image = blush.png -Scale = 2.0 -[597007662] -Pos = 512,384 -Image = blush.png -Scale = 1.0 -[1126447352] -Pos = 384,256 -Image = blush.png -Scale = 1.0 -[1786194505] -Pos = 384,384 -Image = blush.png -Scale = 1.0 -[1824704157] -Pos = 128,256 -Image = blush.png -Scale = 1.0