Core.Object | +--Engine.Actor | +--Engine.Info | +--XIDCine.GenFlash
Actor
ArrivalReference
int
IndexCurrentFlash
float
MemSpeedFactorLimit
XIIIPlayerController
PC
XIIIPawn
Player
ZoneInfo
PlayerZone
StartReference
alpha
count
void
InitPlayerZone()
00001 //-=-=-=-=-=-=-=-=-=-=-=-=-=- 00002 // GenFlash 00003 // Created by iKi 00004 // Last Modification by iKi 00005 //-=-=-=-=-=-=-=-=-=-=-=-=-=- 00006 00007 #exec Texture Import File=Textures\flash_ico.tga Name=Flash_ico Mips=Off 00008 00009 class GenFlash extends Info 00010 placeable; 00011 00012 STRUCT structFlash 00013 { 00014 VAR() Actor StartReference; 00015 VAR() Actor ArrivalReference; 00016 VAR TRANSIENT bool bMemDuck; 00017 }; 00018 00019 VAR(Flash) structFlash Flash[4]; // max number of flashes 00020 VAR(Flash) Actor ViewFocus[4]; 00021 VAR(Flash) float FeedBackFlashEndDuration; 00022 VAR(Flash) name EventBeginBeginFlash, EventBeginEndFlash,EventEndBeginFlash, EventEndEndFlash, EventPostFeedback; 00023 VAR TRANSIENT float alpha; 00024 VAR TRANSIENT int IndexCurrentFlash; 00025 VAR TRANSIENT XIIIPlayerController PC; 00026 VAR TRANSIENT XIIIPawn Player; 00027 00028 VAR TRANSIENT Vector MemPos; 00029 VAR TRANSIENT Rotator MemRot; 00030 VAR TRANSIENT int count; 00031 VAR TRANSIENT float MemSpeedFactorLimit; 00032 VAR TRANSIENT ZoneInfo PlayerZone; 00033 VAR bool bGod; 00034 00035 EVENT PostBeginPlay() 00036 { 00037 Level.FlashManager=self; 00038 } 00039 00040 EVENT BeginBeginFlash() 00041 { 00042 count++; 00043 GotoState('IntroFlash'); 00044 } 00045 00046 EVENT EndBeginFlash() 00047 { 00048 count++; 00049 GotoState('FinIntroFlash'); 00050 } 00051 00052 EVENT BeginEndFlash() 00053 { 00054 count++; 00055 IndexCurrentFlash=0; 00056 GotoState('ExtroFlash'); 00057 } 00058 00059 EVENT EndEndFlash() 00060 { 00061 count=0; 00062 GotoState('FinExtroFlash'); 00063 } 00064 00065 EVENT Trigger( actor Other, pawn EventInstigator ) 00066 { 00067 // FOR DEBUG 00068 if ( EventInstigator.IsA('XIIIPlayerPawn') ) 00069 { 00070 switch (count%2) 00071 { 00072 case 0: 00073 BeginBeginFlash(); 00074 break; 00075 case 1: 00076 EndBeginFlash(); 00077 break; 00078 } 00079 } 00080 else 00081 { 00082 switch (count) 00083 { 00084 case 0: 00085 BeginBeginFlash(); 00086 break; 00087 case 1: 00088 EndBeginFlash(); 00089 break; 00090 case 2: 00091 BeginEndFlash(); 00092 break; 00093 case 3: 00094 EndEndFlash(); 00095 break; 00096 } 00097 } 00098 00099 } 00100 00101 STATE IntroFlash 00102 { 00103 EVENT BeginState() 00104 { 00105 if (PC==none) 00106 { 00107 PC = XIIIGameInfo( Level.Game ).MapInfo.XIIIController; 00108 Player = XIIIPawn( PC.Pawn ); 00109 } 00110 Flash[ IndexCurrentFlash ].bMemDuck = Player.bIsCrouched; 00111 if ( IndexCurrentFlash == 0 ) 00112 { 00113 bGod = PC.bGodMode; 00114 PC.bGodMode = true; 00115 MemSpeedFactorLimit = Player.SpeedFactorLimit; 00116 } 00117 if ( ViewFocus[ IndexCurrentFlash ]==none ) 00118 Disable( 'Tick' ); 00119 SetTimer( 10, false ); 00120 } 00121 EVENT Timer() 00122 { 00123 EndBeginFlash(); 00124 } 00125 EVENT EndState() 00126 { 00127 SetTimer( 0, false ); 00128 00129 } 00130 EVENT Tick(float dt) 00131 { 00132 LOCAL rotator r; 00133 CONST rotationspeed=80; 00134 00135 if ( PC.IsInState( 'NoControl' ) ) 00136 { 00137 r=rotator(ViewFocus[ IndexCurrentFlash ].Location-(Player.Location+Player.EyePosition()))-PC.Rotation; 00138 r.Yaw=Clamp( ((r.Yaw+32768)&65535)-32768, -rotationspeed*dt*182,rotationspeed*dt*182 ); 00139 r.Roll=Clamp( ((r.Roll+32768)&65535)-32768, -rotationspeed*dt*182,rotationspeed*dt*182 ); 00140 r.Pitch=Clamp( ((r.Pitch+32768)&65535)-32768, -rotationspeed*dt*182,rotationspeed*dt*182 ); 00141 PC.SetRotation(PC.Rotation+r); 00142 Player.SetRotation(PC.Rotation); 00143 } 00144 } 00145 begin: 00146 Sleep(0.2); 00147 if ( IndexCurrentFlash==0 ) 00148 XIIIGameInfo( Level.Game ).MapInfo.SaveInventoryForFlash( Player ); 00149 Player = XIIIPawn( PC.Pawn ); // <= Fake Flash Player Pawn 00150 PC.GotoState('NoControl'); 00151 Player.SetPhysics( PHYS_None ); 00152 Player.SpeedFactorLimit = 1.0; 00153 Player.SetGroundSpeed( 1.0 ); 00154 PC.StopFiring(); 00155 Level.bCineFrame = false; // No frame with flashes 00156 PC.ConstantGlowFog =vect(1,1,1); 00157 PC.ConstantGlowScale =-3; 00158 Sleep(0.1); 00159 PC.ConstantGlowScale =0; 00160 Sleep(0.2); 00161 PC.ConstantGlowScale =-3; 00162 Sleep(0.1); 00163 PC.ConstantGlowScale =0; 00164 Sleep(0.5); 00165 PC.ConstantGlowScale =-3; 00166 Sleep(0.1); 00167 PC.ConstantGlowScale =0; 00168 Sleep(0.2); 00169 PC.ConstantGlowScale =-5; 00170 Sleep(0.1); 00171 PC.ConstantGlowScale =0; 00172 Sleep(0.5); 00173 00174 PC.FilterColorWanted.R=255; 00175 PC.FilterColorWanted.G=255; 00176 PC.FilterColorWanted.B=255; 00177 PC.FilterColorSpeed=1; 00178 // PC.ClientFlash( -3.2, vect(2550,2550,2550)); 00179 PC.DesiredFlashScale=2.0; 00180 PC.ConstantGlowScale=-1.0; 00181 PC.ConstantGlowFog=vect(0.5,0.5,0.5); 00182 00183 if ( /*EventBeginBeginFlash!='' &&*/ IndexCurrentFlash==0 || !(Level.Title~="Plage00") ) 00184 TriggerEvent( EventBeginBeginFlash, none, none); 00185 } 00186 00187 STATE FinIntroFlash 00188 { 00189 EVENT BeginState( ) 00190 { 00191 LOCAL Actor RefDepart; 00192 LOCAL Actor RefArrivee; 00193 00194 RefDepart = Flash[ IndexCurrentFlash ].StartReference; 00195 RefArrivee = Flash[ IndexCurrentFlash ].ArrivalReference; 00196 00197 if (RefArrivee!=none) 00198 { 00199 if (RefDepart==none) 00200 { 00201 if ( IndexCurrentFlash == 0 ) 00202 { 00203 MemPos = Player.Location; 00204 MemRot = PC.Rotation; 00205 } 00206 PC.SetLocation( RefArrivee.Location ); 00207 Player.SetLocation( RefArrivee.Location ); 00208 Player.ShouldCrouch(false); 00209 Player.EndCrouch(Player.CollisionHeight - Player.CrouchHeight); 00210 PC.SetRotation( RefArrivee.Rotation ); 00211 Player.SetRotation( RefArrivee.Rotation ); 00212 } 00213 else 00214 { 00215 if ( IndexCurrentFlash == 0 ) 00216 { 00217 MemPos = Player.Location; 00218 MemRot = PC.Rotation; 00219 } 00220 PC.SetLocation( Player.Location + RefArrivee.Location - RefDepart.Location ); 00221 Player.SetLocation( PC.Location ); 00222 // PC.SetRotation(RefArrivee.Rotation); 00223 // Player.SetRotation(RefArrivee.Rotation); 00224 } 00225 } 00226 if ( Event != '' ) 00227 TriggerEvent( Event, self, none ); 00228 } 00229 begin: 00230 PC.GotoState( 'PlayerWalking' ); 00231 // if (Flash[IndexCurrentFlash].bMemDuck /*&& !PC.bWantsToCrouch*/) 00232 // { 00233 // sleep(1); 00234 // PC.bAltDuck = 1; 00235 // sleep(0.1); 00236 // PC.bAltDuck = 0; 00237 // } 00238 // PC.bAltDuck = 0; 00239 PC.FilterColorWanted.R = 128; 00240 PC.FilterColorWanted.G = 128; 00241 PC.FilterColorWanted.B = 128; 00242 PC.FilterColorSpeed = 1; 00243 PC.ConstantGlowScale = 0; 00244 PC.ConstantGlowFog = vect( 0.5, 0.5, 0.5 ); 00245 IndexCurrentFlash++; 00246 if ( EventEndBeginFlash!='' /*&& IndexCurrentFlash==0*/) 00247 TriggerEvent( EventEndBeginFlash, none, none); 00248 } 00249 00250 STATE ExtroFlash 00251 { 00252 EVENT BeginState() 00253 { 00254 SetTimer( 10, false ); 00255 } 00256 EVENT Timer() 00257 { 00258 EndEndFlash(); 00259 } 00260 EVENT EndState() 00261 { 00262 SetTimer( 0, false ); 00263 00264 } 00265 begin: 00266 Sleep( 0.2 ); 00267 PC.GotoState( 'NoControl' ); 00268 Level.bCineFrame = false; // No frame with flashes 00269 PC.FilterColorWanted.R = 255; 00270 PC.FilterColorWanted.G = 255; 00271 PC.FilterColorWanted.B = 255; 00272 PC.FilterColorSpeed = 1; 00273 PC.DesiredFlashScale = 2.0; 00274 PC.ConstantGlowScale = -1.0; 00275 PC.ConstantGlowFog = vect( 0.5, 0.5, 0.5 ); 00276 if ( EventBeginEndFlash!='') 00277 TriggerEvent( EventBeginEndFlash, none, none); 00278 } 00279 00280 FUNCTION InitPlayerZone() 00281 { 00282 PlayerZone = PC.Pawn.region.Zone; 00283 PlayerZone.FlashEffectDesc.IsActivated = true; 00284 PlayerZone.FlashEffectDesc.Contrast = 0; 00285 PlayerZone.FlashEffectDesc.Brightness = 255; 00286 PlayerZone.FlashEffectDesc.NoGrey=True; 00287 PlayerZone.FlashEffectDesc.LayerColor.R = 192; 00288 PlayerZone.FlashEffectDesc.LayerColor.G = 192; 00289 PlayerZone.FlashEffectDesc.LayerColor.B = 192; 00290 PlayerZone.FlashEffectDesc.LayerSampling[0] = 1.0; 00291 PlayerZone.FlashEffectDesc.LayerBrightness = 255; 00292 PlayerZone.FlashEffectDesc.LayerSampling[3] = 1.0; 00293 PlayerZone.FlashEffectDesc.LayerSampling[6] = 1.0; 00294 PlayerZone.FlashEffectDesc.LayerSampling[7] = 1.0; 00295 } 00296 00297 STATE FinExtroFlash 00298 { 00299 begin: 00300 // Sleep(0.1); 00301 // if( Flash[ IndexCurrentFlash ].bMemDuck && !Player.bIsCrouched /*&& (PC.bAltDuck==0)*/) 00302 // { 00303 // PC.bAltDuck = 1; 00304 // Sleep( 0.01 ); 00305 // } 00306 00307 XIIIGameInfo( Level.Game ).MapInfo.RestoreInventoryAfterFlash( Player ); 00308 Player = XIIIPawn( PC.Pawn ); // Real Player Pawn 00309 Player.bCanCrouch = true; 00310 // PC.PlayerInput.bForceCrouch = Flash[ IndexCurrentFlash ].bMemDuck; 00311 Sleep(0.1); 00312 // PC.SetLocation( MemPos ); 00313 // while ( !Player.SetLocation( MemPos ) ) 00314 // sleep ( 0.03 ); 00315 PC.SetRotation( MemRot ); 00316 Player.SetRotation( MemRot ); 00317 Player.Velocity=vect(0,0,0); 00318 Player.Acceleration=vect(0,0,0); 00319 // if( Flash[ IndexCurrentFlash ].bMemDuck && !Player.bIsCrouched && ( PC.bAltDuck == 1) ) 00320 // PC.bAltDuck = 0; 00321 PC.FilterColorWanted.R = 128; 00322 PC.FilterColorWanted.G = 128; 00323 PC.FilterColorWanted.B = 128; 00324 PC.FilterColorSpeed = 1; 00325 PC.ConstantGlowScale = 0; 00326 PC.ConstantGlowFog = vect( 0.5, 0.5, 0.5 ); 00327 PC.GotoState( 'PlayerWalking' ); 00328 00329 // log("FinExtroFlash : CODE LATENT"); 00330 Alpha=1; 00331 InitPlayerZone(); 00332 TriggerEvent( EventEndEndFlash, none, none); 00333 sleep( 0.25 ); 00334 PC.bGodMode = bGod; 00335 Player.SpeedFactorLimit = MemSpeedFactorLimit; 00336 Player.SetGroundSpeed( 1.0 ); 00337 00338 GotoState( 'FeedBackFlashEnd' ); 00339 } 00340 00341 STATE FeedBackFlashEnd 00342 { 00343 EVENT Tick( float dt ) 00344 { 00345 //LOG(".....Player.SpeedFactorLimit ="@Player.SpeedFactorLimit@Player.GroundSpeed@Player.default.GroundSpeed); 00346 Alpha -= dt/FeedBackFlashEndDuration; 00347 if ( PlayerZone != PC.Pawn.region.Zone ) 00348 { 00349 PlayerZone.FlashEffectDesc.IsActivated = false; 00350 InitPlayerZone(); 00351 } 00352 if ( Alpha < 0 ) 00353 { 00354 PlayerZone.FlashEffectDesc.IsActivated = false; 00355 if ( EventPostFeedback!='') 00356 TriggerEvent( EventPostFeedback, none, none); 00357 GotoState( '' ); 00358 return; 00359 } 00360 PlayerZone.FlashEffectDesc.LayerColor.R = 255 * Alpha; 00361 PlayerZone.FlashEffectDesc.LayerColor.G = 255 * Alpha; 00362 PlayerZone.FlashEffectDesc.LayerColor.B = 255 * Alpha; 00363 PlayerZone.FlashEffectDesc.LayerSampling[0] = 1.0 - 0.6 * Alpha; 00364 PlayerZone.FlashEffectDesc.LayerSampling[1] = 1.0 - 0.6 * Alpha; 00365 PlayerZone.FlashEffectDesc.LayerSampling[2] = 1.0 - 0.45 * Alpha; 00366 PlayerZone.FlashEffectDesc.LayerSampling[3] = 1.0 - 0.45 * Alpha; 00367 PlayerZone.FlashEffectDesc.LayerSampling[4] = 1.0 - 0.25 * Alpha; 00368 PlayerZone.FlashEffectDesc.LayerSampling[5] = 1.0 - 0.25 * Alpha; 00369 } 00370 00371 EVENT BeginState( ) 00372 { 00373 // log("FeedBackFlashEnd : BeginState"); 00374 PC.PlayerInput.bForceCrouch = false; 00375 } 00376 } 00377 00378 00379 00380 00381 defaultproperties 00382 { 00383 FeedBackFlashEndDuration=3.000000 00384 bAlwaysRelevant=True 00385 Tag="FM" 00386 Texture=Texture'XIDCine.Flash_ico' 00387 }