1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\filter_shared;
5 #using scripts\shared\math_shared;
6 #using scripts\shared\system_shared;
7 #using scripts\shared\util_shared;
8 #using scripts\shared\gfx_shared;
9 #using scripts\shared\duplicaterenderbundle; // Just so it will be included
11 #insert scripts\shared\shared.gsh;
15 #define MAX_NUM_QUADS 2048
33 if ( isdefined(
self.postfxBundelsInited ) )
36 self.postfxBundelsInited =
true;
37 self.playingPostfxBundle =
"";
38 self.forceStopPostfxBundle =
false;
39 self.exitPostfxBundle =
false;
46 self endon(
"entityshutdown");
54 if ( !isdefined( bundle ) )
57 println(
"ERROR: postfx bundle '" + playBundleName +
"' not found" );
67 self.playingPostfxBundle = playBundleName;
69 localClientNum =
self.localClientNum;
74 finishLoopOnExit =
false;
75 firstPersonOnly =
false;
93 num_stages = bundle.num_stages;
96 self.captureImageName = undefined;
97 if ( isDefined( bundle.screenCapture ) && bundle.screenCapture )
99 self.captureImageName = playBundleName;
100 CreateSceneCodeImage( localClientNum,
self.captureImageName );
101 CaptureFrame( localClientNum,
self.captureImageName );
102 setFilterPassCodeTexture( localClientNum, filterid, 0, 0,
self.captureImageName );
106 for ( stageIdx = 0 ; stageIdx < num_stages && !
self.forceStopPostfxBundle ; stageIdx++ )
109 if ( stageIdx < 10 ) stagePrefix +=
"0";
110 stagePrefix += stageIdx +
"_";
112 stageLength = GetStructField( bundle, stagePrefix +
"length" );
113 if ( !isdefined( stageLength ) )
120 stageMaterial = GetStructField( bundle, stagePrefix +
"material" );
121 if ( !isdefined( stageMaterial ) )
129 setFilterPassEnabled( localClientNum, filterid, 0,
true,
false, firstPersonOnly );
131 stageCapture = GetStructField( bundle, stagePrefix +
"screenCapture" );
132 if ( isDefined( stageCapture ) && stageCapture )
134 if ( isDefined(
self.captureImageName ) )
136 FreeCodeImage( localClientNum,
self.captureImageName );
137 self.captureImageName = undefined;
138 setFilterPassCodeTexture( localClientNum, filterid, 0, 0,
"" );
141 self.captureImageName = stagePrefix + playBundleName;
142 CreateSceneCodeImage( localClientNum,
self.captureImageName );
143 captureFrame( localClientNum,
self.captureImageName );
144 setFilterPassCodeTexture( localClientNum, filterid, 0, 0,
self.captureImageName );
147 stageSprite = GetStructField( bundle, stagePrefix +
"spriteFilter" );
148 if ( isDefined( stageSprite ) && stageSprite )
150 setfilterpassquads( localClientNum, filterid, 0,
MAX_NUM_QUADS );
154 setfilterpassquads( localClientNum, filterid, 0, 0 );
157 thermal = GetStructField( bundle, stagePrefix +
"thermal" );
158 EnableThermalDraw( localClientNum, isDefined( thermal ) && thermal );
160 loopingStage = looping && ( !enterStage && stageIdx == 0 || enterStage && stageIdx == 1 );
163 prevTime =
self GetClientTime();
164 while ( ( loopingStage || accumTime < stageLength ) && !
self.forceStopPostfxBundle )
171 currTime =
self GetClientTime();
172 deltaTime = currTime - prevTime;
173 accumTime += deltaTime;
174 totalAccumTime += deltaTime;
180 while ( accumTime >= stageLength )
181 accumTime -= stageLength;
185 loopingStage =
false;
186 if ( !finishLoopOnExit )
192 setFilterPassEnabled( localClientNum, filterid, 0,
false );
209 setFilterPassConstant( localClientNum, filterid, 0, baseShaderConstIndex + 0, values[0] );
210 setFilterPassConstant( localClientNum, filterid, 0, baseShaderConstIndex + 1, values[1] );
211 setFilterPassConstant( localClientNum, filterid, 0, baseShaderConstIndex + 2, values[2] );
212 setFilterPassConstant( localClientNum, filterid, 0, baseShaderConstIndex + 3, values[3] );
219 if( isDefined(
self ) )
221 self notify (
"finished_playing_postfx_bundle" );
222 self.forceStopPostfxBundle =
false;
223 self.exitPostfxBundle =
false;
224 self.playingPostfxBundle =
"";
227 setFilterPassQuads( localClientNum, filterid, 0, 0 );
228 setFilterPassEnabled( localClientNum, filterid, 0,
false );
229 EnableThermalDraw( localClientNum,
false );
231 if ( isDefined(
self.captureImageName ) )
233 setFilterPassCodeTexture( localClientNum, filterid, 0, 0,
"" );
234 FreeCodeImage( localClientNum,
self.captureImageName );
235 self.captureImageName = undefined;
243 if (
self.playingPostfxBundle !=
"" )
251 self notify(
"stopPostfxBundle_singleton" );
252 self endon(
"stopPostfxBundle_singleton" );
254 if ( isdefined(
self.playingPostfxBundle ) &&
self.playingPostfxBundle !=
"" )
256 self.forceStopPostfxBundle =
true;
258 while (
self.playingPostfxBundle !=
"" )
262 if ( !isdefined(
self ) )
274 self.exitPostfxBundle =
true;
281 if( !isdefined(
self.overlayClients ) )
283 self.overlayClients = [];
286 if( !isdefined(
self.overlayClients[localClientNum] ) )
288 self.overlayClients[localClientNum] = [];
291 self.overlayClients[localClientNum][system] = enabled;
293 foreach( _, en
in self.overlayClients[localClientNum] )
297 EnableFrontendStreamingOverlay( localClientNum,
true );
302 EnableFrontendStreamingOverlay( localClientNum,
false );