#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 {
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 );
}
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){
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){
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);
static void vg_gui(void){
if( marblecomp.op == k_mc_op_clientloading ) return;
+ vg_ui.wants_mouse = 1;
+ _mc_vg1_ui();
}