open Adam open S2 module TG = N2.Transform_graph module SG = N2.Sprite_graph module Scene = N2.Scene include (val Ohlog.logs "Main") let main () = debug (fun m -> m "initializing"); let wnd = Window.make ~title:"GEOMETRA" in info (fun m -> m "window initialized"); let ren = Renderer.make ~wnd in info (fun m -> m "renderer initialized"); let sg = SG.make () in SG.register_sprite_map sg "blocks" (Asset.load_sprite_map "blocks" ~dpi:192); SG.register_sprite_map sg "hud" (Asset.load_sprite_map "hud"); debug (fun m -> m "loaded assets"); let tg = TG.make () in let scene = Scene.load "main" ~tg ~sg in let root = Scene.get scene "root" in debug (fun m -> m "loaded scene"); let render time = begin let tf = TG.model (Scene.transform root) in begin let tx = 512.0 +. Float.sin (time *. 3.0) *. 20.0 in let ty = 400.0 in let _ = time in Mat2A.set tf ~tx ~ty ~sx:1.0 ~sy:1.0 end; Renderer.pre_draw ren; Renderer.clear ren (rgb24 0x131321); TG.update tg; SG.render sg ~ren; Renderer.post_draw ren; Gc.minor (); end in Window.event_loop wnd ~render; begin info (fun m -> m "quitting"); Window.destroy wnd; Renderer.destroy ren; end let () = Ohlog.init () ~min_level:TRACE; try main () with | Sdl.Error msg -> error (fun m -> m "SDL error: %s" msg) | Gl.Error (why, msg) -> error (fun m -> m "OpenGL error (%s): %s" why msg) | Asset.Error (path, msg) -> error (fun m -> m "failed to load %S: %s" path msg) | Failure msg -> error (fun m -> m "Fatal: %s" msg) | exn -> error (fun m -> m "Uncaught: %s" (Printexc.to_string exn))