first sorta working port
[fishladder.git] / marblecomp.c
index d9f8cd8f0504306b5c9f3f4b8c01db830c5a7933..07dbd7c5514d80f2535e92f3de939d5964ca2ac3 100644 (file)
 
 #define SDL_MAIN_HANDLED
 
+#define STB_DS_IMPLEMENTATION
+#include "vg/submodules/stb/stb_ds.h"
+
 #include "vg/vg.h"
-#include "fishladder_vg1.c"
+
 
 struct {
    enum mc_op {
@@ -19,9 +22,14 @@ struct {
       k_mc_op_clientloading
    }
    op;
+
+   v3f mouse_ws;
 }
 static marblecomp = { .op = k_mc_op_clientloading };
 
+#include "input.h"
+#include "fishladder_vg1.c"
+
 int main( int argc, char *argv[] ){
    vg_mem.use_libc_malloc = 0;
    vg_set_mem_quota( 80*1024*1024 );
@@ -44,17 +52,40 @@ vg_info("            '        ' '--' [] '----- '----- '     ' '---'  "
 }
 
 static void async_call_ready( void *payload, u32 size ){
+   _mc_vg1_start();
    marblecomp.op = k_mc_op_none;
 }
 
 static void vg_load(void){
    /* --------------------- */
+   _mc_vg1_register();
+       _mc_resource_load_main();
    vg_bake_shaders();
    vg_async_call( async_call_ready, NULL, 0 );
 }
 
+void _mc_vg1_projection_update(void){
+   /*
+    * Reproject screenspace mouse into world
+    */
+
+   marblecomp.mouse_ws[0] =  ((vg.mouse_pos[0]/(f32)vg.window_x)-0.5f)*2.0f;
+   marblecomp.mouse_ws[1] = -((vg.mouse_pos[1]/(f32)vg.window_y)-0.5f)*2.0f;
+   marblecomp.mouse_ws[2] = 1.0f;
+   
+   m3x3f inverse;
+   m3x3_inv( vg.pv, inverse ); 
+   m3x3_mulv( inverse, marblecomp.mouse_ws, marblecomp.mouse_ws );
+
+   vg_info( "VG %f %f\n", vg.mouse_pos[0], vg.mouse_pos[1] );
+   vg_info( "WS %f %f\n", marblecomp.mouse_ws[0], marblecomp.mouse_ws[1] );
+}
+
+
 static void vg_pre_update(void){
    if( marblecomp.op == k_mc_op_clientloading ) return;
+   skaterift_preupdate_inputs();
+   _mc_vg1_update();
 }
 
 static void vg_fixed_update(void){
@@ -63,9 +94,11 @@ static void vg_fixed_update(void){
 
 static void vg_post_update(void){
    if( marblecomp.op == k_mc_op_clientloading ) return;
+   _mc_vg1_projection_update();
 }
 
 static void vg_framebuffer_resize( int w, int h ){
+   _mc_vg1_framebuffer_resize(w,h);
 }
 
 static void vg_render(void){
@@ -81,8 +114,7 @@ static void vg_render(void){
 
    glClearColor( 0.0f, 0.3f, 0.5f, 0.0f );
    glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
-
-   m4x4_identity( vg.pv );
+   _mc_vg1_render();
 
    glDisable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
@@ -91,4 +123,6 @@ static void vg_render(void){
 
 static void vg_gui(void){
    if( marblecomp.op == k_mc_op_clientloading ) return;
+   vg_ui.wants_mouse = 1;
+   _mc_vg1_ui();
 }