192 lines
10 KiB
Plaintext
192 lines
10 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\filter_shared;
|
|
#using scripts\shared\postfx_shared;
|
|
#using scripts\shared\trigger_shared;
|
|
#using scripts\shared\util_shared;
|
|
#using scripts\shared\water_surface;
|
|
|
|
#using scripts\mp\_load;
|
|
#using scripts\mp\_util;
|
|
|
|
|
|
|
|
#namespace waterfall;
|
|
|
|
function waterfallOverlay( localClientNum )
|
|
{
|
|
triggers = GetEntArray( localClientNum, "waterfall", "targetname" );
|
|
foreach( trigger in triggers )
|
|
{
|
|
trigger thread setupWaterfall( localClientNum );
|
|
}
|
|
}
|
|
|
|
function waterfallMistOverlay( localClientNum )
|
|
{
|
|
triggers = GetEntArray( localClientNum, "waterfall_mist", "targetname" );
|
|
foreach( trigger in triggers )
|
|
{
|
|
trigger thread setupWaterfallMist( localClientNum );
|
|
}
|
|
}
|
|
|
|
function waterfallMistOverlayReset( localClientNum )
|
|
{
|
|
localPlayer = GetLocalPlayer( localClientNum );
|
|
localPlayer.rainOpacity = 0.0;
|
|
}
|
|
|
|
function setupWaterfallMist( localClientNum )
|
|
{
|
|
level notify( "setupWaterfallmist_waterfall_csc" + localclientnum );
|
|
level endon ( "setupWaterfallmist_waterfall_csc" + localclientnum );
|
|
|
|
trigger = self;
|
|
for(;;)
|
|
{
|
|
trigger waittill( "trigger", trigPlayer );
|
|
|
|
if ( !trigPlayer islocalplayer() )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
localclientnum = trigPlayer getlocalclientnumber();
|
|
if ( isdefined( localclientnum ) )
|
|
{
|
|
localplayer = getlocalplayer( localclientnum );
|
|
}
|
|
else
|
|
{
|
|
localplayer = trigPlayer;
|
|
}
|
|
|
|
filter::init_filter_sprite_rain( localplayer );
|
|
trigger thread trigger::function_thread( localplayer, &trig_enter_waterfall_mist, &trig_leave_waterfall_mist );
|
|
}
|
|
}
|
|
|
|
function setupWaterfall( localClientNum, localowner )
|
|
{
|
|
level notify( "setupWaterfall_waterfall_csc" + localclientnum );
|
|
level endon ( "setupWaterfall_waterfall_csc" + localclientnum );
|
|
|
|
trigger = self;
|
|
for(;;)
|
|
{
|
|
trigger waittill( "trigger", trigPlayer );
|
|
|
|
if ( !trigPlayer islocalplayer() )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
localclientnum = trigPlayer getlocalclientnumber();
|
|
if ( isdefined( localclientnum ) )
|
|
{
|
|
localplayer = getlocalplayer( localclientnum );
|
|
}
|
|
else
|
|
{
|
|
localplayer = trigPlayer;
|
|
}
|
|
|
|
trigger thread trigger::function_thread( localplayer, &trig_enter_waterfall, &trig_leave_waterfall );
|
|
}
|
|
}
|
|
|
|
function trig_enter_waterfall( localplayer )
|
|
{
|
|
trigger = self;
|
|
localclientnum = localplayer.localclientnum;
|
|
localplayer thread postfx::playPostfxBundle( "pstfx_waterfall" );
|
|
|
|
playsound(0, "amb_waterfall_hit", (0,0,0));
|
|
|
|
while ( trigger istouching( localplayer ) )
|
|
{
|
|
localplayer PlayRumbleOnEntity( localClientNum, "waterfall_rumble" );
|
|
wait( 0.1 );
|
|
}
|
|
}
|
|
|
|
function trig_leave_waterfall( localplayer )
|
|
{
|
|
trigger = self;
|
|
localClientNum = localplayer.localClientNum;
|
|
localplayer postfx::StopPostfxBundle();
|
|
if ( IsUnderwater( localClientNum ) == false )
|
|
{
|
|
localplayer thread water_surface::startWaterSheeting();
|
|
}
|
|
}
|
|
|
|
function trig_enter_waterfall_mist( localPlayer )
|
|
{
|
|
localPlayer endon( "entityshutdown" );
|
|
trigger = self;
|
|
|
|
if ( !isdefined( localPlayer.rainOpacity ) )
|
|
localPlayer.rainOpacity = 0;
|
|
|
|
if ( localPlayer.rainOpacity == 0 )
|
|
{
|
|
filter::set_filter_sprite_rain_seed_offset( localPlayer, 0, RandomFloat( 1 ) );
|
|
}
|
|
|
|
filter::enable_filter_sprite_rain( localPlayer, 0 );
|
|
while ( trigger istouching( localPlayer ) )
|
|
{
|
|
localClientNum = trigger.localClientNum;
|
|
if ( !isdefined( localClientNum ) )
|
|
{
|
|
localClientNum = localPlayer getlocalclientnumber();
|
|
}
|
|
if ( IsUnderwater( localClientNum ) )
|
|
{
|
|
filter::disable_filter_sprite_rain( localPlayer, 0 );
|
|
break;
|
|
}
|
|
|
|
localPlayer.rainOpacity += 0.003;
|
|
if ( localPlayer.rainOpacity > 1 )
|
|
{
|
|
localPlayer.rainOpacity = 1;
|
|
}
|
|
filter::set_filter_sprite_rain_opacity( localPlayer, 0, localPlayer.rainOpacity );
|
|
filter::set_filter_sprite_rain_elapsed( localPlayer, 0, localPlayer getClientTime() );
|
|
|
|
{wait(.016);};
|
|
}
|
|
|
|
}
|
|
|
|
function trig_leave_waterfall_mist( localPlayer )
|
|
{
|
|
localPlayer endon( "entityshutdown" );
|
|
trigger = self;
|
|
|
|
if ( isdefined( localPlayer.rainOpacity ) )
|
|
{
|
|
while ( !( trigger istouching( localPlayer ) ) && localPlayer.rainOpacity > 0.0 )
|
|
{
|
|
localClientNum = trigger.localClientNum;
|
|
if ( IsUnderwater( localClientNum ) )
|
|
{
|
|
filter::disable_filter_sprite_rain( localPlayer, 0 );
|
|
break;
|
|
}
|
|
|
|
localPlayer.rainOpacity -= 0.005;
|
|
filter::set_filter_sprite_rain_opacity( localPlayer, 0, localPlayer.rainOpacity );
|
|
filter::set_filter_sprite_rain_elapsed( localPlayer, 0, localPlayer getClientTime() );
|
|
{wait(.016);};
|
|
}
|
|
}
|
|
|
|
localPlayer.rainOpacity = 0;
|
|
filter::disable_filter_sprite_rain( localPlayer, 0 );
|
|
}
|