294 lines
14 KiB
Plaintext
294 lines
14 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\util_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\scene_shared;
|
|
|
|
|
|
|
|
|
|
#using scripts\mp\_load;
|
|
#using scripts\mp\_util;
|
|
|
|
#using scripts\mp\mp_city_fx;
|
|
#using scripts\mp\mp_city_sound;
|
|
|
|
|
|
#using scripts\mp\vehicles\_quadtank;
|
|
#using scripts\mp\vehicles\_siegebot;
|
|
#using scripts\mp\vehicles\_siegebot_theia;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#precache( "client_fx", "ui/fx_dom_cap_indicator_neutral_r120" );
|
|
#precache( "client_fx", "ui/fx_dom_cap_indicator_team_r120" );
|
|
#precache( "client_fx", "ui/fx_dom_marker_neutral_r120" );
|
|
#precache( "client_fx", "ui/fx_dom_marker_team_r120" );
|
|
|
|
function main()
|
|
{
|
|
clientfield::register( "scriptmover", "ring_state", 15000, 2, "int", &ring_state_changed, !true, !true);
|
|
|
|
push_out_threshold = GetDvarFloat( "tu16_physicsPushOutThreshold", -1.0 );
|
|
if ( push_out_threshold != -1.0 )
|
|
SetDvar( "tu16_physicsPushOutThreshold", 10.0 );
|
|
|
|
mp_city_fx::main();
|
|
mp_city_sound::main();
|
|
|
|
load::main();
|
|
|
|
level.domFlagBaseFxOverride = &dom_flag_base_fx_override;
|
|
level.domFlagCapFxOverride = &dom_flag_cap_fx_override;
|
|
|
|
util::waitforclient( 0 ); // This needs to be called after all systems have been registered.
|
|
|
|
level.endGameXCamName = "ui_cam_endgame_mp_city";
|
|
|
|
level scene::play( "p7_fxanim_gp_light_emergency_military_01_bundle" );
|
|
}
|
|
|
|
function dom_flag_base_fx_override( flag, team )
|
|
{
|
|
switch ( flag.name )
|
|
{
|
|
case "a":
|
|
if ( team == "neutral" )
|
|
{
|
|
return "ui/fx_dom_marker_neutral_r120";
|
|
}
|
|
else
|
|
{
|
|
return "ui/fx_dom_marker_team_r120";
|
|
}
|
|
break;
|
|
case "b":
|
|
break;
|
|
case "c":
|
|
if ( team == "neutral" )
|
|
{
|
|
return "ui/fx_dom_marker_neutral_r120";
|
|
}
|
|
else
|
|
{
|
|
return "ui/fx_dom_marker_team_r120";
|
|
}
|
|
break;
|
|
};
|
|
}
|
|
|
|
function dom_flag_cap_fx_override( flag, team )
|
|
{
|
|
switch ( flag.name )
|
|
{
|
|
case "a":
|
|
if ( team == "neutral" )
|
|
{
|
|
return "ui/fx_dom_cap_indicator_neutral_r120";
|
|
}
|
|
else
|
|
{
|
|
return "ui/fx_dom_cap_indicator_team_r120";
|
|
}
|
|
break;
|
|
case "b":
|
|
break;
|
|
case "c":
|
|
if ( team == "neutral" )
|
|
{
|
|
return "ui/fx_dom_cap_indicator_neutral_r120";
|
|
}
|
|
else
|
|
{
|
|
return "ui/fx_dom_cap_indicator_team_r120";
|
|
}
|
|
break;
|
|
};
|
|
}
|
|
|
|
function ring_state_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
self notify ( "state_switched" );
|
|
if( !isDefined( self.emissiveLevel ) )
|
|
{
|
|
self.emissiveLevel = 0;
|
|
}
|
|
|
|
switch( newVal )
|
|
{
|
|
case 0:
|
|
self ring_state_ramp( localClientNum );
|
|
break;
|
|
|
|
case 1:
|
|
self ring_state_on( localClientNum );
|
|
break;
|
|
|
|
case 2:
|
|
self ring_state_flicker( localClientNum );
|
|
break;
|
|
|
|
case 3:
|
|
self thread ring_state_base( localClientNum );
|
|
break;
|
|
}
|
|
}
|
|
|
|
function ramp_shader( localClientNum, time, lowIntensity, highIntensity, ramp_type, goalIntensity )
|
|
{
|
|
self endon ( "state_switched" );
|
|
self endon ( "entityshutdown" );
|
|
|
|
starttime = GetServerTime( localClientNum );
|
|
currTime = starttime;
|
|
|
|
ramp_shader_single( localClientNum, time, goalIntensity, 0 );
|
|
|
|
while( true )
|
|
{
|
|
amount = ( currTime - starttime ) % time;
|
|
percent = float( amount ) / time;
|
|
up = int( ( currTime - starttime ) / time ) % 2;
|
|
if( up )
|
|
{
|
|
percent = 1 - percent;
|
|
}
|
|
|
|
if( ramp_type == 1 )
|
|
{
|
|
percent *= percent;
|
|
}
|
|
|
|
self.emissiveLevel = LerpFloat( lowIntensity, highIntensity, percent );
|
|
self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, Pow( self.emissiveLevel, 4 ), 0, 0 );
|
|
{wait(.016);};
|
|
currTime = GetServerTime( localClientNum );
|
|
}
|
|
}
|
|
|
|
function ramp_shader_random( localClientNum, time, lowIntensity, highIntensity, ramp_type, goalIntensity, total_time )
|
|
{
|
|
self endon ( "state_switched" );
|
|
self endon ( "entityshutdown" );
|
|
|
|
starttime = GetServerTime( localClientNum );
|
|
currTime = starttime;
|
|
|
|
ramp_shader_single( localClientNum, time, goalIntensity, 0 );
|
|
direction = 0;
|
|
|
|
startIntensity = lowintensity;
|
|
finalIntensity = highIntensity;
|
|
while( true )
|
|
{
|
|
percent_total = ( currTime - starttime ) / total_time;
|
|
percent_total *= percent_total;
|
|
percent_total = 1 - percent_total;
|
|
if( percent_total < 0 )
|
|
{
|
|
percent_total = 0;
|
|
}
|
|
|
|
amount = ( currTime - starttime ) % time;
|
|
percent = float( amount ) / time;
|
|
up = int( ( currTime - starttime ) / time ) % 2;
|
|
if( direction != up )
|
|
{
|
|
startIntensity = finalIntensity;
|
|
finalIntensity = RandomFloatRange( 0, 1 * percent_total );
|
|
}
|
|
|
|
if( ramp_type == 1 )
|
|
{
|
|
percent *= percent;
|
|
}
|
|
|
|
self.emissiveLevel = LerpFloat( startIntensity, finalIntensity, percent );
|
|
self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, Pow( self.emissiveLevel, 4 ), 0, 0 );
|
|
{wait(.016);};
|
|
currTime = GetServerTime( localClientNum );
|
|
}
|
|
}
|
|
|
|
function ramp_shader_single( localClientNum, time, goalIntensity, ramp_type )
|
|
{
|
|
self endon ( "entityshutdown" );
|
|
|
|
starttime = GetServerTime( localClientNum );
|
|
currTime = starttime;
|
|
startIntensity = self.emissiveLevel;
|
|
while( self.emissiveLevel != goalIntensity )
|
|
{
|
|
percent = float( currTime - starttime ) / time;
|
|
if( percent > 1 )
|
|
{
|
|
percent = 1;
|
|
}
|
|
|
|
if( ramp_type == 1 )
|
|
{
|
|
percent *= percent;
|
|
}
|
|
|
|
self.emissiveLevel = LerpFloat( startIntensity, goalIntensity, percent );
|
|
self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, Pow( self.emissiveLevel, 4 ), 0, 0 );
|
|
{wait(.016);};
|
|
currTime = GetServerTime( localClientNum );
|
|
}
|
|
|
|
{wait(.016);};
|
|
self notify( "ramp_shader_single_finished" );
|
|
}
|
|
|
|
function ring_state_base( localClientNum )
|
|
{
|
|
self endon ( "entityshutdown" );
|
|
self thread ramp_shader_single( localClientNum, 90, self.emissiveLevel / 2, 1 );
|
|
self waittill( "ramp_shader_single_finished" );
|
|
self thread ramp_shader_single( localClientNum, 4000, 0, 1 );
|
|
self waittill( "ramp_shader_single_finished" );
|
|
self thread ramp_shader( localClientNum, 2000, .15, .25, 1, .15 );
|
|
}
|
|
|
|
function ring_state_ramp( localClientNum )
|
|
{
|
|
self thread ramp_shader_single( localClientNum, 2000, 1, 0 );
|
|
}
|
|
|
|
function ring_state_on( localClientNum )
|
|
{
|
|
self thread ramp_shader( localClientNum, 2000, .25, .5, 0, .25 );
|
|
}
|
|
|
|
function ring_state_flicker( localClientNum )
|
|
{
|
|
self thread ramp_shader_random( localClientNum, 90, 0, 1, 1, 0, 4200 );
|
|
}
|
|
|
|
|
|
|
|
|