From 5f34184cad016aa2f8ea530b3be009703459e981 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 25 Apr 2023 18:14:49 +0100 Subject: [PATCH] clean boardshop idea --- blender_export.py | 25 ++++++- ent_skateshop.c | 147 ++++++++++++++++++------------------------ entity.h | 12 +++- maps_src/mp_spawn.mdl | Bin 7388616 -> 7388824 bytes menu.h | 1 + player.h | 3 +- player_common.c | 2 + player_render.c | 6 ++ world.h | 3 +- world_gen.h | 1 + 10 files changed, 110 insertions(+), 90 deletions(-) diff --git a/blender_export.py b/blender_export.py index b533afe..00c2de4 100644 --- a/blender_export.py +++ b/blender_export.py @@ -30,7 +30,8 @@ sr_entity_list = [ ('ent_font', 'Font', '', 9 ), ('ent_font_variant', 'Font:Variant', '', 10 ), ('ent_traffic', 'Traffic Model', '', 11 ), - ('ent_skateshop', 'Skate Shop', '', 12 ) + ('ent_skateshop', 'Skate Shop', '', 12 ), + ('ent_camera', 'Camera', '', 13 ) ] def get_entity_enum_id( alias ): @@ -342,13 +343,21 @@ class ent_skateshop(Structure): _fields_ = [("transform",mdl_transform), ("id_display",c_uint32), ("id_info",c_uint32), - ("id_rack",c_uint32)] + ("id_rack",c_uint32), + ("id_camera",c_uint32)] +#} + +class ent_camera(Structure): +#{ + _fields_ = [("transform",mdl_transform), + ("fov",c_float)] #} def obj_ent_type( obj ): #{ if obj.type == 'ARMATURE': return 'mdl_armature' elif obj.type == 'LIGHT': return 'ent_light' + elif obj.type == 'CAMERA': return 'ent_camera' else: return obj.SR_data.ent_type #} @@ -1370,6 +1379,12 @@ def sr_compile( collection ): light.colour[3] = obj.data.energy sr_ent_push( light ) #} + elif ent_type == 'ent_camera': #{ + cam = ent_camera() + compile_obj_transform( obj, cam.transform ) + cam.fov = obj.data.angle + sr_ent_push(cam) + #} elif ent_type == 'ent_gate': #{ gate = ent_gate() obj_data = obj.SR_data.ent_gate[0] @@ -1498,6 +1513,7 @@ def sr_compile( collection ): 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.id_camera = sr_entity_id( obj_data.cam ) compile_obj_transform( obj, skateshop.transform ) sr_ent_push(skateshop) #} @@ -2609,6 +2625,9 @@ class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup): mark_info: bpy.props.PointerProperty( \ type=bpy.types.Object, name="Selected Board Info", \ poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + cam: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Viewpoint", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_camera'])) #} class SR_OBJECT_PROPERTIES(bpy.types.PropertyGroup): @@ -3585,7 +3604,7 @@ def cv_draw(): rack_cu = Vector((3.15,2.0,0.1))*0.5 rack_co = Vector((0.0,0.0,0.0)) - display_cu = Vector((0.2,1.2,0.1))*0.5 + 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 diff --git a/ent_skateshop.c b/ent_skateshop.c index b126abf..adccac5 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -10,11 +10,7 @@ struct{ v3f look_target; - mdl_transform rack_root, - display_root, - info_root; - - enum camera_mode prev_camera_mode; + ent_skateshop *ptr_ent; int active; float factive; @@ -326,8 +322,8 @@ next_file: tinydir_next( &dir ); VG_STATIC void global_skateshop_exit(void) { + localplayer.immobile = 0; global_skateshop.active = 0; - localplayer.camera_mode = global_skateshop.prev_camera_mode; } VG_STATIC void skateshop_request_viewpage( u32 page ) @@ -390,8 +386,6 @@ VG_STATIC void ent_skateshop_call( world_instance *world, ent_call *call ) vg_info( "Entering skateshop\n" ); localplayer.immobile = 1; - global_skateshop.prev_camera_mode = localplayer.camera_mode; - localplayer.camera_mode = k_cam_firstperson; global_skateshop.active = 1; global_skateshop.interface_loc = k_skateshop_loc_page__viewing; @@ -399,32 +393,7 @@ VG_STATIC void ent_skateshop_call( world_instance *world, ent_call *call ) v3_zero( localplayer.rb.w ); localplayer._walk.move_speed = 0.0f; - struct{ - mdl_transform *transform; - u32 id; - } - targets[] = { - { &global_skateshop.rack_root, shop->id_rack, }, - { &global_skateshop.info_root, shop->id_info, }, - { &global_skateshop.display_root, shop->id_display, }, - }; - - v3_copy( shop->transform.co, global_skateshop.look_target ); - - for( u32 i=0; ient_marker, index ); - - *targets[i].transform = m->transform; - } - else{ - transform_identity( targets[i].transform ); - } - } + global_skateshop.ptr_ent = shop; skateshop_request_viewpage(0); skateshop_loader_start( skateshop_scan_for_items ); @@ -437,18 +406,30 @@ VG_STATIC void global_skateshop_preupdate(void) global_skateshop.factive = vg_lerpf( global_skateshop.factive, global_skateshop.active, rate ); - if( !global_skateshop.active ) return; - v3f delta; - v3_sub( global_skateshop.look_target, localplayer.cam.pos, delta ); - v3_normalize( delta ); + world_instance *world = get_active_world(); + + ent_skateshop *shop = global_skateshop.ptr_ent; + 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 ); + + q_axis_angle( localplayer.rb.q, (v3f){0.0f,1.0f,0.0f}, + atan2f(lookat[0],lookat[2]) ); - v3f target; - player_vector_angles( target, delta, 1.0f, 0.0f ); + v3_copy( ref->transform.co, localplayer.cam_override_pos ); + localplayer.cam_override_fov = ref->fov; - camera_lerp_angles( localplayer.angles, target, - global_skateshop.factive, localplayer.angles); + localplayer.cam_override_strength = global_skateshop.factive; if( global_skateshop.interaction_cooldown > 0.0f ){ global_skateshop.interaction_cooldown -= vg.time_delta; @@ -478,29 +459,10 @@ VG_STATIC void global_skateshop_preupdate(void) } if( vg_input_button_down( &input_menu_back ) ){ - global_skateshop.active = 0; + global_skateshop_exit(); return; } } - else if( global_skateshop.interface_loc <= k_skateshop_loc_page__selected ){ - if( vg_input_button_down( &input_menu_back ) ){ - global_skateshop.interface_loc = k_skateshop_loc_page__viewing; - return; - } - - if( fabsf(h) > 0.25f ){ - if( global_skateshop.interface_loc == k_skateshop_loc_select_use ){ - global_skateshop.interface_loc = k_skateshop_loc_select_cancel; - return; - } - } - else{ - if( global_skateshop.interface_loc == k_skateshop_loc_select_cancel ){ - global_skateshop.interface_loc = k_skateshop_loc_select_use; - return; - } - } - } } VG_STATIC void skateshop_init(void) @@ -534,6 +496,7 @@ VG_STATIC void skateshop_render(void) { if( !global_skateshop.active ) return; + ent_skateshop *shop = global_skateshop.ptr_ent; world_instance *world = get_active_world(); u32 slot_count = vg_list_size(global_skateshop.shop_view_slots); @@ -549,28 +512,29 @@ VG_STATIC void skateshop_render(void) if( slot->db->state != k_dynamic_board_state_loaded ) goto set_fade_amt; - mdl_transform rack_xform; - transform_identity( &rack_xform ); + mdl_transform xform; + transform_identity( &xform ); + + xform.co[0] = -((float)i - ((float)slot_count)*0.5f)*0.45f; - rack_xform.co[0] = -((float)i - ((float)slot_count)*0.5f)*0.45f; + ent_marker *rack = mdl_arritm( &world->ent_marker, + mdl_entity_id_id(shop->id_rack)), + *display = mdl_arritm( &world->ent_marker, + mdl_entity_id_id(shop->id_display)); - mdl_transform_mul( &global_skateshop.rack_root, - &rack_xform, &rack_xform ); + mdl_transform_mul( &rack->transform, &xform, &xform ); if( slot->db->registry_id == global_skateshop.selected_registry_id ){ selected = 1.0f; } float t = slot->view_blend; - v3_lerp( rack_xform.co, global_skateshop.display_root.co, - t, rack_xform.co ); - q_nlerp( rack_xform.q, global_skateshop.display_root.q, - t, rack_xform.q ); - v3_lerp( rack_xform.s, global_skateshop.display_root.s, - t, rack_xform.s ); + v3_lerp( xform.co, display->transform.co, t, xform.co ); + q_nlerp( xform.q, display->transform.q, t, xform.q ); + v3_lerp( xform.s, display->transform.s, t, xform.s ); m4x3f mmdl; - mdl_transform_m4x3( &rack_xform, mmdl ); + mdl_transform_m4x3( &xform, mmdl ); render_board( &main_camera, world, &slot->db->board, mmdl, k_board_shader_entity ); @@ -579,21 +543,38 @@ set_fade_amt:; slot->view_blend = vg_lerpf( slot->view_blend, selected, rate ); } + ent_marker *info = mdl_arritm( &world->ent_marker, + mdl_entity_id_id(shop->id_info)); m4x3f mtext; - mdl_transform_m4x3( &global_skateshop.info_root, mtext ); + mdl_transform_m4x3( &info->transform, mtext ); - m4x3f mlocal = {{0.2f,0.0f,0.0f},{0.0f,0.2f,0.0f},{0.0f,0.0f,0.03f}, - {-font3d_string_width( &world_global.font,0, - "Made by... Bob man 123" )*0.2f*0.5f,0.0f,0.0f} - }; + const char *text_title = "Fish - Title"; + const char *text_author = "by Shaniqua"; - m4x3_mul( mtext, mlocal, mtext ); + m4x3f mlocal, mmdl; + m4x3_identity( mlocal ); + + float scale = 0.2f; + + mlocal[0][0] = scale; mlocal[1][1] = scale; + mlocal[2][2] = 0.03f; + mlocal[3][0] = -font3d_string_width(&world_global.font,0,text_title); + mlocal[3][0] *= scale*0.5f; + mlocal[3][1] = 0.1f; + m4x3_mul( mtext, mlocal, mmdl ); font3d_bind( &world_global.font, &main_camera ); - shader_model_font_uColour( (v4f){1.0f,0.5f,0.1f,1.0f} ); - font3d_simple_draw( &world_global.font, 0, "Made by... Bob man 123", - &main_camera, mtext ); + shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} ); + font3d_simple_draw( &world_global.font, 0, text_title, &main_camera, mmdl ); + + scale *= 0.4f; + mlocal[0][0] = scale; mlocal[1][1] = scale; + mlocal[3][0] = -font3d_string_width(&world_global.font,0,text_author); + mlocal[3][0] *= scale*0.5f; + mlocal[3][1] = 0.0f; + m4x3_mul( mtext, mlocal, mmdl ); + font3d_simple_draw( &world_global.font, 0, text_author, &main_camera, mmdl ); } #endif /* ENT_SKATESHOP_C */ diff --git a/entity.h b/entity.h index e8b9d41..d56d702 100644 --- a/entity.h +++ b/entity.h @@ -22,6 +22,7 @@ typedef struct ent_font ent_font; typedef struct ent_font_variant ent_font_variant; typedef struct ent_glyph ent_glyph; typedef struct ent_skateshop ent_skateshop; +typedef struct ent_camera ent_camera; enum entity_alias{ k_ent_none = 0, @@ -36,7 +37,8 @@ enum entity_alias{ k_ent_font = 9, k_ent_font_variant= 10, k_ent_traffic = 11, - k_ent_skateshop = 12 + k_ent_skateshop = 12, + k_ent_camera = 13 }; static u32 mdl_entity_id_type( u32 entity_id ) @@ -214,7 +216,8 @@ struct ent_skateshop{ mdl_transform transform; u32 id_display, id_info, - id_rack; + id_rack, + id_camera; }; struct ent_traffic{ @@ -228,6 +231,11 @@ struct ent_traffic{ u32 index; /* into the path */ }; +struct ent_camera{ + mdl_transform transform; + float fov; +}; + VG_STATIC ent_marker *ent_find_marker( mdl_context *mdl, mdl_array_ptr *arr, const char *alias ) { diff --git a/maps_src/mp_spawn.mdl b/maps_src/mp_spawn.mdl index c33fb0d3db9f48a0b5a8ccc1a89a6c464662754e..3692a9c02746eac9c88a307b5231dfc9419ecc97 100644 GIT binary patch delta 3718 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 tW&*Q-Okg&U1d-wnV delta 3584 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 z*%qbv8!}*Gcam_override_strength ); v3_lerp( player->cam.pos, player->cam_override_pos, player->cam_override_strength, player->cam.pos ); + player->cam.fov = vg_lerpf( player->cam.fov, player->cam_override_fov, + player->cam_override_strength ); /* portal transitions */ player_camera_portal_correction( player ); diff --git a/player_render.c b/player_render.c index 171b339..3372424 100644 --- a/player_render.c +++ b/player_render.c @@ -177,6 +177,11 @@ VG_STATIC void player__pre_render( player_instance *player ) m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp0, ubo->g_board_0 ); m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp1, ubo->g_board_1 ); + if( player->immobile ){ + player__cam_iterate( player ); + return; + } + if( player->rewinding ){ if( player->rewind_time <= 0.0f ){ double taken = vg.time - player->rewind_start; @@ -265,6 +270,7 @@ VG_STATIC void player__pre_render( player_instance *player ) vg_alerpf( fr->ang[0], fr1->ang[0], sub ); player->cam_override_angles[1] = vg_lerpf ( fr->ang[1], fr1->ang[1], sub ); + player->cam_override_fov = player->cam.fov; float blend = player->rewind_time * 0.25f; player->cam_override_strength = vg_clampf( blend, 0.0f, 1.0f ); diff --git a/world.h b/world.h index 01b12b9..f065cb3 100644 --- a/world.h +++ b/world.h @@ -167,7 +167,8 @@ struct world_instance { ent_volume, ent_traffic, ent_skateshop, - ent_marker; + ent_marker, + ent_camera; ent_gate *rendering_gate; diff --git a/world_gen.h b/world_gen.h index a9cd91f..79bb754 100644 --- a/world_gen.h +++ b/world_gen.h @@ -820,6 +820,7 @@ VG_STATIC void world_load( u32 index, const char *path ) mdl_load_mesh_block( meta, world->heap ); mdl_load_array( meta, &world->ent_gate, "ent_gate", heap ); + mdl_load_array( meta, &world->ent_camera, "ent_camera", heap ); mdl_load_array( meta, &world->ent_spawn, "ent_spawn", heap ); mdl_load_array( meta, &world->ent_light, "ent_light", heap ); mdl_load_array( meta, &world->ent_route_node,"ent_route_node", heap ); -- 2.25.1