_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):
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)
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']))
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']))
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 )
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
*/
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 );
}
}
}
+ 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 );
}
}
}
+static void skateshop_world_preupdate( world_instance *world ){
+ for( u32 i=0; i<mdl_arrcount(&world->ent_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);
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 );
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
}
/*
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 );
}
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();
+ }
}
}
}
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;
};
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{
id_info;
}
worlds;
+
+ struct{
+ u32 id_lever;
+ }
+ server;
};
};
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;
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 );
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 );