X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_entity.c;h=831e7eb674c4c728d0be1b01c17ccf0635370d25;hb=888e62fcd8f9777cee774fbb8fab2e52660303a7;hp=04bbec9891749740e2cc8d51534e710b16371077;hpb=baad90d065899a833390f2f0535cd1fa7799e275;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_entity.c b/world_entity.c index 04bbec9..831e7eb 100644 --- a/world_entity.c +++ b/world_entity.c @@ -11,6 +11,8 @@ #include "ent_challenge.h" #include "ent_skateshop.h" #include "ent_route.h" +#include "ent_traffic.h" +#include "ent_glider.h" static void world_entity_focus( u32 entity_id ){ localplayer.immobile = 1; @@ -81,12 +83,14 @@ static void world_entity_focus_preupdate(void){ /* additional renderings like text etc.. */ static void world_entity_focus_render(void){ - if( skaterift.activity != k_skaterift_ent_focus ) + world_instance *world = world_current_instance(); + if( skaterift.activity != k_skaterift_ent_focus ){ + skateshop_render_nonfocused( world, &skaterift.cam ); return; + } u32 type = mdl_entity_id_type( world_static.focused_entity ), index = mdl_entity_id_id( world_static.focused_entity ); - world_instance *world = world_current_instance(); if( type == k_ent_skateshop ){ ent_skateshop *skateshop = mdl_arritm( &world->ent_skateshop, index ); @@ -191,7 +195,8 @@ static void world_gen_entities_init( world_instance *world ){ { k_ent_gate, &world->ent_gate }, { k_ent_objective, &world->ent_objective }, { k_ent_volume, &world->ent_volume }, - { k_ent_challenge, &world->ent_challenge } + { k_ent_challenge, &world->ent_challenge }, + { k_ent_glider, &world->ent_glider } }; for( u32 i=0; itransform.co, pos ); + else + { + vg_error( "There are no valid spawns in the world\n" ); + v3_zero( pos ); + } +} + +static void ent_volume_call( world_instance *world, ent_call *call ){ u32 index = mdl_entity_id_id( call->id ); ent_volume *volume = mdl_arritm( &world->ent_volume, index ); if( !volume->target ) return; @@ -285,9 +302,9 @@ static void ent_volume_call( world_instance *world, ent_call *call ) if( volume->flags & k_ent_volume_flag_particles ){ float *co = alloca( sizeof(float)*3 ); - co[0] = vg_randf64()*2.0f-1.0f; - co[1] = vg_randf64()*2.0f-1.0f; - co[2] = vg_randf64()*2.0f-1.0f; + co[0] = vg_randf64(&vg.rand)*2.0f-1.0f; + co[1] = vg_randf64(&vg.rand)*2.0f-1.0f; + co[2] = vg_randf64(&vg.rand)*2.0f-1.0f; m4x3_mulv( volume->to_world, co, co ); call->function = k_ent_function_particle_spawn; @@ -333,7 +350,7 @@ static void ent_audio_call( world_instance *world, ent_call *call ){ else return; - float chance = vg_randf64()*100.0f, + float chance = vg_randf64(&vg.rand)*100.0f, bar = 0.0f; for( u32 i=0; iclip_count; i++ ){ @@ -409,7 +426,8 @@ static void ent_ccmd_call( world_instance *world, ent_call *call ){ if( call->function == k_ent_function_trigger ){ u32 index = mdl_entity_id_id( call->id ); ent_ccmd *ccmd = mdl_arritm( &world->ent_ccmd, index ); - vg_execute_console_input( mdl_pstr(&world->meta, ccmd->pstr_command) ); + vg_execute_console_input( mdl_pstr(&world->meta, ccmd->pstr_command), + 0 ); } } @@ -466,6 +484,13 @@ entity_bh_expand_bound( void *user, boxf bound, u32 item_index ){ mdl_transform_m4x3( &challenge->transform, transform ); m4x3_expand_aabb_aabb( transform, bound, box ); } + else if( type == k_ent_glider ){ + ent_glider *glider = mdl_arritm( &world->ent_glider, index ); + m4x3f transform; + mdl_transform_m4x3( &glider->transform, transform ); + m4x3_expand_aabb_aabb( transform, bound, + (boxf){{-1.0f,-1.0f,-1.0f},{ 1.0f, 1.0f, 1.0f}} ); + } else{ vg_fatal_error( "Programming error\n" ); } @@ -494,6 +519,10 @@ static float entity_bh_centroid( void *user, u32 item_index, int axis ){ ent_challenge *challenge = mdl_arritm( &world->ent_challenge, index ); return challenge->transform.co[axis]; } + else if( type == k_ent_glider ){ + ent_glider *glider = mdl_arritm( &world->ent_glider, index ); + return glider->transform.co[axis]; + } else { vg_fatal_error( "Programming error\n" ); return INFINITY; @@ -558,6 +587,29 @@ static void entity_bh_debug( void *user, u32 item_index ){ } } +static void update_ach_models(void){ + world_instance *hub = &world_static.instances[k_world_purpose_hub]; + if( hub->status != k_world_status_loaded ) return; + + for( u32 i=0; ient_prop ); i ++ ){ + ent_prop *prop = mdl_arritm( &hub->ent_prop, i ); + if( prop->flags & 0x2 ){ + if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "MARC" ) ) + if( skaterift.achievements & 0x1 ) + prop->flags &= ~0x1; + if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "ALBERT" ) ) + if( skaterift.achievements & 0x2 ) + prop->flags &= ~0x1; + if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "JANET" ) ) + if( skaterift.achievements & 0x4 ) + prop->flags &= ~0x1; + if( MDL_CONST_PSTREQ( &hub->meta, prop->pstr_alias, "BERNADETTA" ) ) + if( skaterift.achievements & 0x8 ) + prop->flags &= ~0x1; + } + } +} + static void entity_bh_closest( void *user, u32 item_index, v3f point, v3f closest ){ world_instance *world = user; @@ -650,7 +702,7 @@ static void world_entity_start( world_instance *world, vg_msg *sav ){ } /* LEGACY: check if steam achievements can give us a medal */ - if( steam_ready && steam_stats_ready ){ + if( steam_ready && steam_stats_ready ){ for( u32 j=0; jname,