IW4-Dump-Files/maps/_overheat.gsc

247 lines
6.8 KiB
Plaintext

#include maps\_hud_util;
#include maps\_utility;
#include common_scripts\utility;
TURRET_HEAT_MAX = 114;// Dont touch
// Tweaks
TURRET_HEAT_RATE = 1.0; // Rate that the gun overheats( high number means faster overheat )
TURRET_COOL_RATE = 1.0; // Rate that the gun cools down( higher number means it cools off faster )
OVERHEAT_TIME = 2.0; // Time to flash the overheat meter
OVERHEAT_FLASH_TIME = 0.2; // When the gun first overheats the status bar blinks at this rate
OVERHEAT_FLASH_TIME_INCREMENT = 0.1; // Each time the status bar blinks it increments by this much each blink( causes it to blink slower as the overheat period runs out )
GUN_USAGE_DELAY_AFTER_OVERHEAT = 2.0; // Once you have overheated the gun waits this amount of time before turning on again
init_overheat()
{
precacheShader( "hud_temperature_gauge" );
}
overheat_enable( vehicle )
{
assert( isPlayer( self ) );
assert( isdefined( vehicle ) );
assert( vehicle.classname == "script_vehicle" );
assertEx( !isdefined( self.overheat ), "Tried to call overheat_enable() on a player that is already doing overheat logic." );
if ( isdefined( self.overheat ) )
return;
self.overheat = spawnStruct();
self.overheat.turret_heat_status = 1;
self.overheat.overheated = false;
self thread create_hud();
self thread status_meter_update( vehicle );
}
overheat_disable()
{
assert( isPlayer( self ) );
self notify( "disable_overheat" );
level.savehere = undefined;
waittillframeend;
if ( isdefined( self.overheat.overheat_bg ) )
self.overheat.overheat_bg destroy();
if ( isdefined( self.overheat.overheat_status ) )
self.overheat.overheat_status destroy();
self.overheat = undefined;
}
status_meter_update( vehicle )
{
// Notify doesn't work the way Ned is doing his vehicle ride so this hacked with attackButtonPressed() for now
self endon( "disable_overheat" );
for ( ;; )
{
//iprintln( self.overheat.turret_heat_status );
if ( self.overheat.turret_heat_status >= TURRET_HEAT_MAX )
{
wait 0.05;
continue;
}
if ( self attackButtonPressed() && !self.overheat.overheated )
self.overheat.turret_heat_status += TURRET_HEAT_RATE;
else
self.overheat.turret_heat_status -= TURRET_COOL_RATE;
self.overheat.turret_heat_status = cap_value( self.overheat.turret_heat_status, 1, TURRET_HEAT_MAX );
self update_overheat_meter();
self thread overheated( vehicle );
wait 0.05;
}
}
update_overheat_meter()
{
self.overheat.overheat_status scaleOverTime( 0.05, 10, int( self.overheat.turret_heat_status ) );
self thread overheat_setColor( self.overheat.turret_heat_status, 0.05 );
}
create_hud()
{
//Draw the temperature gauge and filler bar components
self endon( "disable_overheat" );
coopOffset = 0;
if ( is_coop() )
coopOffset = 70;
barX = -10;
barY = -152 + coopOffset;
if ( !isdefined( self.overheat.overheat_bg ) )
{
self.overheat.overheat_bg = newClientHudElem( self );
self.overheat.overheat_bg.alignX = "right";
self.overheat.overheat_bg.alignY = "bottom";
self.overheat.overheat_bg.horzAlign = "right";
self.overheat.overheat_bg.vertAlign = "bottom";
self.overheat.overheat_bg.x = 2;
self.overheat.overheat_bg.y = -120 + coopOffset;
self.overheat.overheat_bg setShader( "hud_temperature_gauge", 35, 150 );
self.overheat.overheat_bg.sort = 4;
}
//status bar
if ( !isdefined( self.overheat.overheat_status ) )
{
self.overheat.overheat_status = newClientHudElem( self );
self.overheat.overheat_status.alignX = "right";
self.overheat.overheat_status.alignY = "bottom";
self.overheat.overheat_status.horzAlign = "right";
self.overheat.overheat_status.vertAlign = "bottom";
self.overheat.overheat_status.x = barX;
self.overheat.overheat_status.y = barY;
self.overheat.overheat_status setShader( "white", 10, 1 );
self.overheat.overheat_status.color = ( 1, .9, 0 );
self.overheat.overheat_status.alpha = 1;
self.overheat.overheat_status.sort = 1;
}
}
overheated( vehicle )
{
self endon( "disable_overheat" );
if ( self.overheat.turret_heat_status < TURRET_HEAT_MAX )
return;
if ( self.overheat.overheated )
return;
self.overheat.overheated = true;
// Gun has overheated
level.savehere = false;
self thread play_sound_on_entity( "smokegrenade_explode_default" );
self.overheat.turret_heat_status = TURRET_HEAT_MAX;
if ( isdefined( vehicle.mgturret ) )
vehicle.mgturret[ 0 ] turretFireDisable();
time = getTime();
flashTime = OVERHEAT_FLASH_TIME;
for ( ;; )
{
self.overheat.overheat_status fadeovertime( flashTime );
self.overheat.overheat_status.alpha = 0.2;
wait flashTime;
self.overheat.overheat_status fadeovertime( flashTime );
self.overheat.overheat_status.alpha = 1.0;
wait flashTime;
flashTime += OVERHEAT_FLASH_TIME_INCREMENT;
if ( getTime() - time >= OVERHEAT_TIME * 1000 )
break;
}
self.overheat.overheat_status.alpha = 1.0;
// Start cooldown again
self.overheat.turret_heat_status -= TURRET_COOL_RATE;
// wait for it to cool down a bit
wait GUN_USAGE_DELAY_AFTER_OVERHEAT;
// Make gun usable
if ( isdefined( vehicle.mgturret ) )
vehicle.mgturret[ 0 ] turretFireEnable();
level.savehere = undefined;
self.overheat.overheated = false;
}
overheat_setColor( value, fadeTime )
{
self endon( "disable_overheat" );
//define what colors to use
color_cold = [];
color_cold[ 0 ] = 1.0;
color_cold[ 1 ] = 0.9;
color_cold[ 2 ] = 0.0;
color_warm = [];
color_warm[ 0 ] = 1.0;
color_warm[ 1 ] = 0.5;
color_warm[ 2 ] = 0.0;
color_hot = [];
color_hot[ 0 ] = 0.9;
color_hot[ 1 ] = 0.16;
color_hot[ 2 ] = 0.0;
//default color
CurrentColor = [];
CurrentColor[ 0 ] = color_cold[ 0 ];
CurrentColor[ 1 ] = color_cold[ 1 ];
CurrentColor[ 2 ] = color_cold[ 2 ];
//define where the non blend points are
cold = 0;
warm = ( TURRET_HEAT_MAX / 2 );
hot = TURRET_HEAT_MAX;
iPercentage = undefined;
difference = undefined;
increment = undefined;
if ( ( value > cold ) && ( value <= warm ) )
{
iPercentage = int( value * ( 100 / warm ) );
for ( colorIndex = 0 ; colorIndex < CurrentColor.size ; colorIndex++ )
{
difference = ( color_warm[ colorIndex ] - color_cold[ colorIndex ] );
increment = ( difference / 100 );
CurrentColor[ colorIndex ] = color_cold[ colorIndex ] + ( increment * iPercentage );
}
}
else if ( ( value > warm ) && ( value <= hot ) )
{
iPercentage = int( ( value - warm ) * ( 100 / ( hot - warm ) ) );
for ( colorIndex = 0 ; colorIndex < CurrentColor.size ; colorIndex++ )
{
difference = ( color_hot[ colorIndex ] - color_warm[ colorIndex ] );
increment = ( difference / 100 );
CurrentColor[ colorIndex ] = color_warm[ colorIndex ] + ( increment * iPercentage );
}
}
if ( isdefined( fadeTime ) )
self.overheat.overheat_status fadeOverTime( fadeTime );
if ( isdefined( self.overheat.overheat_status.color ) )
self.overheat.overheat_status.color = ( CurrentColor[ 0 ], CurrentColor[ 1 ], CurrentColor[ 2 ] );
}