From: hgn Date: Thu, 23 Nov 2023 15:59:34 +0000 (+0000) Subject: the great server lever X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=dd7d6eb0702cd9a0c97ab6da9ec577af0b797b88;p=carveJwlIkooP6JGAAIwe30JlM.git the great server lever --- diff --git a/blender_export.py b/blender_export.py index d397cd7..8b0bd10 100644 --- a/blender_export.py +++ b/blender_export.py @@ -382,17 +382,24 @@ class ent_skateshop_worlds(Structure): _fields_ = [("id_display",c_uint32), ("id_info",c_uint32)] #} +class ent_skateshop_server(Structure): +#{ + _fields_ = [("id_lever",c_uint32)] +#} class ent_skateshop_anon_union(Union): #{ _fields_ = [("boards",ent_skateshop_boards), ("character",ent_skateshop_characters), - ("worlds",ent_skateshop_worlds)] + ("worlds",ent_skateshop_worlds), + ("server",ent_skateshop_server)] #} class ent_skateshop(Structure): #{ _fields_ = [("transform",mdl_transform), ("type",c_uint32), ("id_camera",c_uint32), ("_anonymous_union",ent_skateshop_anon_union)] + + sr_functions = { 0: 'trigger' } #} class ent_swspreview(Structure): @@ -1889,6 +1896,10 @@ def sr_compile( collection ): worldshop.id_display = sr_entity_id( obj_data.mark_display ) worldshop.id_info = sr_entity_id( obj_data.mark_info ) #} + elif skateshop.type == 3:#{ + server = skateshop._anonymous_union.server + server.id_lever = sr_entity_id( obj_data.mark_display ) + #} skateshop.id_camera = sr_entity_id( obj_data.cam ) compile_obj_transform( obj, skateshop.transform ) sr_ent_push(skateshop) @@ -3170,7 +3181,8 @@ class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup): tipo: bpy.props.EnumProperty( name='Type', items=[('0','boards',''), ('1','character',''), - ('2','world','')] ) + ('2','world',''), + ('4','server','')] ) mark_rack: bpy.props.PointerProperty( \ type=bpy.types.Object, name="Board Rack", \ poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) @@ -3179,7 +3191,8 @@ class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup): poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) mark_info: bpy.props.PointerProperty( \ type=bpy.types.Object, name="Selected Board Info", \ - poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + poll=lambda self,obj: sr_filter_ent_type(obj,\ + ['ent_marker','ent_prop'])) cam: bpy.props.PointerProperty( \ type=bpy.types.Object, name="Viewpoint", \ poll=lambda self,obj: sr_filter_ent_type(obj,['ent_camera'])) @@ -4513,6 +4526,11 @@ def cv_draw():#{ display = None info = None #} + elif data.tipo == '4':#{ + rack = None + display = None + info = None + #} if rack: cv_draw_ucube( rack.matrix_world, cc, rack_cu, rack_co ) diff --git a/ent_skateshop.c b/ent_skateshop.c index c10352d..0084e19 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -216,6 +216,17 @@ static u16 skateshop_selected_cache_id(void){ else return 0; } +static void skateshop_server_helper_update(void){ + vg_str text; + vg_strnull( &text, global_skateshop.helper_toggle->text, + sizeof(global_skateshop.helper_toggle->text) ); + + if( network_client.user_intent == k_server_intent_online ) + vg_strcat( &text, "Disconnect" ); + else + vg_strcat( &text, "Go Online" ); +} + /* * VG event preupdate */ @@ -241,8 +252,14 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ 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 ) + else if( shop->type == k_skateshop_type_charshop ){ v3_sub( ref->transform.co, localplayer.rb.co, lookat ); + } + else if( shop->type == k_skateshop_type_server ){ + ent_prop *prop = mdl_arritm( &world->ent_prop, + mdl_entity_id_id(shop->server.id_lever) ); + v3_sub( prop->transform.co, localplayer.rb.co, lookat ); + } else vg_fatal_error( "Unknown store (%u)\n", shop->type ); @@ -392,6 +409,21 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ } } } + else if( shop->type == k_skateshop_type_server ){ + f64 delta = vg.time - network_client.last_intent_change; + + if( delta > 5.0 ){ + global_skateshop.helper_pick->greyed = 0; + if( button_down( k_srbind_maccept ) ){ + network_client.user_intent = !network_client.user_intent; + network_client.last_intent_change = vg.time_real; + skateshop_server_helper_update(); + } + } + else { + global_skateshop.helper_pick->greyed = 1; + } + } else{ vg_fatal_error( "Unknown store (%u)\n", shop->type ); } @@ -406,6 +438,25 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){ } } +static void skateshop_world_preupdate( world_instance *world ){ + for( u32 i=0; ient_skateshop); i++ ){ + ent_skateshop *shop = mdl_arritm( &world->ent_skateshop, i ); + + if( shop->type == k_skateshop_type_server ){ + f32 a = network_client.user_intent; + + vg_slewf( &network_client.fintent, a, vg.time_frame_delta ); + a = (vg_smoothstepf( network_client.fintent ) - 0.5f) * (VG_PIf/2.0f); + + ent_prop *lever = mdl_arritm( &world->ent_prop, + mdl_entity_id_id(shop->server.id_lever) ); + + /* we need parent transforms now? */ + q_axis_angle( lever->transform.q, (v3f){0,0,1}, a ); + } + } +} + static void skateshop_render_boardshop( ent_skateshop *shop ){ world_instance *world = world_current_instance(); u32 slot_count = vg_list_size(global_skateshop.shop_view_slots); @@ -467,11 +518,6 @@ fade_out:; mdl_transform_m4x3( &mark_info->transform, mtext ); mdl_transform_m4x3( &mark_rack->transform, mrack ); -#if 0 - const char *text_title = "Fish - Title"; - const char *text_author = "by Shaniqua"; -#endif - m4x3f mlocal, mmdl; m4x3_identity( mlocal ); @@ -647,20 +693,6 @@ static void skateshop_render_worldshop( ent_skateshop *shop ){ mlocal[3][1] = -scale1*0.3f; m4x3_mul( mtext, mlocal, mtextmdl ); font3d_simple_draw( 0, bufsubtext, &skaterift.cam, mtextmdl ); - -#if 0 - /* pointcloud */ - m4x3f mmdl; - mdl_transform_m4x3( &mark_display->transform, mmdl ); - m4x3_rotate_y( mmdl, vg.time * 0.2 ); - - glEnable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE); - glDisable(GL_DEPTH_TEST); - pointcloud_render( world, &skaterift.cam, mmdl ); - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); -#endif } /* @@ -673,6 +705,8 @@ static void skateshop_render( ent_skateshop *shop ){ skateshop_render_charshop( shop ); else if( shop->type == k_skateshop_type_worldshop ) skateshop_render_worldshop( shop ); + else if( shop->type == k_skateshop_type_server ){ + } else vg_fatal_error( "Unknown store (%u)\n", shop->type ); } @@ -725,6 +759,12 @@ static void ent_skateshop_call( world_instance *world, ent_call *call ){ ent_skateshop_helpers_pickable( "open rift" ); skateshop_op_world_scan(); } + else if( shop->type == k_skateshop_type_server ){ + vg_str text; + global_skateshop.helper_pick = gui_new_helper( + input_button_list[k_srbind_maccept], &text); + skateshop_server_helper_update(); + } } } diff --git a/ent_skateshop.h b/ent_skateshop.h index 5e9a0a8..d39e3d9 100644 --- a/ent_skateshop.h +++ b/ent_skateshop.h @@ -33,7 +33,12 @@ struct{ } render; - struct gui_helper *helper_pick, *helper_browse; + union { + struct gui_helper *helper_pick, *helper_toggle; + }; + + struct gui_helper *helper_browse; + addon_reg *reg_preview, *reg_loaded_preview; GLuint tex_preview, tex_preview_err; diff --git a/entity.h b/entity.h index c3b6694..c39d224 100644 --- a/entity.h +++ b/entity.h @@ -247,9 +247,11 @@ struct ent_marker{ }; enum skateshop_type{ - k_skateshop_type_boardshop, - k_skateshop_type_charshop, - k_skateshop_type_worldshop, + k_skateshop_type_boardshop = 0, + k_skateshop_type_charshop = 1, + k_skateshop_type_worldshop = 2, + k_skateshop_type_DELETED = 3, + k_skateshop_type_server = 4 }; struct ent_skateshop{ @@ -275,6 +277,11 @@ struct ent_skateshop{ id_info; } worlds; + + struct{ + u32 id_lever; + } + server; }; }; diff --git a/maps_src/dev_hub/main.mdl b/maps_src/dev_hub/main.mdl index 49a245e..ba17643 100644 Binary files a/maps_src/dev_hub/main.mdl and b/maps_src/dev_hub/main.mdl differ diff --git a/network.c b/network.c index 9238901..8833d19 100644 --- a/network.c +++ b/network.c @@ -445,6 +445,13 @@ static void network_update(void){ ESteamNetworkingConnectionState state = network_client.state; + if( network_client.user_intent == k_server_intent_offline ){ + if( state != k_ESteamNetworkingConnectionState_None ) + network_disconnect(); + + return; + } + if( state == k_ESteamNetworkingConnectionState_Connected ){ poll_remote_connection(); f64 frame_delta = vg.time_real - network_client.last_frame; diff --git a/network.h b/network.h index b643a1b..f57bfe5 100644 --- a/network.h +++ b/network.h @@ -63,11 +63,20 @@ struct { vg_pool request_pool; char server_adress[64]; + + enum server_intent { + k_server_intent_offline, + k_server_intent_online + } + user_intent; + f64 last_intent_change; + f32 fintent; /* yeah this shit really shouldnt be here but oh well */ } static network_client = { .auth_mode = eServerModeAuthentication, .state = k_ESteamNetworkingConnectionState_None, - .server_adress = "46.101.34.155" + .server_adress = "46.101.34.155", + .last_intent_change = -99999.9 }; static int packet_minsize( SteamNetworkingMessage_t *msg, u32 size ); diff --git a/skaterift.c b/skaterift.c index 2bc0e4c..14af6a7 100644 --- a/skaterift.c +++ b/skaterift.c @@ -286,6 +286,7 @@ static void vg_pre_update(void){ world_entity_focus_preupdate(); skaterift_replay_pre_update(); remote_sfx_pre_update(); + skateshop_world_preupdate( world_current_instance() ); world_update( world_current_instance(), localplayer.rb.co ); audio_ambient_sprites_update( world_current_instance(), localplayer.rb.co );