commit ac98291a9c6da73fb66ee8ecaff430906273703a Author: tulpenkiste Date: Sat May 20 19:37:04 2023 +0100 Initial dlang rewrite diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bf26cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Directories +.dub +*/docs/ +*.so +*.dylib +*.dll +*.a +*.lib +*-test-* +*.exe +*.pdb +*.o +*.obj +*.lst + +# Files +docs.json +__dummy.html +dub.selections.json \ No newline at end of file diff --git a/dub.sdl b/dub.sdl new file mode 100644 index 0000000..d9c2fa6 --- /dev/null +++ b/dub.sdl @@ -0,0 +1,10 @@ +name "gameengine" +description "Game engine written in D" +authors "Tulpenkiste" +copyright "Copyright © 2023, Tulpenkiste" +license "LGPL-3.0" +targetType "none" +dependency "gameengine:engine" version="*" +dependency "gameengine:rsdl" version="*" +subPackage "engine" +subPackage "renderer/rsdl" \ No newline at end of file diff --git a/engine/dub.sdl b/engine/dub.sdl new file mode 100644 index 0000000..a205d97 --- /dev/null +++ b/engine/dub.sdl @@ -0,0 +1,4 @@ +name "engine" +license "LGPL-3.0" +targetType "dynamicLibrary" +targetName "gameengine" \ No newline at end of file diff --git a/engine/source/core/engine.d b/engine/source/core/engine.d new file mode 100644 index 0000000..ff834d6 --- /dev/null +++ b/engine/source/core/engine.d @@ -0,0 +1,44 @@ +module gameengine.core.engine; + +import gameengine.renderer; +import gameengine.node.node; +import core.time; + +class Engine { + this(IRenderer* renderer) { + this.renderer = renderer; + previousProcessTick = MonoTime.currTime(); + previousPhysicsProcessTick = MonoTime.currTime(); + } + + void runNodeProcesses() { + MonoTime currentTime = MonoTime.currTime(); + + 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) { + node.process(delta); + } + + this.previousProcessTick = MonoTime.currTime(); + } + + void runNodePhysicsProcesses() { + // Schade! + this.previousPhysicsProcessTick = MonoTime.currTime(); + } + + void drawNodes() {} + + string engineVersion() const { return "0.0.0"; } + + private IRenderer* renderer; + private MonoTime previousProcessTick; + private MonoTime previousPhysicsProcessTick; + + private Node*[] nodeList; +} \ No newline at end of file diff --git a/engine/source/graphics/drawable.d b/engine/source/graphics/drawable.d new file mode 100644 index 0000000..fdb60e3 --- /dev/null +++ b/engine/source/graphics/drawable.d @@ -0,0 +1,6 @@ +module gameengine.graphics.drawable; +import gameengine.renderer; + +abstract class Drawable { + abstract void draw(IRenderer* renderer); +} \ No newline at end of file diff --git a/engine/source/math/types.d b/engine/source/math/types.d new file mode 100644 index 0000000..0fd7241 --- /dev/null +++ b/engine/source/math/types.d @@ -0,0 +1,34 @@ +module gameengine.math.types; + +// Structs +/// Image + +// RGBA value struct +struct Color { + float r, g, b, a; +} + +// 2D + +// Defines a point within a 2D space. +struct Point2D { + float x, y; +} + +// Defines a given area with a width and height at the given point. +struct Rect { + float x, y, w, h; +} + +// X and Y values using floats. +struct Vec2 { + float x, y; +} + +// X and Y values using integers. +struct IntVec2 { + int x, y; +} + +// Functions +// TODO \ No newline at end of file diff --git a/engine/source/node/node.d b/engine/source/node/node.d new file mode 100644 index 0000000..ed10937 --- /dev/null +++ b/engine/source/node/node.d @@ -0,0 +1,6 @@ +module gameengine.node.node; + +abstract class Node { + abstract void process(float delta); + abstract void physicsProcess(float delta); +} \ No newline at end of file diff --git a/engine/source/renderer.d b/engine/source/renderer.d new file mode 100644 index 0000000..3624e05 --- /dev/null +++ b/engine/source/renderer.d @@ -0,0 +1,5 @@ +module gameengine.renderer; + +interface IRenderer { + void setWindowTitle(string str); +} \ No newline at end of file diff --git a/renderer/rsdl/dub.sdl b/renderer/rsdl/dub.sdl new file mode 100644 index 0000000..2700496 --- /dev/null +++ b/renderer/rsdl/dub.sdl @@ -0,0 +1,6 @@ +name "rsdl" +dependency "gameengine:engine" version=">=0.0.0" +dependency "bindbc-sdl" version="~>1.3.5" +targetType "dynamicLibrary" +targetName "gameengine_rsdl" +sourcePaths "./" "../../engine/source" diff --git a/renderer/rsdl/source/rsdl.d b/renderer/rsdl/source/rsdl.d new file mode 100644 index 0000000..43d1634 --- /dev/null +++ b/renderer/rsdl/source/rsdl.d @@ -0,0 +1,7 @@ +module gameengine.renderer.sdl; + +import gameengine.renderer; + +class RSDL : IRenderer { + +} \ No newline at end of file