1 module hoekjed.kern.kern; 2 import bindbc.glfw; 3 import core.sys.windows.windows; 4 import hoekjed.kern; 5 import std.conv : to; 6 import std.stdio : writefln; 7 import std.datetime.stopwatch; 8 9 private extern (C) void glfw_foutterugroep(int soort, const char* beschrijving) nothrow { 10 try { 11 writefln("GLFW Fout %d: %s", soort, beschrijving.to!string); 12 } catch (Exception e) { 13 } 14 } 15 16 debug { 17 package HWND console = null; 18 package bool _console_zichtbaar = false; 19 } 20 21 debug void hdToonConsole(bool zichtbaar) { 22 ShowWindow(console, zichtbaar?SW_SHOW:SW_HIDE); 23 _console_zichtbaar = zichtbaar; 24 } 25 26 void hdZetOp() { 27 debug{ 28 console = GetConsoleWindow(); 29 SetWindowPos(console, HWND_BOTTOM, 0, 0, 1920 / 3, 1080 / 3, SWP_HIDEWINDOW); 30 } else { 31 FreeConsole(); 32 } 33 34 35 glfwSetErrorCallback(&glfw_foutterugroep); 36 glfwInit(); 37 _hdTijd = StopWatch(AutoStart.yes); // Herstelt naar 0 zodra hdLus op wordt geroepen. 38 } 39 40 private ulong _hdStaptal = 0; 41 private StopWatch _hdTijd; 42 43 @property 44 public ulong hdStaptal(){ 45 return _hdStaptal; 46 } 47 48 @property 49 public Duration hdTijd(){ 50 return _hdTijd.peek(); 51 } 52 53 public void hdStap() { 54 _hdStaptal += 1; 55 56 foreach (Venster venster; Venster.vensters.values) 57 venster.verwerkInvoer(); 58 59 foreach (Wereld wereld; Wereld.werelden) 60 wereld.denkWereld(); 61 62 foreach (Wereld wereld; Wereld.werelden) 63 wereld.werkWereldBij(); 64 65 import std.stdio; 66 foreach (Venster venster; Venster.vensters.values) { 67 GLFWwindow* glfw_venster = venster.glfw_venster; 68 if (glfwWindowShouldClose(venster.glfw_venster)) { 69 glfwDestroyWindow(glfw_venster); 70 Venster.vensters.remove(glfw_venster); 71 //PAS OP: mogelijke nullpointers wanneer werelden of voorwerpen dit venster gebruiken. 72 } else 73 venster.teken(); 74 } 75 76 77 foreach (Venster venster; Venster.vensters.values) 78 venster.leegInvoer(); 79 80 glfwPollEvents(); 81 } 82 83 public void hdLus() { 84 _hdTijd.reset(); 85 while (Venster.vensters.length > 0) 86 hdStap(); 87 }