v3_copy( localplayer.rb.co, localplayer.cam_control.tpv_lpf );
}
}
+
+ _world_raise_event( _world.active_challenge_id, "activate" );
}
void ent_challenge_update(void)
localplayer.immobile = 0; /* TODO: Unify this probably after eating some potats */
menu.disable_open = 0;
- _world_raise_event( _world.active_challenge_id, "activate" );
_restart_active_challenge();
}
else if( button_down( k_srbind_mback ) )
if( visible ) glider->flags &= ~((u32)0x1);
else glider->flags |= 0x1;
}
+ else if( iter.type == k_ent_spawn )
+ {
+ ent_spawn *spawn = af_arritm( &world->ent_spawn, iter.index );
+ if( visible ) spawn->flags &= ~((u32)k_ent_spawn_flag_locked);
+ else spawn->flags |= (u32)k_ent_spawn_flag_locked;
+ }
}
}
for( u32 i=0; i<4; i++ )
{
struct human_npc *human = &_npc.humans[i];
- human->alive = 0;
addon_cache_unwatch( k_addon_type_player, human->playermodel_view_slot );
+ human->playermodel_view_slot = 0;
+ human->alive = 0;
}
}
const char *addons[] =
{
[k_npc_jc] = "sr003-local-skaterift_john",
- [k_npc_mike] = "sr003-local-skaterift_mike",
+ [k_npc_mike] = "sr003-local-skaterift_chip",
[k_npc_fbi] = "sr003-local-skaterift_fbi",
};
human->alive = 1;
}
}
-void update_ach_models(void);
void steam_set_achievement( const char *name )
{
if( skaterift.demo_mode )
if( !strcmp(name,"ALBERT") ) skaterift.achievements |= 0x2;
if( !strcmp(name,"JANET") ) skaterift.achievements |= 0x4;
if( !strcmp(name,"BERNADETTA") ) skaterift.achievements |= 0x8;
- update_ach_models();
if( steam_ready && steam_stats_ready ){
if( SteamAPI_ISteamUserStats_SetAchievement( hSteamUserStats, name ) ){
static void steam_on_recieve_current_stats( CallbackMsg_t *msg )
{
UserStatsReceived_t *rec = (UserStatsReceived_t *)msg->m_pubParam;
-
- if( rec->m_eResult == k_EResultOK ){
- vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID,
- rec->m_steamIDUser );
+ if( rec->m_eResult == k_EResultOK )
+ {
+ vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID, rec->m_steamIDUser );
steam_stats_ready = 1;
steamapi_bool set = 0;
- if( SteamAPI_ISteamUserStats_GetAchievement(
- hSteamUserStats, "MARC", &set ) ){
+ if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "MARC", &set ) )
+ {
if( set ) skaterift.achievements |= 0x1;
}
- if( SteamAPI_ISteamUserStats_GetAchievement(
- hSteamUserStats, "ALBERT", &set ) ){
+ if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "ALBERT", &set ) )
+ {
if( set ) skaterift.achievements |= 0x2;
}
- if( SteamAPI_ISteamUserStats_GetAchievement(
- hSteamUserStats, "JANET", &set ) ){
+ if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "JANET", &set ) )
+ {
if( set ) skaterift.achievements |= 0x4;
}
- if( SteamAPI_ISteamUserStats_GetAchievement(
- hSteamUserStats, "BERNADETTA", &set ) ){
+ if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "BERNADETTA", &set ) )
+ {
if( set ) skaterift.achievements |= 0x8;
}
- update_ach_models();
}
- else{
+ else
vg_error( "Error recieveing stats for user (%u)\n", rec->m_eResult );
- }
}
static u32 utf8_byte0_byte_count( u8 char0 )
{
- for( u32 k=2; k<4; k++ ){
+ for( u32 k=2; k<4; k++ )
+ {
if( !(char0 & (0x80 >> k)) )
return k;
}
u8 *ustr = (u8 *)str;
u32 utf32_code = 0x00000000;
u32 i=0, j=0, utf32_byte_ct=0;
-
- for(;j < length-1;){
+ for(;j < length-1;)
+ {
if( ustr[i] == 0x00 )
break;
-
- if( ustr[i] & 0x80 ){
- if( utf32_byte_ct ){
+ if( ustr[i] & 0x80 )
+ {
+ if( utf32_byte_ct )
+ {
utf32_byte_ct --;
utf32_code |= (ustr[i] & 0x3F) << (utf32_byte_ct*6);
-
- if( !utf32_byte_ct ){
+ if( !utf32_byte_ct )
+ {
const char *match;
size_t chars = anyascii( utf32_code, &match );
-
- for( u32 k=0; k<VG_MIN(chars, length-1-j); k++ ){
+ for( u32 k=0; k<VG_MIN(chars, length-1-j); k++ )
buf[ j++ ] = (u8)match[k];
- }
}
}
- else{
+ else
+ {
utf32_byte_ct = utf8_byte0_byte_count( ustr[i] )-1;
utf32_code = ustr[i] & (0x3F >> utf32_byte_ct);
utf32_code <<= utf32_byte_ct*6;
}
}
- else{
+ else
+ {
utf32_byte_ct = 0x00;
buf[j ++] = str[i];
}
-
i++;
}
-
buf[j] = 0x00;
return j;
}
void world_update( world_instance *world, v3f pos )
{
+ _ent_update();
ent_script_update( world );
ent_route_preupdate();
_ent_npc_preupdate();
.cast_ray = NULL
};
+struct
+{
+ struct ent_event_deferred
+ {
+ f32 timeleft;
+ u32 event_index;
+ }
+ timed_events[32];
+ u32 timed_event_count;
+}
+_event_system;
+
static void _event_trigger( ent_event *event );
void world_gen_entities_init( world_instance *world )
vg_fatal_error( "Programming error\n" );
}
-void update_ach_models(void)
-{
-#if 0
- world_instance *hub = &_world.instances[k_world_purpose_hub];
- if( hub->status != k_world_status_loaded ) return;
-#endif
-}
-
void entity_bh_closest( void *user, u32 item_index, v3f point, v3f closest )
{
world_instance *world = user;
void world_entity_start( world_instance *world, vg_msg *sav )
{
vg_info( "Start instance %p\n", world );
+ _event_system.timed_event_count = 0;
for( u32 i=0; i<af_arrcount( &world->ent_event ); i ++ )
{
continue;
if( af_str_eq( &world->meta.af, event->pstr_source_event, event_alias, event_alias_hash ) )
- _event_trigger( event );
+ {
+ if( event->delay > 0.001f )
+ {
+ if( _event_system.timed_event_count < VG_ARRAY_LEN(_event_system.timed_events) )
+ {
+ struct ent_event_deferred *def = &_event_system.timed_events[ _event_system.timed_event_count ++ ];
+ def->event_index = i;
+ def->timeleft = event->delay;
+ }
+ }
+ else
+ _event_trigger( event );
+ }
+ }
+}
+
+void _ent_update(void)
+{
+ world_instance *world = &_world.main;
+ u32 j = 0;
+ for( u32 i=0; i<_event_system.timed_event_count; i ++ )
+ {
+ struct ent_event_deferred *def = &_event_system.timed_events[ i ];
+ def->timeleft -= vg.time_delta;
+ if( def->timeleft <= 0.0f )
+ _event_trigger( af_arritm( &world->ent_event, def->event_index ) );
+ else
+ _event_system.timed_events[ j ++ ] = *def;
}
+ _event_system.timed_event_count = j;
}
static void _event_trigger( ent_event *event )
extern bh_system bh_system_entity_list;
void _world_raise_event( u32 caller, const char *event_alias );
+void _ent_update(void);
v4f colour = { 1,1,1,1 };
- if( !(glider->flags & 0x1) )
+ if( glider->flags & 0x1 )
v3_muls( colour, 0.5f, colour );
gui_icon_setcolour( colour );