geometra/src/main.ml

67 lines
1.7 KiB
OCaml

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))