X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=ent_challenge.c;fp=ent_challenge.c;h=515aeb09d5e456b813dbb00c40642cc7fa72348a;hb=6190deb68aa1c9e92ede62ea05c2a755bf5516de;hp=6f031bacc1ce93f634b3b2aefdf60fe406e28a8c;hpb=296560179b19451468030f202b17492b1c71b9d0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/ent_challenge.c b/ent_challenge.c index 6f031ba..515aeb0 100644 --- a/ent_challenge.c +++ b/ent_challenge.c @@ -1,115 +1,66 @@ #ifndef ENT_CHALLENGE_C #define ENT_CHALLENGE_C -#include "world.h" -#include "world_load.h" #include "entity.h" +#include "input.h" -VG_STATIC void ent_challenge_pass( world_instance *world, - ent_challenge *challenge ){ - if( challenge->id_next ){ - world->challenge_timer += challenge->filter; - - u32 index = mdl_entity_id_id( challenge->id_next ); - ent_challenge *next = mdl_arritm( &world->ent_challenge, index ); - world->challenge_target = next; - - vg_info( "pass challenge point\n" ); - } - else { - vg_success( "NYU Film school graduate SUCKAH\n" ); - world->challenge_target = NULL; - world->challenge_timer = 0.0f; +VG_STATIC void ent_challenge_call( world_instance *world, ent_call *call ){ + u32 index = mdl_entity_id_id( call->id ); + ent_challenge *challenge = mdl_arritm( &world->ent_challenge, index ); - if( challenge->id_win ){ + if( call->function == 0 ){ /* challenge() */ + if( !challenge->status ){ + vg_info( "challenge( '%s' )\n", + mdl_pstr( &world->meta, challenge->pstr_alias) ); ent_call call; call.data = NULL; - call.function = challenge->win_event; - call.id = challenge->id_win; + call.function = challenge->target_event; + call.id = challenge->target; entity_call( world, &call ); } + challenge->status = 1; } -} - -VG_STATIC int ent_challenge_check_filter( ent_challenge *challenge ){ - if( challenge->filter ){ - struct player_skate_state *s = &localplayer._skate.state; - enum trick_type trick = s->trick_type; - - u32 state = 0x00; - - if( trick == k_trick_type_shuvit ) - state |= k_ent_challenge_filter_trick_shuvit; - if( trick == k_trick_type_treflip ) - state |= k_ent_challenge_filter_trick_treflip; - if( trick == k_trick_type_kickflip ) - state |= k_ent_challenge_filter_trick_kickflip; - - if( s->flip_rate < -0.0001f ) state |= k_ent_challenge_filter_flip_back; - if( s->flip_rate > 0.0001f ) state |= k_ent_challenge_filter_flip_front; - - if( s->activity == k_skate_activity_grind_5050 || - s->activity == k_skate_activity_grind_back50 || - s->activity == k_skate_activity_grind_front50 ) - state |= k_ent_challenge_filter_grind_truck_any; - - if( s->activity == k_skate_activity_grind_boardslide ) - state |= k_ent_challenge_filter_grind_board_any; - - return ((challenge->filter & state) || !challenge->filter) && - ((challenge->filter2 & state) || !challenge->filter2); + else if( call->function == 1 ){ /* view() */ + world_entity_focus( call->id ); } else { - return 1; + vg_print_backtrace(); + vg_error( "Unhandled function id: %u\n", call->function ); } } -VG_STATIC void ent_challenge_call( world_instance *world, ent_call *call ){ - u32 index = mdl_entity_id_id( call->id ); - ent_challenge *challenge = mdl_arritm( &world->ent_challenge, index ); +VG_STATIC void ent_challenge_preupdate( ent_challenge *challenge ){ + world_instance *world = world_current_instance(); - if( call->function == 0 ){ - if( challenge->flags & k_ent_challenge_hidden ) return; + if( mdl_entity_id_type( challenge->camera ) == k_ent_camera ){ + u32 index = mdl_entity_id_id( challenge->camera ); + ent_camera *cam = mdl_arritm( &world->ent_camera, index ); - if( world->challenge_target ){ - if( (world->challenge_target == challenge) && - ent_challenge_check_filter( challenge )){ - ent_challenge_pass( world, challenge ); - } - else { - vg_error( "womp womp\n" ); - world->challenge_target = NULL; - world->challenge_timer = 0.0f; - } - } + /* TODO COMPRESSION */ + v3f dir = {0.0f,-1.0f,0.0f}; + mdl_transform_vector( &cam->transform, dir, dir ); + m3x3_mulv( localplayer.invbasis, dir, dir ); + player_vector_angles( world_static.focus_cam.angles, dir, 1.0f, 0.0f ); + v3_copy( cam->transform.co, world_static.focus_cam.pos ); + world_static.focus_cam.fov = cam->fov; } - else if( call->function == 1 ){ - if( challenge->flags & k_ent_challenge_hidden ) return; - - vg_info( "begin the challenge\n" ); - world->challenge_timer = 0.0f; - ent_challenge_pass( world, challenge ); + else { + /* TODO COMPRESSION */ + v3_copy( localplayer.cam.pos, world_static.focus_cam.pos ); + v3_copy( localplayer.cam.angles, world_static.focus_cam.angles ); + world_static.focus_cam.fov = localplayer.cam.fov; + world_static.focus_cam.nearz = localplayer.cam.nearz; + world_static.focus_cam.farz = localplayer.cam.farz; } - else if( call->function == 2 ){ - challenge->flags &= ~k_ent_challenge_hidden; - if( mdl_entity_id_type( challenge->id_next ) == k_ent_challenge ){ - call->id = challenge->id_next; - entity_call( world, call ); - } + if( button_down( k_srbind_mback ) ){ + world_entity_unfocus(); + return; } - else if( call->function == 3 ){ - challenge->flags |= k_ent_challenge_hidden; +} - if( mdl_entity_id_type( challenge->id_next ) == k_ent_challenge ){ - call->id = challenge->id_next; - entity_call( world, call ); - } - } - else { - vg_print_backtrace(); - vg_error( "Unhandled function id: %u\n", call->function ); - } +VG_STATIC void ent_challenge_render( ent_challenge *challenge ){ + } #endif /* ENT_CHALLENGE_C */