Core.Object | +--Engine.Interactions | +--Engine.Interaction | +--XIII.XIIIPlayerInteraction | +--XIIIMP.XIIIMPBotInteraction
Array
BotControllerList
int
CurrentBot,CurrentOrder,OrderPhase,InitialOrder[16]
enum
ERenderStyle
Texture
Fond1,Fond2
GameType
color
HudBasicColor,BgkColor
float
InfoX,InfoY,InfoW,InfoH
bool
InitParams
InputUp,InputDown,InputLeft,InputRight,InitInitialOrder
IsInBotMnu,KeyIsRelease
sound
MnuValid,MnuCancel,MnuSelect
RepeatInputUp,RepeatInputDown,RepeatInputLeft,RepeatInputRight
Up,Down,Left,Right
string
strCTFRole[3],strBombDefendRole[3],strBombAttackRole[3]
strTeamRole[3],strAllBot,strResetOrder
void
AddIfoLine(Canvas C, string InfoTxt, bool AddBg)
//_________________________________________________________________________________
InitCtrlParams()
00001 //----------------------------------------------------------- 00002 // 00003 //----------------------------------------------------------- 00004 class XIIIMPBotInteraction extends XIIIPlayerInteraction; 00005 00006 var Array<BotController> BotControllerList; 00007 var bool IsInBotMnu,KeyIsRelease; 00008 var localized string strTeamRole[3],strAllBot,strResetOrder; 00009 var localized string strCTFRole[3],strBombDefendRole[3],strBombAttackRole[3]; 00010 var int CurrentBot,CurrentOrder,OrderPhase,InitialOrder[16]; 00011 var bool Up,Down,Left,Right; 00012 var bool InputUp,InputDown,InputLeft,InputRight,InitInitialOrder; 00013 var bool RepeatInputUp,RepeatInputDown,RepeatInputLeft,RepeatInputRight; 00014 var texture Fond1,Fond2; 00015 var color HudBasicColor,BgkColor; 00016 var float InfoX,InfoY,InfoW,InfoH; 00017 var sound MnuValid,MnuCancel,MnuSelect; 00018 var bool InitParams; 00019 var int GameType; 00020 00021 var enum ERenderStyle 00022 { 00023 STY_None, 00024 STY_Normal, 00025 STY_Masked, 00026 STY_Translucent, 00027 STY_Modulated, 00028 STY_Alpha, 00029 STY_Particle 00030 } Style; 00031 00032 //_____________________________________________________________________________ 00033 // EndMap - Prevent actor references before to change of map. 00034 event EndMap() 00035 { 00036 local int i; 00037 00038 Super.EndMap(); 00039 Master.RemoveInteraction(self); 00040 for( i=0 ; i<BotControllerList.Length ; i++) 00041 { 00042 BotControllerList[i] = none; 00043 } 00044 } 00045 00046 //_________________________________________________________________________________ 00047 00048 function InitCtrlParams() 00049 { 00050 local int Loop; 00051 00052 InitParams = true; 00053 00054 if( GameType == 0 ) 00055 { 00056 // CTF 00057 00058 for( Loop=0 ; Loop < 3 ; Loop++ ) 00059 strTeamRole[ Loop ] = strCTFRole[ Loop ]; 00060 } 00061 else if( GameType == 1 ) 00062 { 00063 // Bomb Defend 00064 00065 for( Loop=0 ; Loop < 3 ; Loop++ ) 00066 strTeamRole[ Loop ] = strBombDefendRole[ Loop ]; 00067 } 00068 else if( GameType == 2 ) 00069 { 00070 // Bomb Attack 00071 00072 for( Loop=0 ; Loop < 3 ; Loop++ ) 00073 strTeamRole[ Loop ] = strBombAttackRole[ Loop ]; 00074 } 00075 } 00076 00077 //_________________________________________________________________________________ 00078 /* 00079 event bool KeyEvent( EInputKey Key, EInputAction Action, FLOAT Delta ) 00080 { 00081 local int Loop; 00082 local int OldOrder; 00083 00084 if( MyPC.IsInState('GameEnded') ) 00085 { 00086 OrderPhase = -1; 00087 return false; 00088 } 00089 00090 if ( (Level.NetMode != NM_StandAlone) || (BotControllerList.Length == 0) ) 00091 return false; 00092 00093 InputLeft = false; 00094 InputRight = false; 00095 InputUp = false; 00096 InputDown = false; 00097 00098 Left = false; 00099 Right = false; 00100 Up = false; 00101 Down = false; 00102 00103 switch( XIIIGameInfo(Level.Game).Plateforme ) 00104 { 00105 case PF_PC : 00106 if( Key == IK_Joy13 ) Up = true; 00107 if( Key == IK_Joy15 ) Down = true; 00108 if( Key == IK_Joy16 ) Left = true; 00109 if( Key == IK_Joy14 ) Right = true; 00110 00111 if( OrderPhase == -1 ) 00112 { 00113 if( Key == 222 ) Left = true; 00114 } 00115 else 00116 { 00117 if( Key == 222 ) Left = true; 00118 if( Key == 27 ) Left = true; 00119 } 00120 00121 if( Key == 38 ) Up = true; 00122 if( Key == 40 ) Down = true; 00123 00124 if( Key == 13 ) Right = true; 00125 00126 break; 00127 case PF_PS2 : 00128 if( Key == IK_Joy13 ) Up = true; 00129 if( Key == IK_Joy15 ) Down = true; 00130 if( Key == IK_Joy16 ) Left = true; 00131 if( Key == IK_Joy14 ) Right = true; 00132 break; 00133 case PF_GC : 00134 if( Key == IK_Joy10 ) Up = true; 00135 if( Key == IK_Joy11 ) Down = true; 00136 if( Key == IK_Joy8 ) Left = true; 00137 if( Key == IK_Joy9 ) Right = true; 00138 break; 00139 case PF_XBOX : 00140 if( Key == IK_Joy9 ) Up = true; 00141 if( Key == IK_Joy10 ) Down = true; 00142 if( Key == IK_Joy11 ) Left = true; 00143 if( Key == IK_Joy12 ) Right = true; 00144 break; 00145 } 00146 00147 if( Action==IST_Press ) 00148 { 00149 if( Left ) 00150 { 00151 if( !RepeatInputLeft ) 00152 { 00153 InputLeft = true; 00154 RepeatInputLeft = true; 00155 } 00156 } 00157 else if( Right ) 00158 { 00159 if( !RepeatInputRight ) 00160 { 00161 InputRight = true; 00162 RepeatInputRight = true; 00163 } 00164 } 00165 else if( Up ) 00166 { 00167 if( !RepeatInputUp ) 00168 { 00169 InputUp = true; 00170 RepeatInputUp = true; 00171 } 00172 } 00173 else if( Down ) 00174 { 00175 if( !RepeatInputDown ) 00176 { 00177 InputDown = true; 00178 RepeatInputDown = true; 00179 } 00180 } 00181 } 00182 else if( Action==IST_Release ) 00183 { 00184 if( Left ) 00185 { 00186 RepeatInputLeft = false; 00187 } 00188 else if( Right ) 00189 { 00190 RepeatInputRight = false; 00191 } 00192 else if( Up ) 00193 { 00194 RepeatInputUp = false; 00195 } 00196 else if( Down ) 00197 { 00198 RepeatInputDown = false; 00199 } 00200 } 00201 00202 if( OrderPhase == -1 ) 00203 { 00204 if( InputLeft ) 00205 { 00206 if( ! InitInitialOrder ) 00207 { 00208 InitInitialOrder = true; 00209 00210 for( Loop=0;Loop<BotControllerList.Length;Loop++) 00211 InitialOrder[Loop] = BotControllerList[ Loop ].TeamRole; 00212 00213 if( ! InitParams ) 00214 InitCtrlParams(); 00215 } 00216 00217 OrderPhase = 0; 00218 00219 MyPC.Pawn.PlaySound( MnuValid ); 00220 } 00221 } 00222 else if( OrderPhase == 0 ) 00223 { 00224 if( InputLeft ) 00225 { 00226 OrderPhase = -1; 00227 MyPC.Pawn.PlaySound( MnuCancel ); 00228 } 00229 else if( InputRight ) 00230 { 00231 OrderPhase = 1; 00232 MyPC.Pawn.PlaySound( MnuValid ); 00233 } 00234 else if( InputDown ) 00235 { 00236 CurrentBot++; 00237 00238 MyPC.Pawn.PlaySound( MnuSelect ); 00239 00240 if( CurrentBot == BotControllerList.Length) 00241 CurrentBot = -1; 00242 } 00243 else if( InputUp ) 00244 { 00245 CurrentBot--; 00246 00247 MyPC.Pawn.PlaySound( MnuSelect ); 00248 00249 if( CurrentBot == -2) 00250 CurrentBot = BotControllerList.Length-1; 00251 } 00252 } 00253 else if( OrderPhase == 1 ) 00254 { 00255 if( InputLeft ) 00256 { 00257 OrderPhase = 0; 00258 MyPC.Pawn.PlaySound( MnuCancel ); 00259 } 00260 else if( InputRight ) 00261 { 00262 if( CurrentOrder != -1 ) 00263 { 00264 MyPC.Pawn.PlaySound( MnuValid ); 00265 00266 if( CurrentBot == -1 ) 00267 { 00268 for( Loop=0;Loop<BotControllerList.Length;Loop++) 00269 { 00270 OldOrder = BotControllerList[ Loop ].TeamRole; 00271 BotControllerList[ Loop ].UpDateOrder( OldOrder,CurrentOrder ); 00272 } 00273 } 00274 else 00275 { 00276 OldOrder = BotControllerList[ CurrentBot ].TeamRole; 00277 BotControllerList[ CurrentBot ].UpDateOrder( OldOrder,CurrentOrder ); 00278 } 00279 } 00280 else 00281 { 00282 MyPC.Pawn.PlaySound( MnuValid ); 00283 00284 if( CurrentBot == -1 ) 00285 { 00286 for( Loop=0;Loop<BotControllerList.Length;Loop++) 00287 { 00288 OldOrder = BotControllerList[ Loop ].TeamRole; 00289 BotControllerList[ Loop ].UpDateOrder( OldOrder,InitialOrder[Loop] ); 00290 } 00291 } 00292 else 00293 { 00294 OldOrder = BotControllerList[ CurrentBot ].TeamRole; 00295 BotControllerList[ CurrentBot ].UpDateOrder( OldOrder,InitialOrder[CurrentBot] ); 00296 } 00297 } 00298 00299 OrderPhase = -1; 00300 } 00301 else if( InputDown ) 00302 { 00303 CurrentOrder++; 00304 00305 MyPC.Pawn.PlaySound( MnuSelect ); 00306 00307 if( CurrentOrder == 3) 00308 CurrentOrder = -1; 00309 00310 if( ( GameType == 0 ) && ( CurrentOrder == 2 ) ) 00311 CurrentOrder = -1; 00312 } 00313 else if( InputUp ) 00314 { 00315 CurrentOrder--; 00316 00317 MyPC.Pawn.PlaySound( MnuSelect ); 00318 00319 if( CurrentOrder == -2) 00320 { 00321 if( GameType == 0 ) 00322 CurrentOrder = 1; 00323 else 00324 CurrentOrder = 2; 00325 } 00326 } 00327 } 00328 00329 return false; 00330 } 00331 */ 00332 //_________________________________________________________________________________ 00333 00334 function AddIfoLine( Canvas C, string InfoTxt , bool AddBg ) 00335 { 00336 local color MsgColor; 00337 00338 if( AddBg ) 00339 MsgColor = HudBasicColor; 00340 else 00341 MsgColor = BgkColor; 00342 00343 C.SpaceX = 0; 00344 00345 // BackGround Icon + Text 00346 00347 C.bUseBorder = false; 00348 C.Style = ERenderStyle.STY_Alpha; 00349 C.DrawColor = MsgColor; 00350 00351 // BackGround Part 1 00352 00353 C.SetPos(InfoX,InfoY); 00354 00355 C.DrawTile(Fond2, InfoH-4,InfoH-4, 1, 0, Fond2.USize-1, Fond2.VSize); 00356 00357 // BackGround Part 2 00358 00359 C.DrawTile(Fond1, InfoW,InfoH-4, 0, 0, Fond1.USize, Fond1.VSize); 00360 00361 // BackGround Part 3 00362 00363 C.DrawTile(Fond2, InfoH-4,InfoH-4, -1, 0, -(Fond2.USize-1), Fond2.VSize ); 00364 00365 if( AddBg ) 00366 { 00367 C.Style = ERenderStyle.STY_Translucent; 00368 00369 C.DrawColor = MsgColor; 00370 C.DrawColor.A = 200; 00371 00372 // BackGround Part 1 00373 00374 C.SetPos(InfoX,InfoY); 00375 C.DrawTile(Fond2, InfoH-4,InfoH-4, 1, 0, Fond2.USize-1, Fond2.VSize); 00376 00377 // BackGround Part 2 00378 00379 C.DrawTile(Fond1, InfoW,InfoH-4, 0, 0, Fond1.USize, Fond1.VSize); 00380 00381 // BackGround Part 3 00382 00383 C.DrawTile(Fond2, InfoH-4,InfoH-4, -1, 0, -(Fond2.USize-1), Fond2.VSize ); 00384 } 00385 00386 // Text 00387 00388 C.SpaceX = 1; 00389 00390 C.Style=ERenderStyle.STY_Normal; 00391 00392 C.DrawColor = BgkColor; 00393 C.DrawColor.R *= 0.3; 00394 C.DrawColor.G *= 0.3; 00395 C.DrawColor.B *= 0.3; 00396 C.SetPos(InfoX+InfoH-4+1,InfoY-1); 00397 C.DrawText(InfoTxt, false); 00398 00399 C.DrawColor = HudBasicColor; 00400 C.SetPos(InfoX+InfoH-4,InfoY-2); 00401 C.DrawText(InfoTxt, false); 00402 00403 InfoY += InfoH; 00404 } 00405 00406 //_________________________________________________________________________________ 00407 00408 simulated event MyPCPostRender(Canvas C) 00409 { 00410 local string Txt; 00411 local int Loop; 00412 local float H,W,TmpW,TmpH; 00413 00414 super.MyPCPostRender(C); 00415 00416 if( BotControllerList.Length == 0 ) 00417 return; 00418 00419 if( OrderPhase == 0 ) 00420 { 00421 C.Font = C.SmallFont; 00422 C.SpaceX = 1; 00423 00424 C.strLen( strAllBot,InfoW,InfoH); 00425 00426 for( Loop=0;Loop<BotControllerList.Length;Loop++) 00427 { 00428 Txt = BotControllerList[ Loop ].MyName@"-"@strTeamRole[BotControllerList[ Loop ].TeamRole]; 00429 00430 C.strLen( Txt,TmpW,InfoH); 00431 00432 if( TmpW > InfoW ) 00433 InfoW=TmpW; 00434 } 00435 00436 InfoX = C.ClipX/2-InfoW/2-InfoH+4; 00437 InfoY = C.ClipY/2-InfoH*(BotControllerList.Length+1)/2; 00438 00439 if( CurrentBot == -1 ) 00440 AddIfoLine( C, strAllBot , true ); 00441 else 00442 AddIfoLine( C, strAllBot , false ); 00443 00444 for( Loop=0;Loop<BotControllerList.Length;Loop++) 00445 { 00446 Txt = BotControllerList[ Loop ].MyName@"-"@strTeamRole[BotControllerList[ Loop ].TeamRole]; 00447 00448 if( Loop == CurrentBot ) 00449 AddIfoLine( C, Txt , true ); 00450 else 00451 AddIfoLine( C, Txt , false ); 00452 } 00453 } 00454 if( OrderPhase == 1 ) 00455 { 00456 C.Font = C.SmallFont; 00457 C.SpaceX = 1; 00458 00459 C.strLen( strResetOrder,InfoW,InfoH); 00460 00461 if( GameType == 0 ) 00462 { 00463 for( Loop=0;Loop<2;Loop++) 00464 { 00465 C.strLen( strTeamRole[Loop],TmpW,InfoH); 00466 00467 if( TmpW > InfoW ) 00468 InfoW=TmpW; 00469 } 00470 } 00471 else 00472 { 00473 for( Loop=0;Loop<3;Loop++) 00474 { 00475 C.strLen( strTeamRole[Loop],TmpW,InfoH); 00476 00477 if( TmpW > InfoW ) 00478 InfoW=TmpW; 00479 } 00480 } 00481 00482 InfoX = C.ClipX/2-InfoW/2-InfoH+4; 00483 InfoY = C.ClipY/2-InfoH*3/2; 00484 00485 if( CurrentOrder == -1 ) 00486 AddIfoLine( C , strResetOrder , true ); 00487 else 00488 AddIfoLine( C , strResetOrder , false ); 00489 00490 if( GameType == 0 ) 00491 { 00492 for( Loop=0;Loop<2;Loop++) 00493 { 00494 if( Loop == CurrentOrder ) 00495 AddIfoLine( C , strTeamRole[Loop] , true ); 00496 else 00497 AddIfoLine( C , strTeamRole[Loop] , false ); 00498 } 00499 } 00500 else 00501 { 00502 for( Loop=0;Loop<3;Loop++) 00503 { 00504 if( Loop == CurrentOrder ) 00505 AddIfoLine( C , strTeamRole[Loop] , true ); 00506 else 00507 AddIfoLine( C , strTeamRole[Loop] , false ); 00508 } 00509 } 00510 } 00511 } 00512 00513 00514 00515 defaultproperties 00516 { 00517 KeyIsRelease=True 00518 strAllBot="All" 00519 strResetOrder="Reset" 00520 strCTFRole(0)="Attack" 00521 strCTFRole(1)="Defense" 00522 strCTFRole(2)="Support" 00523 strBombDefendRole(0)="Defend Point 1" 00524 strBombDefendRole(1)="Defend Point 2" 00525 strBombDefendRole(2)="Defend Point 3" 00526 strBombAttackRole(0)="Attack Point 1" 00527 strBombAttackRole(1)="Attack Point 2" 00528 strBombAttackRole(2)="Attack Point 3" 00529 CurrentBot=-1 00530 CurrentOrder=-1 00531 OrderPhase=-1 00532 Fond1=Texture'XIIIMenu.HUD.FondMsg' 00533 Fond2=Texture'XIIIMenu.HUD.fondmsg2' 00534 HudBasicColor=(B=210,G=252,R=255,A=230) 00535 BgkColor=(B=63,G=76,R=77,A=90) 00536 MnuValid=Sound'XIIIsound.Interface.MnValid' 00537 MnuCancel=Sound'XIIIsound.Interface.MnAnnul' 00538 MnuSelect=Sound'XIIIsound.Interface.MnCurseur' 00539 }