// ==================================================================== // Onslaught minimap tab // // Written by Matt Oelfke // (C) 2003, Epic Games, Inc. All Rights Reserved // ==================================================================== class UT2K4Tab_OnslaughtMap extends MidGamePanel; // Commented out UT2k4Merge - Ramm /* var() float OnslaughtMapCenterX, OnslaughtMapCenterY, OnslaughtMapRadius; var automated GUIFooter f_Legend; var automated GUILabel l_HelpText, l_HintText, l_TeamText; var automated GUIButton b_Designer; //calls up the link designer var automated moComboBox co_MenuOptions; var automated GUIImage i_Background, i_HintImage, i_Team; var() localized string MapPreferenceStrings[3]; var() localized string NodeTeleportHelpText, SetDefaultText, ChooseSpawnText, ClearDefaultText, SetDefaultHint, ClearDefaultHint, SpawnText, TeleportText, SpawnHint, TeleportHint, SelectedHint, UnderAttackHint, CoreHint, NodeHint, UnclaimedHint, LockedHint; var() localized string Titles[6]; var() localized string NewSelectedHint, NewTeleportHint, EnemyCoreHint; var localized string DefendMsg; var color TColor[2]; var() material NodeImage; var() color SelectionColor; var() bool bNodeTeleporting; //this page is open because the player wants to node teleport // Actor references - these must be cleared at level change var ONSPlayerReplicationInfo PRI; var ONSPowerCore SelectedCore; function InitComponent(GUIController MyController, GUIComponent MyOwner) { local int x; Super.InitComponent(MyController, MyOwner); for (x = 0; x < 3; x++) co_MenuOptions.AddItem(MapPreferenceStrings[x]); } event Opened( GUIComponent Sender ) { Super.Opened(Sender); bNodeTeleporting = false; } //called to inform tab that it should be in Node Teleport mode instead of Select Spawn Point mode function NodeTeleporting() { bNodeTeleporting = true; } function ShowPanel(bool bShow) { local string colorname,t; Super.ShowPanel(bShow); if ( bShow ) { if ( (PRI != None) && (PRI.Team != None) ) { colorname = PRI.Team.ColorNames[PRI.Team.TeamIndex]; t = Repl(DefendMsg, "%t", colorname, false); l_TeamText.Caption = t; i_Team.Image = PRI.Level.GRI.TeamSymbols[PRI.Team.TeamIndex]; i_Team.ImageColor = TColor[PRI.Team.TeamIndex]; } if (PRI != None && (PRI.Level.NetMode == NM_Standalone || (PRI.bAdmin && PRI.Level.GRI != None && !PRI.Level.GRI.bMatchHasBegun))) b_Designer.Show(); else b_Designer.Hide(); } } function bool InternalOnPreDraw( Canvas C ) { local ONSPowerCore Core; local ONSHudOnslaught ONSHUD; ONSHUD = ONSHudOnslaught(PlayerOwner().myHud); Core = ONSHUD.LocatePowerCore(Controller.MouseX - OnslaughtMapCenterX, Controller.MouseY - OnslaughtMapCenterY, OnslaughtMapRadius); if ( Core == None || Core.CoreStage == 255 || Core.PowerLinks.Length == 0 ) { l_HintText.Caption = ""; l_HelpText.Caption = ""; i_HintImage.Image = None; l_TeamText.SetVisibility(true); } else { l_TeamText.SetVisibility(false); if ( Core.bUnderAttack || (Core.CoreStage == 0 && Core.bSevered) ) DrawAttackHint(); else if ( PRI != None && Core == PRI.StartCore ) DrawSpawnHint(); else if (Core.bFinalCore) { if (Core.DefenderTeamIndex == PlayerOwner().PlayerReplicationInfo.Team.TeamIndex) DrawCoreHint(true); else DrawCoreHint(false); } else DrawNodeHint( ONSHUD, Core ); } return false; } function DrawAttackHint() { l_HintText.Caption = UnderAttackHint; SetHintImage(NodeImage,0,64,64,64); l_HelpText.Caption=Titles[0]; } function DrawSpawnHint() { l_HintText.Caption = SelectedHint; SetHintImage( NodeImage, 64, 64, 64, 64); l_HelpText.Caption=Titles[1]; } function DrawCoreHint(bool HomeTeam) { if (!HomeTeam) { l_HintText.Caption = EnemyCoreHint; SetHintImage( NodeImage, 65, 0, 62, 64 ); return; } l_HintText.Caption = CoreHint; SetHintImage( NodeImage, 65, 0, 62, 64 ); l_HelpText.Caption=Titles[2]; if (bNodeTeleporting) L_HintText.Caption = l_HintText.Caption$NewTeleportHint; l_HintText.Caption = l_HintText.Caption$NewSelectedHint; } function DrawNodeHint( ONSHudOnslaught HUD, ONSPowerCore Core ) { if ( HUD == None || Core == None ) return; if (Core.CoreStage == 4) { if (HUD.PowerCoreAttackable(Core)) { l_HintText.Caption = UnclaimedHint; SetHintImage( NodeImage,0,0,31,32); l_HelpText.Caption=Titles[3]; } else { l_HintText.Caption = LockedHint; SetHintImage( NodeImage,0,32,31,32); l_HelpText.Caption=Titles[4]; } } else if (HUD.PowerCoreAttackable(Core)) { l_HintText.Caption = NodeHint; SetHintImage( NodeImage, 32,0,32,31); l_HelpText.Caption=Titles[5]; } else { l_HintText.Caption = LockedHint; SetHintImage( NodeImage,0,32,31,32); l_HelpText.Caption=Titles[4]; } if (PlayerOwner().PlayerReplicationInfo.Team != None && Core.DefenderTeamIndex == PlayerOwner().PlayerReplicationInfo.Team.TeamIndex) { if (bNodeTeleporting) L_HintText.Caption = l_HintText.Caption$NewTeleportHint; if (!HUD.PowerCoreAttackable(Core) ) l_HintText.Caption = l_HintText.Caption$NewSelectedHint; } } function SetHintImage( Material NewImage, int X1, int Y1, int X2, int Y2 ) { i_HintImage.Image = NewImage; i_HintImage.X1 = X1; i_HintImage.X2 = X1 + X2; i_HintImage.Y1 = Y1; i_HintImage.Y2 = Y1 + Y2; } function bool PreDrawMap(Canvas C) { local float L,T,W,H; OnslaughtMapRadius = fmin( i_Background.ActualHeight(),i_Background.ActualWidth() ) / 2; OnslaughtMapCenterX = i_Background.Bounds[0] + OnslaughtMapRadius; OnslaughtMapCenterY = i_Background.Bounds[1] + i_Background.ActualHeight() / 2; l_HelpText.bBoundToParent=false; l_HelpText.bScaleToParent=false; l_HintText.bScaleToParent=false; l_HintText.bBoundToParent=false; i_HintImage.bScaleToParent=false; i_HintImage.bBoundToParent=false; l_TeamText.bScaleToParent=false; l_TeamText.bBoundToParent=false; i_Team.bScaleToParent=false; i_Team.bBoundToParent=false; L = OnslaughtMapCenterX + OnslaughtMapRadius + (ActualWidth()*0.05); T = OnslaughtMapCenterY - OnslaughtMapRadius; W = ActualLeft() + ActualWidth() - L; H = ActualTop() + ActualHeight() - T; i_HintImage.WinLeft = L; i_HintImage.WinTop = T; l_HelpText.WinLeft = i_HintImage.ActualLeft() + i_HintImage.ActualWidth() + 8; l_HelpText.WinTop = t; l_HelpText.WinHeight = i_HintImage.ActualHeight(); l_HelpTExt.WinWidth = W - i_HintImage.ActualWidth() - 8; t += i_HintImage.ActualHeight()+8; l_HintText.WinLeft = l; l_HintText.WinTop= t; l_HintText.WinWidth = w; l_HintText.WinHeight = H - i_HintImage.ActualHeight() - 8; L = OnslaughtMapCenterX + OnslaughtMapRadius; W = ActualLeft() + ActualWidth() - L; i_Team.WinLeft = L; i_Team.WinWidth = W; i_Team.WinHeight = W; i_Team.WinTop = i_Background.ActualTop() + i_Background.ActualHeight() - i_Team.ActualHeight(); l_TeamText.WinLeft = L; l_TeamText.WinWidth = W; l_TeamText.WinTop = i_Team.ActualTop() - l_TeamText.ActualHeight(); return false; } function bool DrawMap(Canvas C) { local ONSPowerCore Core; local ONSHudOnslaught ONSHUD; local float HS; if ( PRI != None ) Core = PRI.StartCore; ONSHUD = ONSHudOnslaught(PlayerOwner().myHud); HS = ONSHUD.HudScale; ONSHUD.HudScale=1.0; ONSHUD.DrawRadarMap(C, OnslaughtMapCenterX, OnslaughtMapCenterY, OnslaughtMapRadius, false); ONSHUD.HudScale=HS; if ( Core != None ) ONSHUD.DrawSpawnIcon(C, Core.HUDLocation, Core.bFinalCore, ONSHUD.IconScale, ONSHUD.HUDScale); return true; } function InternalOnPostDraw(Canvas Canvas) { PRI = ONSPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo); if (PRI != None) { bInit = False; co_MenuOptions.SetIndex(PRI.ShowMapOnDeath); OnRendered = None; ShowPanel(true); } } function SetSelectedCore() { local ONSPowerCore Core; Core = ONSHudOnslaught(PlayerOwner().myHUD).LocatePowerCore(Controller.MouseX - OnslaughtMapCenterX, Controller.MouseY - OnslaughtMapCenterY, OnslaughtMapRadius); if ( ValidSpawnPoint(Core) ) SelectedCore = Core; else SelectedCore = None; } function bool SelectClick( GUIComponent Sender ) { local PlayerController PC; if (bInit || PRI == None || PRI.bOnlySpectator) return true; PC = PlayerOwner(); SetSelectedCore(); if ( SelectedCore == None ) return True; if ( SelectedCore == PRI.StartCore ) PRI.SetStartCore( None, false ); else PRI.SetStartCore( SelectedCore, false ); } function bool SpawnClick(GUIComponent Sender) { local PlayerController PC; if (bInit || PRI == None || PRI.bOnlySpectator) return true; PC = PlayerOwner(); SetSelectedCore(); if ( SelectedCore == None ) return True; if ( bNodeTeleporting ) { if ( SelectedCore != None ) { Controller.CloseMenu(false); PRI.TeleportTo(SelectedCore); } } else { Controller.CloseMenu(false); PRI.SetStartCore( SelectedCore, true ); PC.ServerRestartPlayer(); } } function bool InternalOnClick(GUIComponent Sender) { if (bInit || PRI == None) return true; PRI.RequestLinkDesigner(); return true; } function Timer() { local PlayerController PC; PC = PlayerOwner(); PC.ServerRestartPlayer(); PC.bFire = 0; PC.bAltFire = 0; Controller.CloseMenu(false); } function bool ValidSpawnPoint(ONSPowerCore Core) { if ( Core == None ) return false; if (Core.DefenderTeamIndex == PRI.Team.TeamIndex && Core.CoreStage == 0 && (!Core.bUnderAttack || Core.bFinalCore) && Core.PowerLinks.Length > 0) return true; return false; } function Closed(GUIComponent Sender, bool bCancelled) { local ONSPlayerReplicationInfo.EMapPreference Pref; if (PRI != None) { Pref = EMapPreference(co_MenuOptions.GetIndex()); if ( Pref != PRI.ShowMapOnDeath ) { PRI.ShowMapOnDeath = Pref; PRI.SaveConfig(); } } Super.Closed(Sender,bCancelled); } function Free() { Super.Free(); PRI = None; SelectedCore = None; } function LevelChanged() { Super.LevelChanged(); PRI = None; SelectedCore = None; } defaultproperties { NodeImage=Material'NewHUDIcons' SelectionColor=(R=255,G=255,B=255,A=255) OnslaughtMapCenterX = 0.65 OnslaughtMapCenterY = 0.40 OnslaughtMapRadius = 0.30 MapPreferenceStrings(0)="Never" MapPreferenceStrings(1)="When Body is Still" MapPreferenceStrings(2)="Immediately" ChooseSpawnText="Choose Your Spawn Point" NodeTeleportHelpText="Choose Node Teleport Destination" SetDefaultText="Set Default" ClearDefaultText="Clear Default" SetDefaultHint="Set the currently selected node as your preferred spawn location" ClearDefaultHint="Allow the game to choose the most appropriate spawn location" SpawnText="Spawn Here" TeleportText="Teleport Here" SpawnHint="Spawn at the currently selected node" TeleportHint="Teleport to the currently selected node" Begin Object Class=GUILabel Name=HelpText TextAlign=TXTA_Left TextColor=(B=255,G=255,R=255) Caption="" // FontScale=FNS_Small StyleName="TextLabel" WinWidth=0.274188 WinLeft=0.719388 WinTop=0.035141 bBoundToParent=false bScaleToParent=false End Object l_HelpText=HelpText Begin Object Class=GUIImage Name=BackgroundImage Image=Material'2K4Menus.Controls.OutlineSquare' ImageStyle=ISTY_Stretched OnPreDraw=PreDrawMap OnDraw=DrawMap WinWidth=0.634989 WinHeight=0.747156 WinLeft=0.029188 WinTop=0.070134 bAcceptsInput=True OnClick=SpawnClick OnRightClick=SelectClick End Object i_Background=BackgroundImage Begin Object Class=GUIImage Name=IconHintImage ImageStyle=ISTY_Scaled Image=Material'NewHUDIcons' WinWidth=0.043667 WinHeight=0.049502 WinLeft=0.671639 WinTop=0.033996 RenderWeight=0.51 bBoundToParent=false bScaleToParent=false End Object i_HintImage=IconHintImage Begin Object Class=GUILabel Name=HintLabel StyleName="TextLabel" FontScale=FNS_Small WinWidth=0.323888 WinHeight=0.742797 WinLeft=0.669020 WinTop=0.117390 RenderWeight=0.52 bMultiline=true bBoundToParent=false bScaleToParent=false End Object l_HintText=HintLabel Begin Object Class=moComboBox Name=MapComboBox WinWidth=0.628008 WinHeight=0.038462 WinLeft=0.032347 WinTop=0.866668 CaptionWidth=0.3 Caption="Show Map:" TabOrder=2 bReadOnly=true End Object co_MenuOptions=MapComboBox Begin Object Class=GUIButton Name=LinkDesignButton WinWidth=0.187876 WinHeight=0.047400 WinLeft=0.760387 WinTop=0.863674 Caption="Link Designer" OnClick=InternalOnClick TabOrder=3 bAutosize=true RenderWeight=0.52 End Object b_Designer=LinkDesignButton Begin Object Class=GUIImage Name=iTeam WinWidth=0.338338 WinHeight=0.405539 WinLeft=0.619446 WinTop=0.400000 ImageStyle=ISTY_Scaled ImageColor=(R=0,G=128,B=255,A=90) TabOrder=10 End Object i_Team=iTeam Begin Object Class=GUILabel Name=TeamLabel StyleName="TextLabel" Caption="Defend the Red Core" FontScale=FNS_Small WinWidth=0.385550 WinHeight=0.043963 WinLeft=0.597081 WinTop=0.391063 RenderWeight=0.52 bMultiline=true TextAlign=TXTA_Center End Object l_TeamText=TeamLabel SelectedHint="Preferred spawn location" UnderAttackHint="Node is currently under attack" CoreHint="Main power core" NodeHint="Node is currently vulnerable to enemy attack" UnclaimedHint="Node is currently neutral and may be taken by either team" LockedHint="Node is currently unlinked and may not be attacked by the enemy" Titles(0)="Core (Under Attack)" Titles(1)="Preferred Node" Titles(2)="Core" Titles(3)="Node (Unclaimed)" Titles(4)="Node (Locked)" Titles(5)="Node (Attackable)" NewSelectedHint="||Right-Click on this node to select it as the preferred spawn location." NewTeleportHint="||Left-Click on this node to teleport to it" EnemyCoreHint="Enemy Core||Connect the nodes until you can reach this core" OnPreDraw=InternalOnPreDraw OnRendered=InternalOnPostDraw DefendMsg="Defend the %t core"; TColor(0)=(R=255,G=100,B=100,A=128) TColor(1)=(R=0,G=128,B=255,A=128) } */