diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 902b0e4..517ab1f 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -26,6 +26,7 @@
+
diff --git a/com/danitheskunk/skunkworks/BaseGame.java b/com/danitheskunk/skunkworks/BaseGame.java
index 3bc2a5f..8f053c0 100644
--- a/com/danitheskunk/skunkworks/BaseGame.java
+++ b/com/danitheskunk/skunkworks/BaseGame.java
@@ -3,24 +3,32 @@ package com.danitheskunk.skunkworks;
import com.danitheskunk.skunkworks.gfx.IRenderContext;
import com.danitheskunk.skunkworks.gfx.font.IFont;
import com.danitheskunk.skunkworks.nodes.Node;
+import com.danitheskunk.skunkworks.nodes.NodeRoot;
+import org.lwjgl.glfw.GLFW;
public abstract class BaseGame {
protected Engine engine;
protected IWindow window;
protected IFont debugFont;
- protected Node rootNode;
+ protected NodeRoot rootNode;
public BaseGame(Vec2i windowSize, String windowTitle) {
this.engine = new Engine();
this.window = engine.openWindow(windowSize, windowTitle);
//todo: load from .jar
this.debugFont = window.loadFontTileset("fonts/ega-8x14.png");
- this.rootNode = new Node();
+ this.rootNode = new NodeRoot();
init();
}
public void run() {
+ double lastTime, currentTime, delta;
+
+ lastTime = GLFW.glfwGetTime();
while(!window.shouldClose()) {
+ currentTime = GLFW.glfwGetTime();
+ delta = currentTime - lastTime;
+ lastTime = currentTime;
window.tick();
//todo: frame rate control
update(1000.0 / 60.0);
diff --git a/com/danitheskunk/skunkworks/Timestep.java b/com/danitheskunk/skunkworks/Timestep.java
new file mode 100644
index 0000000..05ec5e3
--- /dev/null
+++ b/com/danitheskunk/skunkworks/Timestep.java
@@ -0,0 +1,5 @@
+package com.danitheskunk.skunkworks;
+
+public enum Timestep {
+ FIXED, VARIABLE
+}
diff --git a/com/danitheskunk/skunkworks/nodes/BaseTween.java b/com/danitheskunk/skunkworks/nodes/BaseTween.java
new file mode 100644
index 0000000..441c9ee
--- /dev/null
+++ b/com/danitheskunk/skunkworks/nodes/BaseTween.java
@@ -0,0 +1,15 @@
+package com.danitheskunk.skunkworks.nodes;
+
+public abstract class BaseTween {
+ protected double progress;
+
+ public BaseTween() {
+ progress = 0;
+ }
+
+ public void setProgress(double progress) {
+ this.progress = progress;
+ }
+
+ protected abstract void apply();
+}
diff --git a/com/danitheskunk/skunkworks/nodes/Node.java b/com/danitheskunk/skunkworks/nodes/Node.java
index f12b6d3..3688981 100644
--- a/com/danitheskunk/skunkworks/nodes/Node.java
+++ b/com/danitheskunk/skunkworks/nodes/Node.java
@@ -20,6 +20,10 @@ public class Node implements Iterable {
pos = Vec2f.ZERO;
}
+ public Node getParent() {
+ return parent;
+ }
+
public Vec2f getPos() {
return pos;
}
@@ -52,8 +56,31 @@ public class Node implements Iterable {
return Vec2f.add(parent.getAbsolutePos(), pos);
}
+ public Node getRoot() {
+ var node = this;
+ while(node.parent != null) {
+ node = node.parent;
+ }
+ return node;
+ }
+
@Override
public Iterator iterator() {
return children.iterator();
}
+
+ public class TweenPos extends BaseTween {
+ private final Vec2f start;
+ private final Vec2f end;
+
+ public TweenPos(Vec2f start, Vec2f end) {
+ this.start = start;
+ this.end = end;
+ }
+
+ @Override
+ protected void apply() {
+ pos = Vec2f.tween(start, end, progress);
+ }
+ }
}
diff --git a/com/danitheskunk/skunkworks/nodes/NodeRoot.java b/com/danitheskunk/skunkworks/nodes/NodeRoot.java
new file mode 100644
index 0000000..6a331e4
--- /dev/null
+++ b/com/danitheskunk/skunkworks/nodes/NodeRoot.java
@@ -0,0 +1,5 @@
+package com.danitheskunk.skunkworks.nodes;
+
+public class NodeRoot extends Node {
+
+}
diff --git a/com/danitheskunk/skunkworks/nodes/Tweener.java b/com/danitheskunk/skunkworks/nodes/Tweener.java
new file mode 100644
index 0000000..de8dbff
--- /dev/null
+++ b/com/danitheskunk/skunkworks/nodes/Tweener.java
@@ -0,0 +1,11 @@
+package com.danitheskunk.skunkworks.nodes;
+
+import com.danitheskunk.skunkworks.Timestep;
+
+public class Tweener {
+ private Timestep timestepMode;
+
+ public Tweener(Timestep timestepMode) {
+ this.timestepMode = timestepMode;
+ }
+}