67 lines
1.7 KiB
OCaml
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))
|