From: hgn Date: Mon, 15 May 2023 16:12:04 +0000 (+0100) Subject: maths api changes X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=ec90a4b46865009c1e1b1679f6926e35d2ee3f12;p=carveJwlIkooP6JGAAIwe30JlM.git maths api changes --- diff --git a/audio.h b/audio.h index 51445b6..e6e76bd 100644 --- a/audio.h +++ b/audio.h @@ -186,6 +186,8 @@ VG_STATIC void audio_ambient_sprite_play( v3f co, audio_clip *clip ) 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; @@ -201,11 +203,13 @@ VG_STATIC void audio_ambient_sprites_update( world_instance *world, v3f co ) 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] ); + } } } } diff --git a/blender_export.py b/blender_export.py index b7068fe..f271237 100644 --- a/blender_export.py +++ b/blender_export.py @@ -340,13 +340,29 @@ class ent_traffic(Structure): ("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): @@ -356,6 +372,8 @@ class ent_swspreview(Structure): ("id_display1",c_uint32)] #} +# Menu +# ----------------------------------------------------------------- class ent_menuitem_slider(Structure): #{ _fields_ = [("id_min",c_uint32), @@ -363,26 +381,22 @@ class ent_menuitem_slider(Structure): ("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), @@ -390,7 +404,6 @@ class ent_menuitem_anon_union(Union): ("checkmark",ent_menuitem_checkmark), ("page",ent_menuitem_page)] #} - class ent_menuitem(Structure): #{ _fields_ = [("type",c_uint32), ("groups",c_uint32), @@ -1658,9 +1671,18 @@ def sr_compile( collection ): 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) @@ -2774,6 +2796,9 @@ class SR_OBJECT_ENT_TRAFFIC(bpy.types.PropertyGroup): 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'])) @@ -3861,21 +3886,33 @@ def cv_draw(): #} #} 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 ) diff --git a/ent_skateshop.c b/ent_skateshop.c index 92e7660..e7049b5 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -451,6 +451,7 @@ VG_STATIC struct cache_board *skateshop_selected_cache_if_loaded(void) /* * 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 ); @@ -462,18 +463,30 @@ VG_STATIC void global_skateshop_preupdate(void) 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]) ); @@ -481,60 +494,83 @@ VG_STATIC void global_skateshop_preupdate(void) 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 ) ){ @@ -543,22 +579,17 @@ VG_STATIC void global_skateshop_preupdate(void) } } -/* - * 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 ); @@ -607,7 +638,7 @@ fade_out:; } 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 ); @@ -681,6 +712,30 @@ fade_out:; 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 */ @@ -708,8 +763,10 @@ VG_STATIC void ent_skateshop_call( world_instance *world, ent_call *call ) 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(); + } } } diff --git a/ent_skateshop.h b/ent_skateshop.h index 4f84f7a..2cc5d5a 100644 --- a/ent_skateshop.h +++ b/ent_skateshop.h @@ -63,7 +63,6 @@ struct{ registry_count; u32 selected_registry_id; - float interaction_cooldown; } static global_skateshop; diff --git a/entity.h b/entity.h index a92f4bf..bf6b2d5 100644 --- a/entity.h +++ b/entity.h @@ -215,12 +215,29 @@ struct ent_marker{ 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{ diff --git a/maps_src/mp_gridmap.mdl b/maps_src/mp_gridmap.mdl index 84df958..ea3174f 100644 Binary files a/maps_src/mp_gridmap.mdl and b/maps_src/mp_gridmap.mdl differ diff --git a/maps_src/mp_mtzero.mdl b/maps_src/mp_mtzero.mdl index df5243b..25e9727 100644 Binary files a/maps_src/mp_mtzero.mdl and b/maps_src/mp_mtzero.mdl differ diff --git a/maps_src/mp_spawn.mdl b/maps_src/mp_spawn.mdl index 9cdba1b..87f130e 100644 Binary files a/maps_src/mp_spawn.mdl and b/maps_src/mp_spawn.mdl differ diff --git a/models_src/ch_jordan.mdl b/models_src/ch_jordan.mdl index f2bc806..5d12a1a 100644 Binary files a/models_src/ch_jordan.mdl and b/models_src/ch_jordan.mdl differ diff --git a/models_src/ch_new.mdl b/models_src/ch_new.mdl index 086ffea..4e6b96f 100644 Binary files a/models_src/ch_new.mdl and b/models_src/ch_new.mdl differ diff --git a/models_src/ch_outlaw.mdl b/models_src/ch_outlaw.mdl index 2e9eccd..04ac794 100644 Binary files a/models_src/ch_outlaw.mdl and b/models_src/ch_outlaw.mdl differ diff --git a/models_src/rs_buggy.mdl b/models_src/rs_buggy.mdl new file mode 100644 index 0000000..c814154 Binary files /dev/null and b/models_src/rs_buggy.mdl differ diff --git a/player_ragdoll.c b/player_ragdoll.c index a1733b7..7b53088 100644 --- a/player_ragdoll.c +++ b/player_ragdoll.c @@ -446,7 +446,7 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) 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(); } } diff --git a/player_skate.c b/player_skate.c index ae3272c..f38f6d4 100644 --- a/player_skate.c +++ b/player_skate.c @@ -980,7 +980,7 @@ VG_STATIC void skate_apply_jump_model( player_instance *player ) 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(); } } @@ -2196,7 +2196,7 @@ VG_STATIC void player__skate_update( player_instance *player ) 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(); @@ -2570,11 +2570,11 @@ begin_collision:; 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 ); } } @@ -2665,7 +2665,7 @@ VG_STATIC void player__skate_animate( player_instance *player, 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); diff --git a/player_walk.c b/player_walk.c index be2195f..c3b6c2e 100644 --- a/player_walk.c +++ b/player_walk.c @@ -652,19 +652,19 @@ VG_STATIC void player__walk_post_update( player_instance *player ) 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 ); } diff --git a/skaterift.c b/skaterift.c index 457aa22..9409bf3 100644 --- a/skaterift.c +++ b/skaterift.c @@ -139,18 +139,8 @@ VG_STATIC void vg_load(void) /* '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(); diff --git a/world.h b/world.h index 962b964..420523b 100644 --- a/world.h +++ b/world.h @@ -421,9 +421,9 @@ VG_STATIC void ent_volume_call( world_instance *world, ent_call *call ) 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; @@ -452,7 +452,7 @@ VG_STATIC void ent_audio_call( world_instance *world, ent_call *call ) 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; iclip_count; i++ ){ @@ -838,7 +838,7 @@ VG_STATIC struct world_surface *ray_hit_surface( world_instance *world, */ 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" @@ -849,9 +849,9 @@ VG_STATIC void world_audio_sample_distances( v3f co, int *index, float *value ); 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 ); diff --git a/world_gen.h b/world_gen.h index c274eac..c8c7fb7 100644 --- a/world_gen.h +++ b/world_gen.h @@ -39,7 +39,7 @@ VG_STATIC void world_add_blob( world_instance *world, 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] ); @@ -108,7 +108,7 @@ VG_STATIC void world_apply_procedural_foliage( world_instance *world, for( u32 i=0; iscene_geo.bbx[0], pos ); @@ -790,6 +790,8 @@ matched:; 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; diff --git a/world_routes.h b/world_routes.h index 1b46a36..9308daa 100644 --- a/world_routes.h +++ b/world_routes.h @@ -637,7 +637,7 @@ VG_STATIC void world_routes_fixedupdate( world_instance *world ) rb_presolve_contacts( rb_contact_buffer, rb_contact_count ); for( int i=0; imlocal[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;