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;
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\duplicaterender.gsh;
13 #namespace duplicate_render_bundle;
31 if ( isdefined(
self.dupRenderBundelsInited ) )
34 self.dupRenderBundelsInited =
true;
35 self.playingdupRenderBundle =
"";
36 self.forceStopdupRenderBundle =
false;
37 self.exitdupRenderBundle =
false;
45 self endon(
"entityshutdown");
49 stopPlayingdupRenderBundle();
52 if ( !isdefined( bundle ) )
55 println(
"ERROR: dupRender bundle '" + playBundleName +
"' not found" );
64 self.playingdupRenderBundle = playBundleName;
66 localClientNum =
self.localClientNum;
71 finishLoopOnExit =
false;
88 num_stages = bundle.num_stages;
91 for ( stageIdx = 0 ; stageIdx < num_stages && !
self.forceStopdupRenderBundle ; stageIdx++ )
94 if ( stageIdx < 10 ) stagePrefix +=
"0";
95 stagePrefix += stageIdx +
"_";
97 stageLength = GetStructField( bundle, stagePrefix +
"length" );
98 if ( !isdefined( stageLength ) )
100 finishPlayingdupRenderBundle( localClientNum, stagePrefix +
" length not defined" );
110 loopingStage = looping && ( !enterStage && stageIdx == 0 || enterStage && stageIdx == 1 );
113 prevTime =
self GetClientTime();
114 while ( ( loopingStage || accumTime < stageLength ) && !
self.forceStopdupRenderBundle )
120 currTime =
self GetClientTime();
121 deltaTime = currTime - prevTime;
122 accumTime += deltaTime;
123 totalAccumTime += deltaTime;
129 while ( accumTime >= stageLength )
130 accumTime -= stageLength;
132 if (
self.exitdupRenderBundle )
134 loopingStage =
false;
135 if ( !finishLoopOnExit )
141 self disableduplicaterendering();
144 finishPlayingdupRenderBundle( localClientNum,
"Finished " + playBundleName );
151 methodStr = GetStructField( bundle, prefix +
"method" );
152 if ( isDefined( methodStr ) )
159 case "default material":
162 case "custom material":
165 case "force custom material":
171 case "enemy material":
177 materialName = GetStructField( bundle, prefix +
"mc_material" );
180 if ( isDefined( materialName ) && materialName !=
"" )
182 materialName =
"mc/" + materialName;
184 if ( !isDefined( materialId ) )
188 if ( !isDefined( materialId ) )
193 self AddDuplicateRenderOption( type, method, materialId );
199 self MapShaderConstant( localClientNum, 0, shaderConstantName, values[0], values[1], values[2], values[3] );
207 if ( isdefined( msg ) )
213 self.forceStopdupRenderBundle =
false;
214 self.exitdupRenderBundle =
false;
215 self.playingdupRenderBundle =
"";
222 if (
self.playingdupRenderBundle !=
"" )
224 stopdupRenderBundle();
230 if ( !
IS_TRUE(
self.forceStopdupRenderBundle ) && isdefined(
self.playingdupRenderBundle ) &&
self.playingdupRenderBundle !=
"" )
232 self.forceStopdupRenderBundle =
true;
234 while (
self.playingdupRenderBundle !=
"" )
238 if ( !isdefined(
self ) )
248 if ( !
IS_TRUE(
self.exitdupRenderBundle ) && isdefined(
self.playingdupRenderBundle ) &&
self.playingdupRenderBundle !=
"" )
250 self.exitdupRenderBundle =
true;