Finish dlang rewrite

This commit is contained in:
Tulpen 2023-05-20 22:27:42 +01:00
parent ac98291a9c
commit cf60b9ace5
13 changed files with 100 additions and 35 deletions

1
.gitignore vendored
View file

@ -7,6 +7,7 @@
*.a *.a
*.lib *.lib
*-test-* *-test-*
*_test
*.exe *.exe
*.pdb *.pdb
*.o *.o

View file

@ -6,5 +6,7 @@ license "LGPL-3.0"
targetType "none" targetType "none"
dependency "gameengine:engine" version="*" dependency "gameengine:engine" version="*"
dependency "gameengine:rsdl" version="*" dependency "gameengine:rsdl" version="*"
dependency "gameengine:test" version="*"
subPackage "engine" subPackage "engine"
subPackage "renderer/rsdl" subPackage "renderer/rsdl"
subPackage "test"

View file

@ -1,4 +1,4 @@
name "engine" name "engine"
license "LGPL-3.0" license "LGPL-3.0"
targetType "dynamicLibrary" targetType "library"
targetName "gameengine" targetName "gameengine"

View file

@ -1,44 +1,64 @@
module gameengine.core.engine; module gameengine.core.engine;
import gameengine.renderer; import gameengine.graphics.drawable;
import gameengine.renderer.renderer;
import gameengine.node.node; import gameengine.node.node;
import core.time; import std.datetime.stopwatch;
import std.stdio;
import std.format;
class Engine { class Engine {
this(IRenderer* renderer) { this(Renderer renderer) {
this.renderer = renderer; this.renderer = renderer;
previousProcessTick = MonoTime.currTime(); previousProcessTick = 0.00001f;
previousPhysicsProcessTick = MonoTime.currTime(); previousPhysicsProcessTick = 0.00001f;
watch.start();
}
~this() {
watch.stop();
} }
void runNodeProcesses() { void runNodeProcesses() {
MonoTime currentTime = MonoTime.currTime(); // TODO: fix delta then adapt for runNodePhysicsProcesses
float current = watch.peek.total!"msecs" / 1_000;
float delta = (current - previousProcessTick);
Duration difference = currentTime - previousProcessTick;
float delta = difference.total!"hnsecs" / 10_000_000.0;
// Temp
debug { import std.stdio : writeln; import std.format; try { writeln(format("%f", delta)); } catch (Exception) {} }
foreach (Node* node ; nodeList) { foreach (Node* node ; nodeList) {
node.process(delta); node.process(delta);
} }
this.previousProcessTick = MonoTime.currTime(); this.previousProcessTick = watch.peek.total!"msecs" / 1_000;
} }
void runNodePhysicsProcesses() { void runNodePhysicsProcesses() {
// Schade! // Schade!
this.previousPhysicsProcessTick = MonoTime.currTime(); float current = watch.peek.total!"msecs" / 1_000;
float delta = (current - previousProcessTick);
foreach (Node* node ; nodeList) {
node.physicsProcess(delta);
} }
void drawNodes() {} this.previousPhysicsProcessTick = watch.peek.total!"msecs" / 1_000;
}
void drawNodes() {
foreach (Node* node; nodeList) {
if (Drawable* drawNode = cast(Drawable*) node) {
drawNode.draw(&renderer);
}
}
}
string engineVersion() const { return "0.0.0"; } string engineVersion() const { return "0.0.0"; }
private IRenderer* renderer; private Renderer renderer;
private MonoTime previousProcessTick; private StopWatch watch;
private MonoTime previousPhysicsProcessTick; private float previousProcessTick;
private float previousPhysicsProcessTick;
private Node*[] nodeList; private Node*[] nodeList;
} }

View file

@ -1,6 +1,6 @@
module gameengine.graphics.drawable; module gameengine.graphics.drawable;
import gameengine.renderer; import gameengine.renderer.renderer;
abstract class Drawable { abstract class Drawable {
abstract void draw(IRenderer* renderer); abstract void draw(Renderer* renderer);
} }

View file

@ -1,5 +0,0 @@
module gameengine.renderer;
interface IRenderer {
void setWindowTitle(string str);
}

View file

@ -0,0 +1,5 @@
module gameengine.renderer.renderer;
abstract class Renderer {
void setWindowTitle(string str);
}

View file

@ -1,6 +1,6 @@
name "rsdl" name "rsdl"
dependency "gameengine:engine" version=">=0.0.0" dependency "gameengine:engine" version=">=0.0.0"
dependency "bindbc-sdl" version="~>1.3.5" dependency "bindbc-sdl" version="~>1.3.5"
targetType "dynamicLibrary" targetType "library"
targetName "gameengine_rsdl" targetName "gameengine_rsdl"
sourcePaths "./" "../../engine/source" sourcePaths "./" "../../engine/source"

View file

@ -0,0 +1,7 @@
module gameengine_rsdl;
import gameengine.renderer.renderer;
class RSDL : Renderer {
override void setWindowTitle(string title) {}
}

View file

@ -1,7 +0,0 @@
module gameengine.renderer.sdl;
import gameengine.renderer;
class RSDL : IRenderer {
}

16
test/.gitignore vendored Normal file
View file

@ -0,0 +1,16 @@
.dub
docs.json
__dummy.html
docs/
/test
test.so
test.dylib
test.dll
test.a
test.lib
test-test-*
*.exe
*.pdb
*.o
*.obj
*.lst

9
test/dub.sdl Normal file
View file

@ -0,0 +1,9 @@
name "test"
description "Test of the game engine"
authors "Tulpenkiste"
copyright "Copyright © 2023, Tulpenkiste"
license "GPL-3.0"
targetType "executable"
dependency "gameengine:engine" version="*"
dependency "gameengine:rsdl" version="*"
sourcePaths "./" "../engine/source" "../../renderer/rsdl/source"

17
test/source/app.d Normal file
View file

@ -0,0 +1,17 @@
import std.stdio;
import gameengine.core.engine;
import gameengine.renderer.renderer;
import gameengine_rsdl;
import core.thread;
void main() {
Renderer renderer = new RSDL();
Engine engine = new Engine(renderer);
while (true) {
engine.runNodeProcesses();
Thread.sleep(1.msecs);
}
}