nx1-gsc-dump/maps/_nx_vehicle_drive.gsc

263 lines
5.8 KiB
Plaintext

//****************************************************************************
// **
// Confidential - (C) Activision Publishing, Inc. 2010 **
// **
//****************************************************************************
// **
// Module: Generic utility script for first-person drivable vehicles **
// **
// Created: 12/16/2010 - Pedram Javidpour **
// **
//****************************************************************************
#include maps\_utility;
#include common_scripts\utility;
#include maps\_anim;
UPDATE_INTERVAL = 0.05;
// main: Call on a player
main( attributes )
{
self.vehicle = [];
if( IsDefined( attributes ) )
{
self.vehicle = attributes;
foreach( key, value in self.vehicle )
{
set_key( key, value );
}
}
else
{
AssertMsg( "Call to maps\_nx_vehicle_drive::main() is missing required argument" );
return;
}
if( !is_key_defined( "vehicle" ) )
{
AssertMsg( "_nx_vehicle_drive::main(): You must supply a vehicle attribute." );
return;
}
player_anims_init( get_key( "player_anims" ) );
player_model_init( get_key( "player_model" ) );
// vehicle_anims_init( get_key( "vehicle_anims" ) );
// vehicle_model_init( get_key( "vehicle_model" ) );
player_view_init();
self thread drive( );
}
drive()
{
vehicle = get_key( "vehicle" );
vehicle waittill( "vehicle_mount", player );
if( player != self )
return;
vehicle MakeUsable();
player SetPlayerAngles( vehicle.angles );
}
// Animation
#using_animtree( "vehicles" );
player_anims_init( anim_array )
{
if( !IsDefined( anim_array ) )
return;
key = get_key( "vehicle" ).vehicletype + "_player";
vehicle = get_key( "vehicle" );
vehicle.animname = key;
level._scr_animtree[ key ] = #animtree;
level._scr_anim[ key ] = anim_array;
}
// Player model
player_model_init( model )
{
if( !IsDefined( model ) )
return;
PrecacheModel( model );
key = get_key( "vehicle" ).vehicletype + "_player";
level._scr_model[ key ] = model;
}
player_view_init( )
{
vehicle = get_key( "vehicle" );
if ( IsDefined( vehicle.firstPerson ) )
return;
// vehicle SetModel( level._snowmobile_playerSnowmobileModel );
vehicle Attach( get_key( "player_model" ), "tag_player" );
// vehicle ClearAnim( vehicle getanim( "root" ), 0 );
vehicle.firstPerson = true;
self thread player_anims_update( );
}
player_anims_update()
{
vehicle = get_key( "vehicle" );
vehicle endon( "vehicle_dismount" );
vehicle endon( "death" );
self childthread player_anims_turning_update();
}
player_anims_turning_update()
{
vehicle = get_key( "vehicle" );
steering = 0;
steering_prev = 0;
steering_delta = 0;
direction = 0;
direction_prev = 0;
direction_switch = false;
left_to_right = "turn_left2right_";
right_to_left = "turn_right2left_";
anim_speed = [];
anim_speed[ "L" ] = 0.0;
anim_speed[ "R" ] = 0.0;
anim_start_time = [];
anim_start_time[ "L" ] = 0.0;
anim_start_time[ "R" ] = 0.0;
anim_left_to_right = [];
anim_left_to_right[ "L" ] = vehicle getanim( "turn_left2right_L" );
anim_left_to_right[ "R" ] = vehicle getanim( "turn_left2right_R" );
anim_right_to_left = [];
anim_right_to_left[ "L" ] = vehicle getanim( "turn_right2left_L" );
anim_right_to_left[ "R" ] = vehicle getanim( "turn_right2left_R" );
anim_dir = anim_left_to_right;
anim_dir_prev = anim_dir;
while( 1 )
{
// Steering value
steering_prev = steering;
direction_prev = direction;
anim_dir_prev = anim_dir;
steering = clamp( vehicle Vehicle_GetSteering(), -1.0, 1.0 );
steering_delta = steering - steering_prev;
direction_switch = false;
// if( steering > 0 )
// {
// anim_speed[ "L" ] = steering;
// anim_speed[ "R" ] = abs( 1 - steering );
// }
// else if( steering < 0 )
// {
// anim_speed[ "L" ] = 1 - abs( steering );
// anim_speed[ "R" ] = abs( steering );
// }
// Change in steering value
if( steering_delta < 0)
{
direction = 1;
anim_dir = anim_left_to_right;
}
else if ( steering_delta > 0 )
{
direction = -1;
anim_dir = anim_right_to_left;
}
if( steering_delta == 0 )
{
anim_speed[ "L" ] = 0;
anim_speed[ "R" ] = 0;
}
else
{
anim_speed[ "L" ] = abs( steering );
anim_speed[ "R" ] = abs( steering );
}
anim_start_time[ "L" ] = anim_speed[ "L" ] * GetAnimLength( anim_dir[ "L" ] );
anim_start_time[ "R" ] = anim_speed[ "R" ] * GetAnimLength( anim_dir[ "R" ] );
// Change in steering direction?
if( direction != direction_prev )
direction_switch = true;
// Set animations and animation times
if( direction_switch )
{
vehicle ClearAnim( anim_dir_prev[ "L" ], 0 );
vehicle ClearAnim( anim_dir_prev[ "R" ], 0 );
// vehicle ClearAnim( anim_dir[ "L" ], 0 );
// vehicle ClearAnim( anim_dir[ "R" ], 0 );
vehicle SetAnim( anim_dir[ "L" ], 1, UPDATE_INTERVAL, anim_speed[ "L" ] );
vehicle SetAnim( anim_dir[ "R" ], 1, UPDATE_INTERVAL, anim_speed[ "R" ] );
}
else
{
}
// vehicle SetAnimTime( anim_dir[ "L" ], anim_start_time[ "L" ] );
// vehicle SetAnimTime( anim_dir[ "R" ], anim_start_time[ "R" ] );
wait UPDATE_INTERVAL;
}
}
// Attribute mutator/accessor
is_key_defined( key )
{
if( !IsPlayer( self ) )
return;
return ( IsDefined( self.vehicle[ key ] ) );
}
set_key( key, value )
{
if( !IsPlayer( self ) )
return;
self.vehicle[ key ] = value;
}
get_key( key )
{
if( !IsPlayer( self ) )
return;
if( IsDefined( self.vehicle[ key ] ) )
return self.vehicle[ key ];
else
return undefined;
}