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 glfwSetErrorCallback(&glfw_foutterugroep); 35 glfwInit(); 36 _hdTijd = StopWatch(AutoStart.yes); // Herstelt naar 0 zodra hdLus op wordt geroepen. 37 } 38 39 private ulong _hdStaptal = 0; 40 private StopWatch _hdTijd; 41 42 @property 43 public ulong hdStaptal() { 44 return _hdStaptal; 45 } 46 47 @property 48 public Duration hdTijd() { 49 return _hdTijd.peek(); 50 } 51 52 public void hdStap() { 53 _hdStaptal += 1; 54 55 foreach (Venster venster; Venster.vensters.values) 56 venster.verwerkInvoer(); 57 58 foreach (Wereld wereld; Wereld.werelden) 59 wereld.denkWereld(); 60 61 foreach (Wereld wereld; Wereld.werelden) 62 wereld.werkWereldBij(); 63 64 import std.stdio; 65 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 foreach (Venster venster; Venster.vensters.values) 77 venster.leegInvoer(); 78 79 glfwPollEvents(); 80 } 81 82 public void hdLus() { 83 _hdTijd.reset(); 84 while (Venster.vensters.length > 0) 85 hdStap(); 86 }