#using scripts\codescripts\struct;

#using scripts\shared\callbacks_shared;
#using scripts\shared\clientfield_shared;
#using scripts\shared\system_shared;
#using scripts\shared\visionset_mgr_shared;
#using scripts\shared\duplicaterender_mgr;
#using scripts\shared\util_shared;

#using scripts\shared\abilities\_ability_player;
#using scripts\shared\abilities\_ability_power;
#using scripts\shared\abilities\_ability_util;

                                                                                
    	   	                                                                                                                                         	                                	                                                                                                                                                                                                                                                                                                                                                                    	        	     	              	    	   	               	                                              	                                                           	                               	                     	                                                                                                           	                                                                 	                                                              	                                                                                                                                             	                            	                                     	                                       	                                                                                                              	   	                  	       	                                                    	                   	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            	                                                                                                 	                                    	                                                                                        	           	                        	                                            	                                             	                                                   	                                                             	                                                         	                                                                    	                                                                                                                                                                                                                                	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  	    	         	                                                              	                                                          	                                   	                                   	                                                    	                                       	                                           	     	                                                                                                                                                                                                                                                      	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	                                                               	        	                                                                                                                              	                                                                                                                     	                               	                                                      	                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	   	                                                                                                                                                                                                                                  	                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                       	   	                                                                      	  	  	


function autoexec __init__sytem__() {     system::register("gadget_flashback",&__init__,undefined,undefined);    }








	

	




	

#precache( "client_fx", "player/fx_plyr_flashback_trail" );
#precache( "client_tagfxset", "gadget_flashback_3p_off" );
	
function __init__()
{
	clientfield::register( "scriptmover", "flashback_trail_fx", 1, 1, "int", &set_flashback_trail_fx, !true, !true );
	clientfield::register( "playercorpse", "flashback_clone", 1, 1, "int", &clone_flashback_changed, !true, !true );
	clientfield::register( "allplayers", "flashback_activated" , 1, 1, "int", &flashback_activated, !true, !true );
	
	visionset_mgr::register_overlay_info_style_postfx_bundle( "flashback_warp", 1, 1, "pstfx_flashback_warp", 0.8 );
	duplicate_render::set_dr_filter_framebuffer( "flashback", 90, "flashback_on", "", 0, "mc/mtl_glitch", 0 );
}

function flashback_activated( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
	self notify ( "player_flashback" );
	player = GetLocalPlayer( localclientnum );
	isFirstPerson = !IsThirdPerson( localclientnum ) && ( player == self );
	if( newVal )
	{
		if( isFirstPerson )
		{
			self PlaySound( localclientnum, "mpl_flashback_reappear_plr" );
		}
		else
		{
			self endon( "entityshutdown" );
			self util::waittill_dobj( localClientNum ); 
			   
			self PlaySound( localclientnum, "mpl_flashback_reappear_npc" );
			PlayTagFXSet( localClientNum, "gadget_flashback_3p_off", self );
		}
	}
}

function set_flashback_trail_fx( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
	player = GetLocalPlayer( localclientnum );
	isFirstPerson = !IsThirdPerson( localclientnum ) && isDefined( self.owner ) && isDefined( player ) && ( self.owner == player );
	if( newVal )
	{
		if( isFirstPerson )
		{
			player PlaySound( localclientnum, "mpl_flashback_disappear_plr" );
		}
		else
		{
			self endon( "entityshutdown" );
			self util::waittill_dobj( localClientNum ); 

			self PlaySound( localclientnum, "mpl_flashback_disappear_npc" );
			PlayFxOnTag( localclientnum, "player/fx_plyr_flashback_demat", self, "tag_origin" );
			PlayFxOnTag( localclientnum, "player/fx_plyr_flashback_trail", self, "tag_origin" );
		}
	}
}

function clone_flashback_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{		
	if ( newVal )
	{
		self clone_flashback_changed_event( localClientNum, newVal);
	}
}

function clone_fade( localClientNum )
{
	self endon ( "entityshutdown" );
	
	startTime = GetServerTime( localClientnum );
	while( true )
	{
		currentTime = GetServerTime( localClientnum );
		elapsedTime = currentTime - startTime;
		elapsedtime = float( elapsedtime / 1000 );
		if( elapsedTime < 1.0  )
		{
			amount = 1.0 - elapsedTime / 1.0;
			self MapShaderConstant( localClientNum, 0, "scriptVector3", 1, 1, 0, amount	 ); 
		}
		else
		{
			self MapShaderConstant( localClientNum, 0, "scriptVector3", 1, 1, 0, 0 ); 
			break;
		}
		
		{wait(.016);};
	}
}

function clone_flashback_changed_event( localClientNum, armorStatusNew )
{
	if ( armorStatusNew )
	{
		self duplicate_render::set_dr_flag( "flashback_on", true );
		self duplicate_render::update_dr_filters(localClientNum);
		self clone_fade( localClientNum );
	}
}

