boiii-scripts/mp/_waterfall.csc
2023-04-13 17:30:38 +02:00

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 );
}