diff --git a/nim.cfg b/nim.cfg
index 45e3e76..bd1efc5 100644
--- a/nim.cfg
+++ b/nim.cfg
@@ -15,10 +15,10 @@
cpu = "i386"
@if wasm:
passC = "-s WASM=1 -Iemscripten"
- passL = "-s WASM=1 -Lemscripten -s ALLOW_MEMORY_GROWTH=1 "
+ passL = "-s WASM=1 -Lemscripten -s ALLOW_MEMORY_GROWTH=1"
@elif asmjs:
- passC = "-s ASM_JS=1 -Iemscripten" #-s USE_PTHREADS=1
- passL = "-s ASM_JS=1 -Lemscripten" #-s ALLOW_MEMORY_GROWTH=1"
+ passC = "-s ASM_JS=1 -Iemscripten"
+ passL = "-s ASM_JS=1 -Lemscripten"
@end
@if release:
diff --git a/resources/index.html b/resources/index.html
new file mode 100644
index 0000000..19b5093
--- /dev/null
+++ b/resources/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/geo2d.nim b/src/geo2d.nim
similarity index 100%
rename from geo2d.nim
rename to src/geo2d.nim
diff --git a/grid.nim b/src/grid.nim
similarity index 100%
rename from grid.nim
rename to src/grid.nim
diff --git a/src/hello_sdl.nim b/src/hello_sdl.nim
new file mode 100644
index 0000000..5e9d606
--- /dev/null
+++ b/src/hello_sdl.nim
@@ -0,0 +1,50 @@
+import sdl2, sdl2/gfx
+import geo2d
+
+
+when defined(wasm):
+ {.emit: "#include ".}
+ proc emscripten_set_main_loop_arg*(loopFunction: proc(ctx : pointer) {.cdecl.}, ctx : pointer, fps : cint, simulate_infinite_loop : cint) {.importc.}
+
+discard sdl2.init(INIT_EVERYTHING)
+
+var
+ window: WindowPtr
+ renderer: RendererPtr
+
+window = createWindow("Game of Life in SDL",
+ SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
+ 640, 480,
+ SDL_WINDOW_SHOWN or SDL_WINDOW_RESIZABLE)
+
+renderer = createRenderer(window, -1, Renderer_Accelerated or Renderer_PresentVsync or Renderer_TargetTexture)
+
+type Context = object
+ renderer : RendererPtr
+
+proc mainloop(arg : pointer) {.cdecl.} =
+ let windowSize = block:
+ var w, h : cint
+ window.getSize(w, h)
+ Rect2d(tl: newP2d(0f32, 0f32), br: newP2d(w.float32, h.float32))
+
+ let ctx = cast[ptr[Context]](arg)
+ let renderer = ctx.renderer
+
+ renderer.setDrawColor(255, 0, 0, 255)
+ renderer.clear()
+ let ticks = getTicks()
+ var r : Rect;
+ r.x = ((ticks.float64 / 3000 * windowSize.width).cuint mod windowSize.width.cuint).cint
+ r.y = 50;
+ r.w = 50;
+ r.h = 50;
+ renderer.setDrawColor(0, 255, 255)
+ renderer.fillRect(r)
+ renderer.present()
+
+var ctx = Context(renderer : renderer)
+emscripten_set_main_loop_arg(mainloop, addr(ctx), -1, 1)
+
+destroy renderer
+destroy window
\ No newline at end of file
diff --git a/main.nim b/src/main.nim
similarity index 88%
rename from main.nim
rename to src/main.nim
index 651bb18..8c82947 100644
--- a/main.nim
+++ b/src/main.nim
@@ -1,4 +1,4 @@
-include options
+import options
import sdl2, sdl2/gfx
import grid
import geo2d
@@ -6,6 +6,10 @@ import mmath/smatrix
import mmath/svector
from nwo/utils import box
+when defined(wasm):
+ {.emit: "#include ".}
+ proc emscripten_set_main_loop_arg*(loopFunction: proc(ctx : pointer) {.cdecl.}, ctx : pointer, fps : cint, simulate_infinite_loop : cint) {.importc.}
+
discard sdl2.init(INIT_EVERYTHING)
proc drawLine(renderer : RendererPtr, p0, p1 : P2d) = renderer.drawLine(p0.x.cint, p0.y.cint, p1.x.cint, p1.y.cint)
@@ -27,8 +31,8 @@ var
evt = sdl2.defaultEvent
quit = false
freeze = true
- fpsman: FpsManager
-fpsman.init
+# fpsman: FpsManager
+# fpsman.init
let side = 5
let
@@ -44,14 +48,14 @@ block:
next_grid = box(grid)
let bb = newRect2d(0f32, 0f32, float32(side * pixelx), float32(side * pixely))
-var step = 3
-var elapsed_time_sec = 0
+var step : uint = 3
+var elapsed_time : uint = 0
var
xform : X2d = identity[3, float32]()
uxform : X2d = identity[3, float32]()
pan_start : Option[P2d] = none[P2d]()
-while not quit:
+proc main_loop(arg : pointer) {.cdecl.} =
let windowSize = block:
var w, h : cint
window.getSize(w, h)
@@ -73,7 +77,7 @@ while not quit:
of 's'.int:
next_step(current_grid[], next_grid[])
of '['.int:
- if step > 1:
+ if step > 0u:
step -= 1
of ']'.int:
if step < 10:
@@ -121,7 +125,8 @@ while not quit:
else:
discard
- let dt = fpsman.getFramerate() / 1000
+ # let dt = fpsman.getFramerate() / 1000
+ # let dt = 10
render.setDrawColor 0,0,0,255
render.clear
@@ -153,18 +158,27 @@ while not quit:
while y <= bb.height:
render.drawLine(newP2d(bb.left, y) * xform, newP2d(bb.width, y) * xform)
y += side.float32
-
+
render.setDrawColor 255,255,255,255
for i in 0.. elapsed_time_sec:
- elapsed_time_sec = current_time_sec
+ # fpsman.delay
+ # delay(0)
+ let current_time = getTicks().uint
+ if not freeze and current_time - elapsed_time > step * 50:
+ elapsed_time = current_time
next_step(current_grid[], next_grid[])
+
+when defined(wasm):
+ emscripten_set_main_loop_arg(mainloop, nil, -1, 1)
+else:
+ while not quit:
+ main_loop(nil)
+ delay(0)
+
destroy render
destroy window
\ No newline at end of file