small refactor of model loading
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_objective.c
index 0cf5790a70c0ce690011c56abc5239302c83e6fb..66b822db62d9e4eb9bf2a20cd71ab76db8c2230f 100644 (file)
@@ -1,11 +1,11 @@
-#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 ){
@@ -21,13 +21,17 @@ static void ent_objective_pass( world_instance *world,
          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;
@@ -40,23 +44,7 @@ static void ent_objective_pass( world_instance *world,
          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 );
    }
 }
 
@@ -93,7 +81,8 @@ static int ent_objective_check_filter( ent_objective *objective ){
    }
 }
 
-static void ent_objective_call( world_instance *world, ent_call *call ){
+void 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 );
 
@@ -107,8 +96,10 @@ static void ent_objective_call( world_instance *world, ent_call *call ){
             ent_objective_pass( world, objective );
          }
          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;
@@ -137,5 +128,3 @@ static void ent_objective_call( world_instance *world, ent_call *call ){
       vg_error( "Unhandled function id: %u\n", call->function );
    }
 }
-
-#endif /* ENT_OBJECTIVE_C */