#include "player.h"
#include "gui.h"
#include "menu.h"
+#include "pointcloud.h"
/*
* Checks string equality but does a hash check first
/* generic reciever */
VG_STATIC void workshop_async_any_complete( void *data, u32 size )
{
- workshop_end_op();
+ skaterift_end_op();
}
/*
*/
VG_STATIC void workshop_op_item_scan(void)
{
- workshop_begin_op( k_workshop_op_item_scan );
+ skaterift_begin_op( k_workshop_op_item_scan );
vg_loader_start( workshop_scan_thread, NULL );
}
player_vector_angles( localplayer.cam_override_angles, dir, 1.0f, 0.0f );
v3f lookat;
- if( shop->type == k_skateshop_type_boardshop ){
+ if( shop->type == k_skateshop_type_boardshop ||
+ shop->type == k_skateshop_type_worldshop ){
ent_marker *display = mdl_arritm( &world->ent_marker,
mdl_entity_id_id(shop->boards.id_display) );
global_skateshop_exit();
}
}
+ else if( shop->type == k_skateshop_type_worldshop ){
+ gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
+
+ v2f input;
+ joystick_state( k_srjoystick_steer, input );
+ pointcloud.control[0] += input[0] * vg.time_delta;
+ pointcloud.control[2] += input[1] * vg.time_delta;
+
+ pointcloud.control[0] = vg_clampf( pointcloud.control[0], -10.0f, 10.0f );
+ pointcloud.control[2] = vg_clampf( pointcloud.control[2], -10.0f, 10.0f );
+
+ if( button_press( k_srbind_trick1 ) ){
+ pointcloud.control[3] += vg.time_delta*0.2f;
+ }
+ if( button_press( k_srbind_trick0 ) ){
+ pointcloud.control[3] -= vg.time_delta*0.2f;
+}
+ pointcloud.control[3] = vg_clampf( pointcloud.control[3], 0.001f, 10.0f );
+ }
else{
vg_fatal_error( "Unknown store (%u)\n", shop->type );
}
{
}
+VG_STATIC void skateshop_render_worldshop(void)
+{
+ world_instance *world = get_active_world();
+
+ m4x3f mmdl;
+ ent_skateshop *shop = global_skateshop.ptr_ent;
+ ent_marker *mark_display = mdl_arritm( &world->ent_marker,
+ mdl_entity_id_id(shop->worlds.id_display));
+ mdl_transform_m4x3( &mark_display->transform, mmdl );
+
+ /* TODO? ... */
+ v3f vol;
+ v3_sub( world->scene_geo.bbx[1], world->scene_geo.bbx[0], vol );
+
+ v2f rect = { 1.0f, 1.0f },
+ map = { vol[0], vol[2] },
+ result;
+
+ f32 rp = rect[0] * map[1],
+ rc = rect[1] * map[0];
+
+ u32 axis, other;
+ if( rc > rp ) axis = 0;
+ else axis = 1;
+ other = axis ^ 0x1;
+
+ result[axis] = rect[axis];
+ result[other] = (rect[axis] * map[other]) / map[axis];
+
+ m4x3f mlocal, mx;
+ m4x3_identity( mlocal );
+
+ mlocal[0][0] = result[0];
+ mlocal[2][2] = result[1];
+ mlocal[1][1] = (vol[1]/vol[0]) * mlocal[0][0];
+ mlocal[3][0] = (rect[0]-result[0])*0.5f - rect[0]*0.5f; /* sea level? */
+ mlocal[3][2] = (rect[1]-result[1])*0.5f - rect[1]*0.5f;
+ m4x3_mul( mmdl, mlocal, mx );
+
+#if 1
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE, GL_ONE);
+ glDisable(GL_DEPTH_TEST);
+#endif
+ pointcloud_render( world, &main_camera, mx );
+ glDisable(GL_BLEND);
+ glEnable(GL_DEPTH_TEST);
+}
+
/*
* World: render event
*/
else if( shop->type == k_skateshop_type_charshop ){
skateshop_render_charshop();
}
+ else if( shop->type == k_skateshop_type_worldshop ){
+ skateshop_render_worldshop();
+ }
else{
vg_fatal_error( "Unknown store (%u)\n", shop->type );
}
vg_info( "skateshop_call\n" );
if( menu.active ) return;
+ if( skaterift.async_op != k_async_op_none ) return;
if( call->function == k_ent_function_trigger ){
if( localplayer.subsystem != k_player_subsystem_walk ){