X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=model.h;h=4a310695f27784dda33164f7b7f494bcde36b87b;hb=0136a935c00e3ea1f231fd88b38b44982fd409ac;hp=99aa2f112d44346bbb546793803eef2c7edff0dc;hpb=d8fc0acce1b39466038284aa6f1941ebe98c8348;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/model.h b/model.h index 99aa2f1..4a31069 100644 --- a/model.h +++ b/model.h @@ -41,7 +41,9 @@ enum classtype k_classtype_audio = 14, k_classtype_trigger = 100, k_classtype_logic_achievement = 101, - k_classtype_logic_relay = 102 + k_classtype_logic_relay = 102, + k_classtype_world_light = 200, + k_classtype_nonlocal_gate = 300 }; enum mdl_shader @@ -57,26 +59,50 @@ enum mdl_surface_prop { k_surface_prop_concrete = 0, k_surface_prop_wood = 1, - k_surface_prop_grass = 2 + k_surface_prop_grass = 2, + k_surface_prop_tiles = 3 }; enum material_flag { k_material_flag_skate_surface = 0x1, k_material_flag_collision = 0x2, - k_material_flag_grow_grass = 0x4 + k_material_flag_grow_grass = 0x4, + k_material_flag_grind_surface = 0x8 +}; + +enum bone_flag +{ + k_bone_flag_deform = 0x1, + k_bone_flag_ik = 0x2, + k_bone_flag_collider_box = 0x4, + k_bone_flag_collider_capsule = 0x8, + k_bone_flag_collider_reserved0 = 0x10, + k_bone_flag_collider_reserved1 = 0x20, + k_bone_flag_collider_reserved2 = 0x40, + k_bone_flag_collider_reserved3 = 0x80, + k_bone_flag_collider_any = k_bone_flag_collider_box | + k_bone_flag_collider_capsule | + k_bone_flag_collider_reserved0 | + k_bone_flag_collider_reserved1 | + k_bone_flag_collider_reserved2 | + k_bone_flag_collider_reserved3, + k_bone_flag_cone_constraint = 0x100, + k_bone_flag_force_u32 = 0xffffffff }; #pragma pack(push,1) +/* 48 byte */ struct mdl_vert { - v3f co, - norm; - v2f uv; - u8 colour[4]; - u16 weights[4]; - u8 groups[4]; + v3f co, /* 3*32 */ + norm; /* 3*32 */ + v2f uv; /* 2*32 */ + + u8 colour[4]; /* 4*8 */ + u16 weights[4];/* 4*16 */ + u8 groups[4]; /* 4*8 */ }; struct mdl_submesh @@ -199,14 +225,14 @@ struct classtype_route struct classtype_bone { - u32 deform, + u32 flags, ik_target, - ik_pole, - collider, - use_limits; + ik_pole; - v3f angle_limits[2]; boxf hitbox; + + v3f conevx, conevy, coneva; + float conet; }; struct classtype_skeleton @@ -246,6 +272,21 @@ struct classtype_audio float volume; }; +struct classtype_world_light +{ + enum light_type + { + k_light_type_point, + k_light_type_spot, + k_light_type_point_nighttime_only, + k_light_type_spot_nighttime_only + } + type; + + v4f colour; /* RGB, Energy */ + float angle, range; +}; + #pragma pack(pop) @@ -448,8 +489,8 @@ VG_STATIC void mdl_load_mesh_data( mdl_context *mdl, void *lin_alloc ) { assert( mdl->file ); - u64 size_verts = mdl->info.vertex_count * sizeof(mdl_vert), - size_index = mdl->info.indice_count * sizeof(u32); + u64 size_verts = vg_align8( mdl->info.vertex_count * sizeof(mdl_vert) ), + size_index = vg_align8( mdl->info.indice_count * sizeof(u32) ); mdl->vertex_buffer = vg_linear_alloc( lin_alloc, size_verts ); mdl->index_buffer = vg_linear_alloc( lin_alloc, size_index ); @@ -478,7 +519,7 @@ VG_STATIC void mdl_load_anim_data( mdl_context *mdl, void *lin_alloc ) if( mdl->info.keyframe_count == 0 ) return; - u64 size_kf = mdl->info.keyframe_count * sizeof(mdl_keyframe); + u64 size_kf = vg_align8( mdl->info.keyframe_count * sizeof(mdl_keyframe) ); mdl->keyframe_buffer = vg_linear_alloc( lin_alloc, size_kf ); fseek( mdl->file, mdl->info.keyframe_offset, SEEK_SET ); @@ -499,7 +540,7 @@ VG_STATIC void mdl_load_pack_data( mdl_context *mdl, void *lin_alloc ) if( mdl->info.pack_size == 0 ) return; - mdl->pack = vg_linear_alloc( lin_alloc, mdl->info.pack_size ); + mdl->pack = vg_linear_alloc( lin_alloc, vg_align8( mdl->info.pack_size ) ); fseek( mdl->file, mdl->info.pack_offset, SEEK_SET ); u64 l = fread( mdl->pack, mdl->info.pack_size, 1, mdl->file ); @@ -524,7 +565,7 @@ VG_STATIC mdl_context *mdl_load_full( void *lin_alloc, const char *path ) mdl_open( &temp_ctx, path ); /* create allocator */ - u32 tot_size = temp_ctx.info.file_length + sizeof( mdl_context ); + u32 tot_size = temp_ctx.info.file_length + sizeof( mdl_context ) + 64; void *data = vg_create_linear_allocator( lin_alloc, tot_size, VG_MEMORY_SYSTEM );