227 lines
12 KiB
Plaintext
227 lines
12 KiB
Plaintext
#using scripts\shared\system_shared;
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\filter_shared;
|
|
#using scripts\shared\postfx_shared;
|
|
|
|
#using scripts\shared\util_shared;
|
|
|
|
#namespace water_surface;
|
|
|
|
#precache( "client_fx", "player/fx_plyr_water_jump_in_bubbles_1p" );
|
|
#precache( "client_fx", "player/fx_plyr_water_jump_out_splash_1p" );
|
|
|
|
|
|
|
|
|
|
//#define START_WATER_SHEETING { filter::enable_filter_water_sheeting( self, FILTER_INDEX_WATER_SHEET ); }
|
|
|
|
|
|
//#define START_WATER_DIVE { filter::enable_filter_water_dive( self, FILTER_INDEX_WATER_SHEET ); }
|
|
|
|
|
|
function autoexec __init__sytem__() { system::register("water_surface",&__init__,undefined,undefined); }
|
|
|
|
function __init__()
|
|
{
|
|
level._effect["water_player_jump_in"] = "player/fx_plyr_water_jump_in_bubbles_1p";
|
|
level._effect["water_player_jump_out"] = "player/fx_plyr_water_jump_out_splash_1p";
|
|
|
|
if ( isdefined( level.disableWaterSurfaceFX ) && level.disableWaterSurfaceFX == true )
|
|
{
|
|
return;
|
|
}
|
|
|
|
callback::on_localplayer_spawned( &localplayer_spawned );
|
|
}
|
|
|
|
function localplayer_spawned( localClientNum )
|
|
{
|
|
if( self != GetLocalPlayer( localClientNum ) )
|
|
return;
|
|
|
|
if ( isdefined( level.disableWaterSurfaceFX ) && level.disableWaterSurfaceFX == true )
|
|
{
|
|
return;
|
|
}
|
|
|
|
filter::init_filter_water_sheeting( self );
|
|
filter::init_filter_water_dive( self );
|
|
|
|
self thread underwaterWatchBegin();
|
|
self thread underwaterWatchEnd();
|
|
|
|
{ filter::disable_filter_water_sheeting( self, 1 ); stop_player_fx( self ); };
|
|
}
|
|
|
|
function underwaterWatchBegin()
|
|
{
|
|
self notify( "underwaterWatchBegin" );
|
|
self endon( "underwaterWatchBegin" );
|
|
self endon( "entityshutdown" );
|
|
|
|
while( true )
|
|
{
|
|
self waittill( "underwater_begin", teleported );
|
|
if ( teleported )
|
|
{
|
|
{ filter::disable_filter_water_sheeting( self, 1 ); stop_player_fx( self ); };
|
|
{ filter::disable_filter_water_dive( self, 1 ); stop_player_fx( self );};
|
|
}
|
|
else
|
|
{
|
|
self thread underwaterBegin();
|
|
}
|
|
}
|
|
}
|
|
|
|
function underwaterWatchEnd()
|
|
{
|
|
self notify( "underwaterWatchEnd" );
|
|
self endon( "underwaterWatchEnd" );
|
|
self endon( "entityshutdown" );
|
|
|
|
while( true )
|
|
{
|
|
self waittill( "underwater_end", teleported );
|
|
if ( teleported )
|
|
{
|
|
{ filter::disable_filter_water_sheeting( self, 1 ); stop_player_fx( self ); };
|
|
{ filter::disable_filter_water_dive( self, 1 ); stop_player_fx( self );};
|
|
}
|
|
else
|
|
{
|
|
self thread underwaterEnd();
|
|
}
|
|
}
|
|
}
|
|
|
|
function underwaterBegin()
|
|
{
|
|
self notify( "water_surface_underwater_begin" );
|
|
self endon( "water_surface_underwater_begin" );
|
|
self endon( "entityshutdown" );
|
|
|
|
localClientNum = self getlocalclientnumber();
|
|
|
|
{ filter::disable_filter_water_sheeting( self, 1 ); stop_player_fx( self ); };
|
|
|
|
if ( islocalclientdead( localClientNum ) == false )
|
|
{
|
|
self.firstperson_water_fx = PlayFXOnCamera( localClientNum, level._effect["water_player_jump_in"], (0,0,0), (1,0,0), (0,0,1) );
|
|
if ( !isdefined( self.playingPostfxBundle ) || self.playingPostfxBundle != "pstfx_watertransition" )
|
|
{
|
|
self thread postfx::PlayPostfxBundle( "pstfx_watertransition" );
|
|
}
|
|
}
|
|
}
|
|
|
|
function underwaterEnd()
|
|
{
|
|
self notify( "water_surface_underwater_end" );
|
|
self endon( "water_surface_underwater_end" );
|
|
self endon( "entityshutdown" );
|
|
|
|
localClientNum = self getlocalclientnumber();
|
|
if ( islocalclientdead( localClientNum ) == false )
|
|
{
|
|
//self thread startWaterSheeting();
|
|
if ( !isdefined( self.playingPostfxBundle ) || self.playingPostfxBundle != "pstfx_water_t_out" )
|
|
{
|
|
self thread postfx::PlayPostfxBundle( "pstfx_water_t_out" );
|
|
}
|
|
|
|
//self.firstperson_water_fx = PlayFXOnCamera( localClientNum, level._effect["water_player_jump_out"], (0,0,0), (1,0,0), (0,0,1) );
|
|
//self util::waittill_any_timeout( WATER_SHEETING_OVERLAY_TIME, "underwater_begin" );
|
|
}
|
|
//STOP_WATER_SHEETING;
|
|
}
|
|
|
|
|
|
function startWaterDive()
|
|
{
|
|
// turn on the water dive PostFX
|
|
filter::enable_filter_water_dive( self, 1 );
|
|
|
|
// allow the bubble clouds to proceed mostly straight upwards
|
|
filter::set_filter_water_scuba_dive_speed( self, 1, 0.25 );
|
|
|
|
// set the tint color of the wash bubble wash
|
|
filter::set_filter_water_wash_color( self, 1, 0.16, 0.5, 0.9 );
|
|
|
|
// set the wash reveal direction to down
|
|
filter::set_filter_water_wash_reveal_dir( self, 1, -1 );
|
|
// reveal the wash
|
|
for ( i = 0; i < 0.05; i += 0.01 )
|
|
{
|
|
filter::set_filter_water_dive_bubbles( self, 1, i / 0.05 );
|
|
wait 0.01;
|
|
}
|
|
filter::set_filter_water_dive_bubbles( self, 1, 1 );
|
|
|
|
// set the bubble cloud fade direction to up
|
|
filter::set_filter_water_scuba_bubble_attitude( self, 1, -1 );
|
|
// start the bubble clouds
|
|
filter::set_filter_water_scuba_bubbles( self, 1, 1 );
|
|
|
|
// set the wash reveal direction to up
|
|
filter::set_filter_water_wash_reveal_dir( self, 1, 1 );
|
|
// hide the wash
|
|
for ( i = 0.2; i > 0; i -= 0.01 )
|
|
{
|
|
filter::set_filter_water_dive_bubbles( self, 1, i / 0.2 );
|
|
wait 0.01;
|
|
}
|
|
filter::set_filter_water_dive_bubbles( self, 1, 0 );
|
|
|
|
// allow the bubble clouds to play
|
|
wait 0.1;
|
|
// hide the bubble clouds
|
|
for ( i = 0.2; i > 0; i -= 0.01 )
|
|
{
|
|
filter::set_filter_water_scuba_bubbles( self, 1, i / 0.2 );
|
|
wait 0.01;
|
|
}
|
|
}
|
|
|
|
function startWaterSheeting()
|
|
{
|
|
self notify( "startWaterSheeting_singleton" );
|
|
self endon( "startWaterSheeting_singleton" );
|
|
|
|
self endon( "entityshutdown" );
|
|
|
|
// enabled the filter
|
|
filter::enable_filter_water_sheeting( self, 1 );
|
|
|
|
// start everything revealed and scrolling
|
|
filter::set_filter_water_sheet_reveal( self, 1, 1.0 );
|
|
filter::set_filter_water_sheet_speed( self, 1, 1.0 );
|
|
|
|
// taper down and hide
|
|
for ( i = 2.0; i > 0.0; i -= 0.01 )
|
|
{
|
|
filter::set_filter_water_sheet_reveal( self, 1, i / 2.0 );
|
|
filter::set_filter_water_sheet_speed( self, 1, i / 2.0 );
|
|
// reveal the rivulets as well
|
|
rivulet1 = (i/2.0) - 0.19;
|
|
rivulet2 = (i/2.0) - 0.13;
|
|
rivulet3 = (i/2.0) - 0.07;
|
|
filter::set_filter_water_sheet_rivulet_reveal( self, 1, rivulet1, rivulet2, rivulet3 );
|
|
// pause
|
|
wait 0.01;
|
|
}
|
|
filter::set_filter_water_sheet_reveal( self, 1, 0.0 );
|
|
filter::set_filter_water_sheet_speed( self, 1, 0.0 );
|
|
filter::set_filter_water_sheet_rivulet_reveal( self, 1, 0.0, 0.0, 0.0 );
|
|
}
|
|
|
|
function stop_player_fx( localClient )
|
|
{
|
|
if ( IsDefined( localClient.firstperson_water_fx ) )
|
|
{
|
|
localClientNum = localClient getlocalclientnumber();
|
|
StopFx( localClientNum, localClient.firstperson_water_fx );
|
|
localClient.firstperson_water_fx = undefined;
|
|
}
|
|
}
|