2023-04-13 17:30:38 +02:00

108 lines
11 KiB
Plaintext

#using scripts\codescripts\struct;
#using scripts\shared\callbacks_shared;
#using scripts\shared\clientfield_shared;
#using scripts\shared\duplicaterender_mgr;
#using scripts\shared\filter_shared;
#using scripts\shared\visionset_mgr_shared;
#using scripts\shared\util_shared;
#using scripts\shared\abilities\_ability_player;
#using scripts\shared\abilities\_ability_power;
#using scripts\shared\abilities\_ability_util;
#using scripts\shared\abilities\gadgets\_gadget_clone_render;
#using scripts\shared\system_shared;
function autoexec __init__sytem__() { system::register("gadget_clone",&__init__,undefined,undefined); }
function __init__()
{
clientfield::register( "actor", "clone_activated", 1, 1, "int", &clone_activated, !true, true );
clientfield::register( "actor", "clone_damaged", 1, 1, "int", &clone_damaged, !true, !true );
clientfield::register( "allplayers", "clone_activated", 1, 1, "int", &player_clone_activated, !true, !true );
}
function set_shader( localClientNum, enabled, entity )
{
if( entity isfriendly( localclientnum ) )
{
self duplicate_render::update_dr_flag( localClientNum, "clone_ally_on", enabled );
}
else
{
self duplicate_render::update_dr_flag( localClientNum, "clone_enemy_on", enabled );
}
}
function clone_activated( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
if( newVal )
{
self._isClone = true;
self set_shader( localClientNum, true, self getowner( localClientNum ) );
if( isDefined( level._monitor_tracker ) )
{
self thread [[level._monitor_tracker]]( localClientNum );
}
self thread gadget_clone_render::transition_shader( localClientNum );
}
}
function player_clone_activated( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
if ( !isdefined( self ) )
return;
if( newVal )
{
self set_shader( localclientnum, true, self );
self thread gadget_clone_render::transition_shader( localClientNum );
}
else
{
self set_shader( localclientnum, false, self );
self notify ( "clone_shader_off" );
self MapShaderConstant( localClientNum, 0, "scriptVector3", 1, 0, 0, 1 );
}
}
function clone_damage_flicker( localClientNum )
{
self endon( "entityshutdown" );
self notify( "start_flicker" );
self endon( "start_flicker" );
self duplicate_render::update_dr_flag( localClientNum, "clone_damage", true );
self waittill( "stop_flicker" );
self duplicate_render::update_dr_flag( localClientNum, "clone_damage", false );
}
function clone_damage_finish()
{
self endon( "entityshutdown" );
self endon( "start_flicker" );
self endon( "stop_flicker" );
wait( .2 );
self notify( "stop_flicker" );
}
function clone_damaged( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
if( newVal )
{
self thread clone_damage_flicker( localClientNum );
}
else
{
self thread clone_damage_finish();
}
}