Core.Object | +--Engine.Actor | +--Engine.Info | +--XIDCine.AlarmFilter
int
CurrentIndex
void
TurnFilterOff()
TurnFilterOn()
UseCurrentColor()
00001 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 00002 // AlarmFilter Created by iKi 00003 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 00004 class AlarmFilter extends Info placeable; 00005 00006 VAR(Filter) bool bInitiallyOn; 00007 VAR(Filter) Array<Color> Colors; 00008 VAR Color NeutralColor; 00009 VAR(Filter) Array<float> SpeedToReachColor; 00010 VAR(Filter) Array<float> PauseTimeOnColor; 00011 00012 VAR TRANSIENT int CurrentIndex; 00013 VAR TRANSIENT XIIIPlayerController PC; 00014 00015 AUTO STATE STA_init 00016 { 00017 begin: 00018 sleep(0.2); 00019 if (Colors.Length==0) 00020 { 00021 destroy(); 00022 stop; 00023 } 00024 do 00025 { 00026 sleep(0.1); 00027 PC=XIIIGameInfo(Level.Game).MapInfo.XIIIController; 00028 // LOG("----------------------------------"@GetStateName()); 00029 } until (PC!=none); 00030 // if (PC==none) goto ('toto'); 00031 if (bInitiallyOn) 00032 TurnFilterOn(); 00033 else 00034 TurnFilterOff(); 00035 stop; 00036 } 00037 00038 FUNCTION TurnFilterOff() 00039 { 00040 PC.FilterColorWanted=NeutralColor; 00041 PC.FilterColorSpeed=0.5; 00042 GotoState('STA_FilterOff'); 00043 } 00044 00045 FUNCTION TurnFilterOn() 00046 { 00047 CurrentIndex=0; 00048 UseCurrentColor(); 00049 TriggerEvent( event, none, none ); 00050 GotoState('STA_FilterOn'); 00051 } 00052 00053 FUNCTION UseCurrentColor() 00054 { 00055 if ( CurrentIndex >= Colors.Length ) 00056 { 00057 CurrentIndex=0; 00058 TriggerEvent( event, none, none ); 00059 } 00060 // log("UseCurrentColor"@CurrentIndex); 00061 PC.FilterColorWanted=Colors[CurrentIndex]; 00062 if (CurrentIndex<SpeedToReachColor.Length) 00063 PC.FilterColorSpeed=SpeedToReachColor[CurrentIndex]; 00064 else 00065 PC.FilterColorSpeed=1.0; 00066 } 00067 00068 STATE STA_FilterOff 00069 { 00070 EVENT Trigger(Actor a,Pawn p) 00071 { 00072 TurnFilterOn(); 00073 } 00074 } 00075 00076 STATE STA_FilterOn 00077 { 00078 EVENT Tick(float dt) 00079 { 00080 if (PC.FilterColorWanted==PC.FilterColor) 00081 { 00082 if ((CurrentIndex<PauseTimeOnColor.Length) && (PauseTimeOnColor[CurrentIndex]!=0.0)) 00083 { 00084 Disable ('Tick'); 00085 SetTimer(PauseTimeOnColor[CurrentIndex],false); 00086 } 00087 else 00088 { 00089 CurrentIndex++; 00090 UseCurrentColor(); 00091 } 00092 00093 } 00094 } 00095 EVENT Timer() 00096 { 00097 CurrentIndex++; 00098 UseCurrentColor(); 00099 Enable('Tick'); 00100 } 00101 EVENT Trigger(Actor a,Pawn p) 00102 { 00103 TurnFilterOff(); 00104 } 00105 00106 } 00107 00108 00109 00110 defaultproperties 00111 { 00112 NeutralColor=(B=128,G=128,R=128) 00113 bAlwaysRelevant=True 00114 }