-#ifndef ENT_OBJECTIVE_C
-#define ENT_OBJECTIVE_C
-
#include "world.h"
#include "world_load.h"
#include "entity.h"
#include "audio.h"
#include "steam.h"
+#include "ent_region.h"
+#include "player.h"
+#include "player_skate.h"
static void ent_objective_pass( world_instance *world,
ent_objective *objective ){
ent_objective_pass( world, next );
else{
vg_info( "pass challenge point\n" );
+ audio_lock();
audio_oneshot_3d( &audio_challenge[0], localplayer.rb.co,
30.0f, 1.0f );
+ audio_unlock();
}
}
else {
vg_success( "challenge win\n" );
+ audio_lock();
audio_oneshot( &audio_challenge[2], 1.0f, 0.0f );
+ audio_unlock();
world_static.challenge_target = NULL;
world_static.challenge_timer = 0.0f;
world_static.focused_entity = 0;
entity_call( world, &call );
}
- u32 world_completed = 1;
- for( u32 i=0; i<mdl_arrcount(&world->ent_challenge); i++ ){
- ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i );
- if( !challenge->status ){
- world_completed = 0;
- break;
- }
- }
-
- if( world_completed ){
- const char *understate = "Understate DIY park";
- if( mdl_pstreq( &world->meta, world->info.pstr_name,
- understate, vg_strdjb2( understate ))){
- steam_set_achievement( "CITY_COMPLETE" );
- steam_store_achievements();
- }
- }
+ ent_region_re_eval( world );
}
}
}
}
-static void ent_objective_call( world_instance *world, ent_call *call ){
+entity_call_result ent_objective_call( world_instance *world, ent_call *call )
+{
u32 index = mdl_entity_id_id( call->id );
ent_objective *objective = mdl_arritm( &world->ent_objective, index );
- if( call->function == 0 ){
- if( objective->flags & (k_ent_objective_hidden|
- k_ent_objective_passed)) return;
+ if( call->function == 0 )
+ {
+ if( objective->flags & (k_ent_objective_hidden|k_ent_objective_passed))
+ {
+ return k_entity_call_result_OK;
+ }
- if( world_static.challenge_target ){
+ if( world_static.challenge_target )
+ {
if( (world_static.challenge_target == objective) &&
ent_objective_check_filter( objective )){
ent_objective_pass( world, objective );
}
- else {
+ else
+ {
+ audio_lock();
audio_oneshot_3d( &audio_challenge[6], localplayer.rb.co,
30.0f, 1.0f );
+ audio_unlock();
vg_error( "challenge failed\n" );
world_static.challenge_target = NULL;
world_static.challenge_timer = 0.0f;
world_static.focused_entity = 0;
}
}
+
+ return k_entity_call_result_OK;
}
- else if( call->function == 2 ){
+ else if( call->function == 2 )
+ {
objective->flags &= ~k_ent_objective_hidden;
if( mdl_entity_id_type( objective->id_next ) == k_ent_objective ){
call->id = objective->id_next;
entity_call( world, call );
}
+ return k_entity_call_result_OK;
}
- else if( call->function == 3 ){
+ else if( call->function == 3 )
+ {
objective->flags |= k_ent_objective_hidden;
if( mdl_entity_id_type( objective->id_next ) == k_ent_objective ){
call->id = objective->id_next;
entity_call( world, call );
}
+ return k_entity_call_result_OK;
}
- else {
- vg_print_backtrace();
- vg_error( "Unhandled function id: %u\n", call->function );
- }
+ else
+ return k_entity_call_result_unhandled;
}
-
-#endif /* ENT_OBJECTIVE_C */