audio_unlock();
}
+VG_STATIC
+enum audio_sprite_type world_audio_sample_sprite_random(v3f origin, v3f output);
VG_STATIC void audio_ambient_sprites_update( world_instance *world, v3f co )
{
static float accum = 0.0f;
if( sprite_type != k_audio_sprite_type_none ){
if( sprite_type == k_audio_sprite_type_grass ){
- audio_ambient_sprite_play( sprite_pos, &audio_grass[rand()%4] );
+ audio_ambient_sprite_play( sprite_pos, &audio_grass[vg_randu32()%4] );
}
else if( sprite_type == k_audio_sprite_type_water ){
- if( world->water.enabled )
- audio_ambient_sprite_play( sprite_pos, &audio_water[rand()%6] );
+ if( world->water.enabled ){
+ audio_ambient_sprite_play( sprite_pos,
+ &audio_water[vg_randu32()%6] );
+ }
}
}
}
("index",c_uint32)]
#}
-class ent_skateshop(Structure):
+# Skateshop
+# ---------------------------------------------------------------
+class ent_skateshop_characters(Structure):
#{
- _fields_ = [("transform",mdl_transform),
- ("id_display",c_uint32),
+ _fields_ = [("id_display",c_uint32),
+ ("id_info",c_uint32)]
+#}
+class ent_skateshop_boards(Structure):
+#{
+ _fields_ = [("id_display",c_uint32),
("id_info",c_uint32),
- ("id_rack",c_uint32),
- ("id_camera",c_uint32)]
+ ("id_rack",c_uint32)]
+#}
+class ent_skateshop_anon_union(Union):
+#{
+ _fields_ = [("boards",ent_skateshop_boards),
+ ("character",ent_skateshop_characters)]
+#}
+class ent_skateshop(Structure):
+#{
+ _fields_ = [("transform",mdl_transform), ("type",c_uint32),
+ ("id_camera",c_uint32),
+ ("_anonymous_union",ent_skateshop_anon_union)]
#}
class ent_swspreview(Structure):
("id_display1",c_uint32)]
#}
+# Menu
+# -----------------------------------------------------------------
class ent_menuitem_slider(Structure):
#{
_fields_ = [("id_min",c_uint32),
("id_handle",c_uint32),
("pstr_data",c_uint32)]
#}
-
class ent_menuitem_button(Structure):
#{
_fields_ = [("pstr",c_uint32)]
#}
-
class ent_menuitem_checkmark(Structure):
#{
_fields_ = [("id_check",c_uint32),
("pstr_data",c_uint32),
("offset",c_float*3)]
#}
-
class ent_menuitem_page(Structure):
#{
_fields_ = [("pstr_name",c_uint32),
("id_entrypoint",c_uint32),
("id_viewpoint",c_uint32)]
#}
-
class ent_menuitem_anon_union(Union):
#{
_fields_ = [("slider",ent_menuitem_slider),
("checkmark",ent_menuitem_checkmark),
("page",ent_menuitem_page)]
#}
-
class ent_menuitem(Structure):
#{
_fields_ = [("type",c_uint32), ("groups",c_uint32),
elif ent_type == 'ent_skateshop':#{
skateshop = ent_skateshop()
obj_data = obj.SR_data.ent_skateshop[0]
- skateshop.id_display = sr_entity_id( obj_data.mark_display )
- skateshop.id_info = sr_entity_id( obj_data.mark_info )
- skateshop.id_rack = sr_entity_id( obj_data.mark_rack )
+ skateshop.type = int(obj_data.tipo)
+ if skateshop.type == 0:#{
+ boardshop = skateshop._anonymous_union.boards
+ boardshop.id_display = sr_entity_id( obj_data.mark_display )
+ boardshop.id_info = sr_entity_id( obj_data.mark_info )
+ boardshop.id_rack = sr_entity_id( obj_data.mark_rack )
+ #}
+ elif skateshop.type == 1:#{
+ charshop = skateshop._anonymous_union.character
+ charshop.id_display = sr_entity_id( obj_data.mark_display )
+ charshop.id_info = sr_entity_id( obj_data.mark_info )
+ #}
skateshop.id_camera = sr_entity_id( obj_data.cam )
compile_obj_transform( obj, skateshop.transform )
sr_ent_push(skateshop)
class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup):
#{
+ tipo: bpy.props.EnumProperty( name='Type',
+ items=[('0','boards',''),
+ ('1','character','')] )
mark_rack: bpy.props.PointerProperty( \
type=bpy.types.Object, name="Board Rack", \
poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker']))
#}
#}
elif ent_type == 'ent_skateshop':#{
- cc = (0.0,0.9,0.6)
- cc1 = (0.4,0.9,0.2)
- cc2 = (0.9,0.6,0.1)
-
data = obj.SR_data.ent_skateshop[0]
display = data.mark_display
info = data.mark_info
- rack = data.mark_rack
- rack_cu = Vector((3.15,2.0,0.1))*0.5
- rack_co = Vector((0.0,0.0,0.0))
- display_cu = Vector((0.3,1.2,0.1))*0.5
- display_co = Vector((0.0,0.0,0.1))*0.5
- info_cu = Vector((1.2,0.01,0.3))*0.5
- info_co = Vector((0.0,0.0,0.0))*0.5
+ if data.tipo == '0':#{
+ cc = (0.0,0.9,0.6)
+ cc1 = (0.4,0.9,0.2)
+ cc2 = (0.9,0.6,0.1)
+
+ rack = data.mark_rack
+
+ rack_cu = Vector((3.15,2.0,0.1))*0.5
+ rack_co = Vector((0.0,0.0,0.0))
+ display_cu = Vector((0.3,1.2,0.1))*0.5
+ display_co = Vector((0.0,0.0,0.1))*0.5
+ info_cu = Vector((1.2,0.01,0.3))*0.5
+ info_co = Vector((0.0,0.0,0.0))*0.5
+ #}
+ elif data.tipo == '1':#{
+ rack = None
+ cc1 = (1.0,0.0,0.0)
+ cc2 = (1.0,0.5,0.0)
+ display_cu = Vector((0.4,0.4,2.0))*0.5
+ display_co = Vector((0.0,0.0,1.0))*0.5
+ info_cu = Vector((1.2,0.01,0.3))*0.5
+ info_co = Vector((0.0,0.0,0.0))*0.5
+ #}
if rack:
cv_draw_ucube( rack.matrix_world, cc, rack_cu, rack_co )
/*
* VG event preupdate
*/
+void temp_update_playermodel(void);
VG_STATIC void global_skateshop_preupdate(void)
{
float rate = vg_minf( 1.0f, vg.time_frame_delta * 2.0f );
world_instance *world = get_active_world();
ent_skateshop *shop = global_skateshop.ptr_ent;
+
+ /* camera positioning */
ent_camera *ref = mdl_arritm( &world->ent_camera,
mdl_entity_id_id(shop->id_camera) );
- ent_marker *display = mdl_arritm( &world->ent_marker,
- mdl_entity_id_id(shop->id_display) );
-
+
v3f dir = {0.0f,-1.0f,0.0f};
mdl_transform_vector( &ref->transform, dir, dir );
player_vector_angles( localplayer.cam_override_angles, dir, 1.0f, 0.0f );
-
+
v3f lookat;
- v3_sub( display->transform.co, localplayer.rb.co, lookat );
-
+ if( shop->type == k_skateshop_type_boardshop ){
+ ent_marker *display = mdl_arritm( &world->ent_marker,
+ mdl_entity_id_id(shop->boards.id_display) );
+
+ v3_sub( display->transform.co, localplayer.rb.co, lookat );
+
+ }
+ else if( shop->type == k_skateshop_type_charshop ){
+ v3_sub( ref->transform.co, localplayer.rb.co, lookat );
+ }
+ else{
+ vg_fatal_error( "Unknown store (%u)\n", shop->type );
+ }
+
q_axis_angle( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f},
atan2f(lookat[0],lookat[2]) );
localplayer.cam_override_fov = ref->fov;
localplayer.cam_override_strength = global_skateshop.factive;
- gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
- gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
+ /* input */
+ if( shop->type == k_skateshop_type_boardshop ){
+ gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
+ gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
- int moved = 0;
- struct cache_board *selected_cache = skateshop_selected_cache_if_loaded();
+ struct cache_board *selected_cache = skateshop_selected_cache_if_loaded();
- if( selected_cache ){
- gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
- }
+ if( selected_cache ){
+ gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
+ }
- /*
- * Controls
- * ----------------------
- */
+ /*
+ * Controls
+ * ----------------------
+ */
- if( global_skateshop.interaction_cooldown > 0.0f ){
- global_skateshop.interaction_cooldown -= vg.time_delta;
- return;
- }
-
- if( button_down( k_srbind_mleft ) ){
- if( global_skateshop.selected_registry_id > 0 ){
- global_skateshop.selected_registry_id --;
- moved = 1;
+ if( button_down( k_srbind_mleft ) ){
+ if( global_skateshop.selected_registry_id > 0 ){
+ global_skateshop.selected_registry_id --;
+ }
}
- }
- if( button_down( k_srbind_mright ) ){
- if( global_skateshop.selected_registry_id+1 <
- global_skateshop.registry_count )
- {
- global_skateshop.selected_registry_id ++;
- moved = 1;
+ if( button_down( k_srbind_mright ) ){
+ if( global_skateshop.selected_registry_id+1 <
+ global_skateshop.registry_count )
+ {
+ global_skateshop.selected_registry_id ++;
+ }
}
- }
- if( moved ){
- global_skateshop.interaction_cooldown = 0.125f;
- return;
- }
+ if( selected_cache && button_down( k_srbind_maccept ) ){
+ vg_info( "chose board from skateshop (%u)\n",
+ global_skateshop.selected_registry_id );
- if( selected_cache && button_down( k_srbind_maccept ) ){
- vg_info( "chose board from skateshop (%u)\n",
- global_skateshop.selected_registry_id );
+ if( localplayer.board_view_slot ){
+ unwatch_cache_board( localplayer.board_view_slot );
+ }
+
+ localplayer.board_view_slot = selected_cache;
+ watch_cache_board( localplayer.board_view_slot );
- if( localplayer.board_view_slot ){
- unwatch_cache_board( localplayer.board_view_slot );
+ global_skateshop_exit();
+ return;
+ }
+ }
+ else if( shop->type == k_skateshop_type_charshop ){
+ gui_helper_action( axis_display_string( k_sraxis_mbrowse_h ), "browse" );
+ gui_helper_action( button_display_string( k_srbind_mback ), "exit" );
+ gui_helper_action( button_display_string( k_srbind_maccept ), "pick" );
+
+ if( button_down( k_srbind_mleft ) ){
+ if( cl_playermdl_id > 0 ){
+ cl_playermdl_id --;
+ }
+ else{
+ cl_playermdl_id = 2; /* HACK */
+ }
+ temp_update_playermodel(); /* HACK */
}
- localplayer.board_view_slot = selected_cache;
- watch_cache_board( localplayer.board_view_slot );
+ if( button_down( k_srbind_mright ) ){
+ if( cl_playermdl_id+1 < 3 ){
+ cl_playermdl_id ++;
+ }
+ else{
+ cl_playermdl_id = 0; /* HACK */
+ }
+ temp_update_playermodel(); /* HACK */
+ /*lol*/
+ }
- global_skateshop_exit();
- return;
+ if( button_down( k_srbind_maccept ) ){
+ global_skateshop_exit();
+ }
+ }
+ else{
+ vg_fatal_error( "Unknown store (%u)\n", shop->type );
}
if( button_down( k_srbind_mback ) ){
}
}
-/*
- * World: render event
- */
-VG_STATIC void skateshop_render(void)
+VG_STATIC void skateshop_render_boardshop(void)
{
- if( !global_skateshop.active ) return;
-
- ent_skateshop *shop = global_skateshop.ptr_ent;
world_instance *world = get_active_world();
+ ent_skateshop *shop = global_skateshop.ptr_ent;
u32 slot_count = vg_list_size(global_skateshop.shop_view_slots);
ent_marker *mark_rack = mdl_arritm( &world->ent_marker,
- mdl_entity_id_id(shop->id_rack)),
+ mdl_entity_id_id(shop->boards.id_rack)),
*mark_display = mdl_arritm( &world->ent_marker,
- mdl_entity_id_id(shop->id_display));
+ mdl_entity_id_id(shop->boards.id_display));
int visibility[ SKATESHOP_VIEW_SLOT_MAX ];
SDL_AtomicLock( &global_skateshop.sl_cache_access );
}
ent_marker *mark_info = mdl_arritm( &world->ent_marker,
- mdl_entity_id_id(shop->id_info));
+ mdl_entity_id_id(shop->boards.id_info));
m4x3f mtext, mrack;
mdl_transform_m4x3( &mark_info->transform, mtext );
mdl_transform_m4x3( &mark_rack->transform, mrack );
info->author_name, &main_camera, mmdl );
}
+VG_STATIC void skateshop_render_charshop(void)
+{
+}
+
+/*
+ * World: render event
+ */
+VG_STATIC void skateshop_render(void)
+{
+ if( !global_skateshop.active ) return;
+
+ ent_skateshop *shop = global_skateshop.ptr_ent;
+
+ if( shop->type == k_skateshop_type_boardshop ){
+ skateshop_render_boardshop();
+ }
+ else if( shop->type == k_skateshop_type_charshop ){
+ skateshop_render_charshop();
+ }
+ else{
+ vg_fatal_error( "Unknown store (%u)\n", shop->type );
+ }
+}
+
/*
* Entity logic: entrance event
*/
localplayer._walk.move_speed = 0.0f;
global_skateshop.ptr_ent = shop;
- skateshop_update_viewpage();
- workshop_op_item_scan();
+ if( shop->type == k_skateshop_type_boardshop ){
+ skateshop_update_viewpage();
+ workshop_op_item_scan();
+ }
}
}
registry_count;
u32 selected_registry_id;
- float interaction_cooldown;
}
static global_skateshop;
u32 pstr_alias;
};
+enum skateshop_type{
+ k_skateshop_type_boardshop,
+ k_skateshop_type_charshop
+};
+
struct ent_skateshop{
mdl_transform transform;
- u32 id_display,
- id_info,
- id_rack,
- id_camera;
+ u32 type, id_camera;
+
+ union{
+ struct{
+ u32 id_display,
+ id_info,
+ id_rack;
+ }
+ boards;
+
+ struct{
+ u32 id_display,
+ id_info;
+ }
+ character;
+ };
};
struct ent_swspreview{
if( stress ){
temp_filter = 20;
audio_lock();
- audio_oneshot_3d( &audio_hits[rand()%5], stress->co, 20.0f, 1.0f );
+ audio_oneshot_3d( &audio_hits[vg_randu32()%5], stress->co, 20.0f, 1.0f );
audio_unlock();
}
}
s->state.jump_time = vg.time;
audio_lock();
- audio_oneshot_3d( &audio_jumps[rand()%2], player->rb.co, 40.0f, 1.0f );
+ audio_oneshot_3d( &audio_jumps[vg_randu32()%2], player->rb.co, 40.0f, 1.0f );
audio_unlock();
}
}
if( !prev_contacts[i] ){
v3f co;
m4x3_mulv( player->rb.to_world, wheels[i].pos, co );
- audio_oneshot_3d( &audio_taps[rand()%4], co, 40.0f, 0.75f );
+ audio_oneshot_3d( &audio_taps[vg_randu32()%4], co, 40.0f, 0.75f );
}
}
audio_unlock();
if( s->state.activity == k_skate_activity_ground ){
if( (fabsf(s->state.slip) > 0.75f) ){
- audio_oneshot_3d( &audio_lands[rand()%2+3], player->rb.co,
+ audio_oneshot_3d( &audio_lands[vg_randu32()%2+3], player->rb.co,
40.0f, 1.0f );
}
else{
- audio_oneshot_3d( &audio_lands[rand()%3], player->rb.co,
+ audio_oneshot_3d( &audio_lands[vg_randu32()%3], player->rb.co,
40.0f, 1.0f );
}
}
float curspeed = v3_length( player->rb.v ),
kickspeed = vg_clampf( curspeed*(1.0f/40.0f), 0.0f, 1.0f ),
- kicks = (vg_randf()-0.5f)*2.0f*kickspeed,
+ kicks = (vg_randf64()-0.5f)*2.0f*kickspeed,
sign = vg_signf( kicks );
s->wobble[0] = vg_lerpf( s->wobble[0], kicks*kicks*sign, 6.0f*vg.time_delta);
audio_lock();
if( w->surface == k_surface_prop_concrete ){
audio_oneshot_3d(
- &audio_footsteps[rand()%vg_list_size(audio_footsteps)],
+ &audio_footsteps[vg_randu32()%vg_list_size(audio_footsteps)],
player->rb.co, 40.0f, 1.0f
);
}
else if( w->surface == k_surface_prop_grass ){
audio_oneshot_3d(
- &audio_footsteps_grass[rand()%vg_list_size(audio_footsteps_grass)],
+ &audio_footsteps_grass[vg_randu32()%vg_list_size(audio_footsteps_grass)],
player->rb.co, 40.0f, 1.0f
);
}
else if( w->surface == k_surface_prop_wood ){
audio_oneshot_3d(
- &audio_footsteps_wood[rand()%vg_list_size(audio_footsteps_wood)],
+ &audio_footsteps_wood[vg_randu32()%vg_list_size(audio_footsteps_wood)],
player->rb.co, 40.0f, 1.0f
);
}
/* 'systems' are completely loaded now */
/* load home world */
-#if 1
world_load( 0, "maps/mp_spawn.mdl" );
-#else
- world_load( 0, "maps/mp_mtzero.mdl" );
-#endif
-
-#if 0
- world_load( &world_global.worlds[1], "maps/mp_gridmap.mdl" );
- world_link_nonlocal_gates( 0, 1 );
- world_load( &world_global.worlds[2], "maps/mp_mtzero.mdl" );
- world_link_nonlocal_gates( 0, 2 );
-#endif
+ world_load( 1, "maps/mp_mtzero.mdl" );
vg_console_load_autos();
menu_link();
if( volume->type == k_volume_subtype_particle ){
float *co = alloca( sizeof(float)*3 );
- co[0] = vg_randf()*2.0f-1.0f;
- co[1] = vg_randf()*2.0f-1.0f;
- co[2] = vg_randf()*2.0f-1.0f;
+ co[0] = vg_randf64()*2.0f-1.0f;
+ co[1] = vg_randf64()*2.0f-1.0f;
+ co[2] = vg_randf64()*2.0f-1.0f;
m4x3_mulv( volume->to_world, co, co );
call->function = k_ent_function_particle_spawn;
else
vg_fatal_error( "ent_audio_call (invalid function id)" );
- float chance = vg_randf()*100.0f,
+ float chance = vg_randf64()*100.0f,
bar = 0.0f;
for( u32 i=0; i<audio->clip_count; i++ ){
*/
VG_STATIC
-enum audio_sprite_type world_audio_sample_sprite_random(v3f origin, v3f output);
+enum audio_sprite_type world_audio_sample_sprite_kandom(v3f origin, v3f output);
VG_STATIC void world_audio_sample_distances( v3f co, int *index, float *value );
#include "audio.h"
VG_STATIC
enum audio_sprite_type world_audio_sample_sprite_random(v3f origin, v3f output)
{
- v3f chance = { (vg_randf()-0.5f) * 30.0f,
+ v3f chance = { (vg_randf64()-0.5f) * 30.0f,
8.0f,
- (vg_randf()-0.5f) * 30.0f };
+ (vg_randf64()-0.5f) * 30.0f };
v3f pos;
v3_add( chance, origin, pos );
float angle = v3_dot(hit->normal,(v3f){0.0f,1.0f,0.0f});
q_axis_angle( qsurface, axis, angle );
- q_axis_angle( qrandom, (v3f){0.0f,1.0f,0.0f}, vg_randf()*VG_TAUf );
+ q_axis_angle( qrandom, (v3f){0.0f,1.0f,0.0f}, vg_randf64()*VG_TAUf );
q_mul( qsurface, qrandom, qsurface );
q_m3x3( qsurface, transform );
v3_copy( hit->pos, transform[3] );
for( u32 i=0; i<particles; i++ ){
v3f pos;
- v3_mul( volume, (v3f){ vg_randf(), 1000.0f, vg_randf() }, pos );
+ v3_mul( volume, (v3f){ vg_randf64(), 1000.0f, vg_randf64() }, pos );
pos[1] = 1000.0f;
v3_add( pos, world->scene_geo.bbx[0], pos );
VG_STATIC void world_load( u32 index, const char *path )
{
+ vg_rand_seed( 9001 );
+
world_instance *world = &world_global.worlds[index];
world_init_blank( world );
world->status = k_world_status_loading;
rb_presolve_contacts( rb_contact_buffer, rb_contact_count );
for( int i=0; i<rb_contact_count; i++ ){
- rb_contact_restitution( rb_contact_buffer+i, vg_randf() );
+ rb_contact_restitution( rb_contact_buffer+i, vg_randf64() );
}
for( int i=0; i<6; i++ ){
v3_muls( origin, -1.0f, particle->mlocal[3] );
v3_copy( world_co, particle->obj.rb.co );
- v3_muls( imp_v, 1.0f+vg_randf(), particle->obj.rb.v );
+ v3_muls( imp_v, 1.0f+vg_randf64(), particle->obj.rb.v );
particle->obj.rb.v[1] += 2.0f;
v4_copy( q, particle->obj.rb.q );
- particle->obj.rb.w[0] = vg_randf()*2.0f-1.0f;
- particle->obj.rb.w[1] = vg_randf()*2.0f-1.0f;
- particle->obj.rb.w[2] = vg_randf()*2.0f-1.0f;
+ particle->obj.rb.w[0] = vg_randf64()*2.0f-1.0f;
+ particle->obj.rb.w[1] = vg_randf64()*2.0f-1.0f;
+ particle->obj.rb.w[2] = vg_randf64()*2.0f-1.0f;
particle->obj.type = k_rb_shape_sphere;
particle->obj.inf.sphere.radius = r*0.6f;