Here is some of the 2.8.5 code, from AGP_UI.u
3 classes you might find usefull.
This code should only be used as a reference, I don't garantee that the decompilation is correct, it's still a work in progress.
//================================================================================
// UIHUDCompass.
//================================================================================
class UIHUDCompass extends UIControl;
const kMaxObjectives= 8;
var(None) int ScaledObjectiveTextX;
var(None) int ScaledObjectiveTextY;
var(None) Texture _tLeft;
var(None) Texture _tRight;
var(None) Texture _BracketTexture;
var(None) UIControl _ElementList;
var(None) bool _InitializedObjectives;
var export Texture _tObjectiveSymbols;
var export string _sObjectiveSymbols;
var(None) Texture _tObjectiveUp;
var(None) Texture _tObjectiveDown;
var(None) Texture _tObjectiveLevel;
var export UIHUDCompassPointObj _Objectives;
var(None) UIHUDCompassPointV _TeamPoint;
var(None) Texture _tTeamSSG;
var(None) Texture _tTeamSGT;
var(None) Texture _tTeamPVT;
var(None) Texture _tTeamMedic;
var(None) Material _tTeamBleed;
var input Texture _tFT;
var(None) Texture _tTeamIFVIP;
var(None) Texture _tTeamSFCapt;
var(None) Texture _tTeamSSG1st;
var(None) Texture _tTeamIF;
var(None) bool _bIsSettingTarget;
const kArrowDeadRange= 132;
const kObjectiveArrowScaleX= 0.5;
const kObjectiveSize= 16;
const kObjectiveTextY= 112;
const kObjectiveTextX= 786;
const kLocationTextY= 82;
const kLocationTextX= 786;
const kCompassTextureWidth= 1024;
const kCompassY= 16;
const kCompassHeight= 32;
const kCompassWidth= 512;
function Destroyed ()
{
local(None) int i;
local(None) UIControl Control;
local(None) UIControl NextControl;
Super.Destroyed();
_tLeft=None;
_tRight=None;
_BracketTexture=None;
_TeamPoint=None;
_tTeamSSG=None;
_tTeamSGT=None;
_tTeamPVT=None;
_tTeamMedic=None;
_tTeamBleed=None;
_tTeamIFVIP=None;
_tTeamSFCapt=None;
_tTeamSSG1st=None;
_tTeamIF=None;
i=0;
JL0068:
if ( i < 8 )
{
_tObjectiveSymbols[i]=None;
if ( _Objectives[i] != None )
{
_Objectives[i].Destroyed();
_Objectives[i]=None;
}
i++;
goto JL0068;
}
Control=_ElementList;
JL00C9:
if ( Control != None )
{
NextControl=Control.cNextControl;
Control.Destroyed();
Control=NextControl;
goto JL00C9;
}
_ElementList=None;
return;
}
function IsSettingTarget ()
{
local(None) bool ReturnValue;
return _bIsSettingTarget;
return;
}
function SetTarget ()
{
local(None) bool E;
_bIsSettingTarget=E;
return;
}
function Draw ()
{
local(None) Canvas Canvas;
local(None) int oldstyle;
local(None) GameReplicationInfo GRI;
local(None) PlayerController PC;
if ( cFrame.cActor == None )
{
return;
}
if ( Pawn(cFrame.cActor) == None )
{
return;
}
oldstyle=Canvas.Style;
if ( !_InitializedObjectives )
{
InitializeObjectives();
}
PC=cFrame.cHUD.PlayerOwner;
GRI=PC.GameReplicationInfo;
if ( ShouldDrawCompass() )
{
if ( (GRI != None) && !GRI.bHUDHideCompass && (PC != None) && !PC.bHUDHideCompass )
{
DrawLocation(Canvas);
}
}
if ( ShouldDrawObjectiveList() )
{
if ( (GRI != None) && !GRI.bHUDHideCompass && (PC != None) && !PC.bHUDHideCompass )
{
DrawObjectiveList(Canvas);
}
}
Canvas.Style=oldstyle;
return;
}
function InitializeObjectives ()
{
local(None) BaseObjective obj;
local(None) UIHUDCompassPointObj objcompass;
local(None) int objnum;
objnum=0;
foreach cFrame.cActor.DynamicActors(Class'BaseObjective',obj)
{
if ( obj.IsA('AGP_Objective') )
{
objcompass=new (None,Class'UIHUDCompassPointObj');
objcompass.setObjective(obj);
objnum=obj.GetHUDPosition();
if ( objnum > 8 )
{
objnum=8 - 1;
}
objcompass.SetTexture(_tObjectiveSymbols[objnum]);
objcompass.SetText(_sObjectiveSymbols[objnum]);
objcompass.setOrder(objnum);
objcompass.Create(cFrame,cScreen,0,-1,0);
if ( _Objectives[objnum] == None )
{
_Objectives[objnum]=objcompass;
} else {
objcompass.cNextControl=_Objectives[objnum];
_Objectives[objnum]=objcompass;
}
}
}
_InitializedObjectives=True;
return;
}
function DrawCompass ()
{
local(None) Canvas Canvas;
local(None) float X;
local(None) float Y;
local(None) float fFOV;
local(None) int iCompassSrc;
local(None) int iCompassStart;
local(None) float fDegrees;
local(None) float Width;
if ( !ShouldDrawCompass() )
{
return;
}
if ( _tLeft == None )
{
Canvas.SetPos(100.00,100.00);
Canvas.DrawText("UIHUDCompass::Draw NO TEXTURE");
return;
}
Canvas.Style=6;
if ( cFrame != None )
{
Canvas.DrawColor=cFrame.cHUD.HUDColor;
}
X=Canvas.ClipX / 2 - 512 * cFrame.fScaleX / 2;
Y=16.00;
Canvas.SetPos(X,Y);
fFOV=Pawn(cFrame.cActor).Controller.FovAngle;
iCompassSrc=fFOV * 1024 * 2 / 360;
fDegrees=cFrame.cActor.Rotation.Yaw * 360.00 / 65535.00;
iCompassStart=fDegrees * 1024 * 2 / 360;
iCompassStart -= iCompassSrc / 2;
iCompassStart=iCompassStart % 2 * 1024;
JL01CC:
if ( iCompassStart < 0 )
{
iCompassStart += 2 * 1024;
goto JL01CC;
}
if ( iCompassStart <= 1024 )
{
if ( 1024 > iCompassSrc + iCompassStart )
{
Canvas.DrawTile(_tLeft,512.00 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart,0.00,iCompassSrc,_tLeft.VSize);
} else {
Width=(1024.00 - iCompassStart) / iCompassSrc;
Canvas.DrawTile(_tLeft,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart,0.00,_tLeft.USize - iCompassStart,_tLeft.VSize);
Canvas.SetPos(X + Width * 512 * cFrame.fScaleX,Y);
Width=1.00 - Width;
Canvas.DrawTile(_tRight,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,0.00,0.00,iCompassSrc - _tRight.USize - iCompassStart,_tRight.VSize);
}
} else {
if ( 1024 * 2 > iCompassSrc + iCompassStart )
{
Canvas.DrawTile(_tRight,512.00 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart - 1024,0.00,iCompassSrc,_tRight.VSize);
} else {
Width=(2.00 * 1024 - iCompassStart) / iCompassSrc;
Canvas.DrawTile(_tRight,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart - 1024,0.00,_tRight.USize - iCompassStart - 1024,_tRight.VSize);
Canvas.SetPos(X + Width * 512 * cFrame.fScaleX,Y);
Width=1.00 - Width;
Canvas.DrawTile(_tLeft,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,0.00,0.00,iCompassSrc - 2 * 1024 - iCompassStart,_tRight.VSize);
}
}
X=Canvas.ClipX / 2 - 512 * cFrame.fScaleX / 2;
Y=16.00;
Canvas.SetPos(X,Y);
Canvas.DrawTile(_BracketTexture,512.00 * cFrame.fScaleX,32.00 * cFrame.fScaleY,0.00,0.00,_BracketTexture.USize,_BracketTexture.VSize);
return;
}
function DrawLocation ()
{
local(None) Canvas Canvas;
local(None) Texture tobj;
local(None) float X;
local(None) float Y;
local(None) float XL;
local(None) float YL;
local(None) float Xi;
local(None) float Yi;
local(None) PlayerReplicationInfo myPRI;
local(None) string LocString;
local(None) Volume C;
local(None) BaseObjective obj;
if ( (Pawn(cFrame.cActor) != None) && (Pawn(cFrame.cActor).PlayerReplicationInfo != None) )
{
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
}
if ( (myPRI == None) || myPRI.isDead() )
{
return;
}
X=786.00 * cFrame.fScaleX;
Y=82.00 * cFrame.fScaleY;
C=myPRI.GetCommVolume();
if ( C != None )
{
obj=BaseObjective(myPRI.GetNearbyObjective(C));
}
if ( obj != None )
{
tobj=_tObjectiveSymbols[obj.GetHUDPosition()];
Xi=16.00 * cFrame.fScaleX;
Yi=16.00 * cFrame.fScaleY;
Canvas.SetPos(X - Xi,Y);
Canvas.DrawTile(tobj,Xi,Yi,0.00,0.00,tobj.USize,tobj.VSize);
Xi *= 1.50;
}
LocString=myPRI.GetLocationName(C);
Canvas.TextSize(LocString,XL,YL);
Canvas.SetPos(X - XL - Xi,Y);
Canvas.DrawTextClipped(LocString);
return;
}
function DrawObjectives ()
{
local(None) Canvas Canvas;
local(None) bool ReturnValue;
local(None) int ctr;
local(None) UIControl Current;
local(None) UIHUDCompassPoint currentpoint;
local(None) bool retval;
retval=False;
ctr=0;
JL000F:
if ( ctr < 8 )
{
Current=_Objectives[ctr];
JL002C:
if ( Current != None )
{
currentpoint=UIHUDCompassPoint(Current);
if ( currentpoint.IsA('UIHUDCompassPointObj') )
{
DrawCompassPoint(currentpoint,Canvas);
retval=True;
} else {
if ( (currentpoint != None) && currentpoint.IsOnCompass(Pawn(cFrame.cActor).Controller) )
{
DrawCompassPoint(currentpoint,Canvas);
}
}
Current=Current.cNextControl;
goto JL002C;
}
ctr++;
goto JL000F;
}
return retval;
return;
}
function ScaleControl ()
{
local(None) Canvas Canvas;
Super.ScaleControl(Canvas);
ScaledObjectiveTextX=786 * cFrame.fScaleX;
ScaledObjectiveTextY=112 * cFrame.fScaleY;
return;
}
function DrawObjectiveList ()
{
local(None) Canvas Canvas;
local(None) float X;
local(None) float Y;
local(None) float XL;
local(None) float YL;
local(None) int ctr;
local(None) UIControl Current;
local(None) UIHUDCompassPointObj currentobj;
local(None) string ObjString;
X=ScaledObjectiveTextX;
Y=ScaledObjectiveTextY;
Canvas.SetPos(X,Y);
if ( _bIsSettingTarget )
{
Canvas.TextSize("SET SQUAD TARGET:",XL,YL);
Canvas.SetPos(X - XL,Y);
Canvas.DrawTextClipped("SET SQUAD TARGET:");
} else {
Canvas.TextSize("OBJECTIVES",XL,YL);
Canvas.SetPos(X - XL,Y);
Canvas.DrawTextClipped("OBJECTIVES");
}
Y += YL * 0.50;
ctr=0;
JL011B:
if ( ctr < 8 )
{
Current=_Objectives[ctr];
JL0138:
if ( Current != None )
{
currentobj=UIHUDCompassPointObj(Current);
if ( currentobj != None )
{
ObjString=currentobj.GetString();
}
if ( (currentobj == None) || !currentobj.IsEnabled() || (ObjString == "") )
{
Current=Current.cNextControl;
} else {
Canvas.TextSize(ObjString,XL,YL);
Y += YL;
Canvas.SetPos(X - XL,Y);
Canvas.DrawTextClipped(ObjString);
Current=Current.cNextControl;
}
goto JL0138;
}
ctr++;
goto JL011B;
}
return;
}
function DrawCompassPoint ()
{
local(None) UIHUDCompassPoint currentpoint;
local(None) Canvas Canvas;
local(None) float ptdegrees;
local(None) float fDegrees;
local(None) Material ptTexture;
local(None) float X;
local(None) float Y;
local(None) float XL;
local(None) float YL;
local(None) byte FT;
local(None) PlayerReplicationInfo myPRI;
if ( !_InitializedObjectives )
{
InitializeObjectives();
}
fDegrees=cFrame.cActor.Rotation.Yaw * 360.00 / 65535.00;
if ( (currentpoint == None) || !currentpoint.IsOnCompass(Pawn(cFrame.cActor).Controller) )
{
return;
}
if ( currentpoint.IsA('UIHUDCompassPointObj') && cFrame.cHUD.bHideCompassObjPoints )
{
return;
}
ptTexture=currentpoint.GetTexture();
ptdegrees=currentpoint.GetRotation(cFrame.cActor);
ptdegrees=ptdegrees - fDegrees;
if ( ptdegrees > 180.00 )
{
ptdegrees=ptdegrees - 360.00;
} else {
if ( ptdegrees < -180.00 )
{
ptdegrees=ptdegrees + 360.00;
}
}
X=ptdegrees / Pawn(cFrame.cActor).Controller.FovAngle / 2.00 * 512 * cFrame.fScaleX / 2.00;
if ( X < -512 * cFrame.fScaleX / 2.00 )
{
X= -512 * cFrame.fScaleX / 2.00;
}
if ( X > 512 * cFrame.fScaleX / 2.00 )
{
X=512.00 * cFrame.fScaleX / 2.00;
}
X += Canvas.ClipX / 2.00;
XL=16.00 * cFrame.fScaleX;
X -= XL / 2.00;
X -= XL * 0.50 / 2.00;
Y=16.00 + 32 * cFrame.fScaleY + 5;
Canvas.SetPos(X,Y);
Canvas.DrawTile(ptTexture,XL,16.00 * cFrame.fScaleY,0.00,0.00,ptTexture.MaterialUSize(),ptTexture.MaterialVSize());
FT=currentpoint.getFT();
if ( FT != 255 )
{
Canvas.SetPos(X + 16 * cFrame.fScaleX / 4,Y + (16 + 2) * cFrame.fScaleY);
Canvas.DrawTile(_tFT[FT],XL / 2,16.00 * cFrame.fScaleY / 2,0.00,0.00,_tFT[FT].USize,_tFT[FT].VSize);
}
Canvas.SetPos(X + XL,Y);
YL=currentpoint.CompareHeight(cFrame.cActor);
if ( YL < -132 )
{
ptTexture=_tObjectiveDown;
} else {
if ( YL > 132 )
{
ptTexture=_tObjectiveUp;
} else {
ptTexture=_tObjectiveLevel;
}
}
Canvas.DrawTile(ptTexture,XL * 0.50,16.00 * cFrame.fScaleY,0.00,0.00,ptTexture.MaterialUSize(),ptTexture.MaterialVSize());
if ( (Pawn(cFrame.cActor) != None) && (Pawn(cFrame.cActor).PlayerReplicationInfo != None) )
{
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
if ( (myPRI.Team != None) && currentpoint.IsA('UIHUDCompassPointObj') && UIHUDCompassPointObj(currentpoint).IsSquadTarget(myPRI.Team.TeamIndex) )
{
Canvas.SetPos(X,Y + (16 + 2) * cFrame.fScaleY);
ptTexture=currentpoint.GetTexture();
Canvas.DrawTile(ptTexture,XL,2.00,2.00,2.00,4.00,4.00);
}
}
return;
}
function DrawPlayer ()
{
local(None) Canvas Canvas;
local(None) PlayerReplicationInfo Player;
local(None) Material Icon;
if ( Icon == None )
{
return;
} else {
if ( Icon == _tTeamBleed )
{
Canvas.SetDrawColor(255,0,0,Canvas.DrawColor.A);
}
}
_TeamPoint.setVector(Player.GetPawnLocation());
_TeamPoint.SetTexture(Icon);
_TeamPoint.setFT(Player.FT);
DrawCompassPoint(_TeamPoint,Canvas);
Canvas.DrawColor=cFrame.cHUD.HUDColor;
return;
}
function GetPlayerIcon ()
{
local(None) PlayerReplicationInfo myPRI;
local(None) PlayerReplicationInfo otherPRI;
local(None) Material ReturnValue;
if ( (otherPRI == None) || otherPRI.isDead() || (myPRI == otherPRI) )
{
return None;
}
if ( myPRI.bIsMedic )
{
if ( otherPRI.bCallForMedic )
{
return _tTeamBleed;
}
}
if ( otherPRI.bIsMedic )
{
if ( myPRI.bCallForMedic || (myPRI.FT == otherPRI.FT) )
{
return _tTeamMedic;
}
}
if ( otherPRI.IsSquadLeader() && !otherPRI.bGuerrillaPS && !otherPRI.bSpecialForcesPS )
{
return _tTeamSSG;
} else {
if ( otherPRI.IsSquadLeader() && otherPRI.bSpecialForcesPS && otherPRI.bQualifiedSF )
{
return _tTeamSFCapt;
} else {
if ( otherPRI.IsSquadLeader() && otherPRI.bVIPPS )
{
return _tTeamIFVIP;
} else {
return None;
}
}
}
if ( myPRI.IsSquadLeader() )
{
if ( otherPRI.isTeamLeader() && !otherPRI.bSpecialForcesPS && !otherPRI.bGuerrillaPS )
{
return _tTeamSGT;
} else {
if ( otherPRI.isTeamLeader() && otherPRI.bSpecialForcesPS && otherPRI.bQualifiedSF )
{
return _tTeamSSG1st;
} else {
return None;
}
}
} else {
if ( myPRI.isTeamLeader() )
{
if ( (otherPRI.FT == myPRI.FT) && !otherPRI.bSpecialForcesPS && !otherPRI.bGuerrillaPS )
{
return _tTeamPVT;
} else {
if ( (otherPRI.FT == myPRI.FT) && otherPRI.bSpecialForcesPS && otherPRI.bQualifiedSF )
{
return _tTeamSSG;
} else {
if ( (otherPRI.FT == myPRI.FT) && otherPRI.bGuerrillaPS )
{
return _tTeamIF;
}
}
}
} else {
if ( (otherPRI.FT == myPRI.FT) && otherPRI.isTeamLeader() )
{
return _tTeamSGT;
}
}
}
return None;
return;
}
function DrawTeam ()
{
local(None) Canvas Canvas;
local(None) PlayerReplicationInfo myPRI;
local(None) PlayerReplicationInfo otherPRI;
local(None) int i;
if ( _TeamPoint == None )
{
_TeamPoint=new (None,Class'UIHUDCompassPointV');
}
if ( (Pawn(cFrame.cActor) != None) && (Pawn(cFrame.cActor).PlayerReplicationInfo != None) )
{
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
}
if ( (myPRI == None) || (myPRI.Team == None) )
{
return;
}
i=0;
JL00A3:
if ( i < myPRI.Team.Size )
{
otherPRI=myPRI.Team.GetFromList(i);
DrawPlayer(Canvas,otherPRI,GetPlayerIcon(myPRI,otherPRI));
i++;
goto JL00A3;
}
return;
}
function SetTexture ()
{
local(None) Texture pleft;
return;
}
function SetBracketTexture ()
{
local(None) Texture Tex;
_BracketTexture=Tex;
return;
}
function ShouldDrawCompass ()
{
local(None) bool ReturnValue;
local(None) Weapon wpn;
if ( cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_SittingAtDesk') || cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_SittingAtDesk2') || cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_TakingExam') || cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_TakingExam2') )
{
return False;
}
if ( Pawn(cFrame.cActor) == None )
{
return False;
}
wpn=Pawn(cFrame.cActor).Weapon;
if ( wpn == None )
{
return True;
}
return !wpn.IsZoomed();
return;
}
function ShouldDrawLocation ()
{
local(None) bool ReturnValue;
return False;
return;
}
function ShouldDrawObjectiveList ()
{
local(None) bool ReturnValue;
return cFrame.cHUD.bShowObjectives && !cFrame.cHUD.bShowScores;
return;
}
function GetLastControl ()
{
local(None) UIControl ReturnValue;
local(None) UIControl Control;
Control=_ElementList;
JL000B:
if ( Control != None )
{
if ( Control.cNextControl == None )
{
return Control;
}
Control=Control.cNextControl;
goto JL000B;
}
return Control;
return;
}
function AddControlToTail ()
{
local(None) UIControl Control;
local(None) UIControl lastcontrol;
lastcontrol=GetLastControl();
if ( lastcontrol == None )
{
_ElementList=Control;
} else {
lastcontrol.cNextControl=Control;
}
return;
}
function GetControl ()
{
local(None) int Id;
local(None) UIControl ReturnValue;
local(None) UIControl Control;
Control=_ElementList;
JL000B:
if ( Control != None )
{
if ( Control.GetID() == Id )
{
return Control;
}
Control=Control.cNextControl;
goto JL000B;
}
return None;
return;
}
function EnableControl ()
{
local(None) int Id;
local(None) bool State;
local(None) bool ReturnValue;
local(None) UIControl Control;
Control=GetControl(Id);
if ( Control == None )
{
return False;
} else {
Control.SetEnabled(State);
return True;
}
return;
}
defaultproperties
{
_tLeft=Texture'T_AA2_UI.HUD.hud_nav_compass_01'
_tRight=Texture'T_AA2_UI.HUD.hud_nav_compass_02'
_tObjectiveSymbols(0)=Texture'T_AA2_UI.HUD.ui_hud_obj_A'
_tObjectiveSymbols(1)=Texture'T_AA2_UI.HUD.ui_hud_obj_B'
_tObjectiveSymbols(2)=Texture'T_AA2_UI.HUD.ui_hud_obj_C'
_tObjectiveSymbols(3)=Texture'T_AA2_UI.HUD.ui_hud_obj_D'
_tObjectiveSymbols(4)=Texture'T_AA2_UI.HUD.ui_hud_obj_E'
_tObjectiveSymbols(5)=Texture'T_AA2_UI.HUD.ui_hud_obj_F'
_tObjectiveSymbols(6)=Texture'T_AA2_UI.HUD.ui_hud_obj_G'
_tObjectiveSymbols(7)=Texture'T_AA2_UI.HUD.ui_hud_obj_H'
_sObjectiveSymbols(0)="A"
_sObjectiveSymbols(1)="B"
_sObjectiveSymbols(2)="C"
_sObjectiveSymbols(3)="D"
_sObjectiveSymbols(4)="E"
_sObjectiveSymbols(5)="F"
_sObjectiveSymbols(6)="G"
_sObjectiveSymbols(7)="H"
_tObjectiveUp=Texture'T_AA2_UI.HUD.ui_hud_obj_up'
_tObjectiveDown=Texture'T_AA2_UI.HUD.ui_hud_obj_down'
_tObjectiveLevel=Texture'T_AA2_UI.HUD.ui_hud_obj_level'
_tTeamSSG=Texture'T_AA2_UI.HUD.hud_rank_ssg'
_tTeamSGT=Texture'T_AA2_UI.HUD.hud_rank_sgt'
_tTeamPVT=Texture'T_AA2_UI.HUD.hud_rank_pvt'
_tTeamMedic=Texture'T_AA2_UI.HUD.ui_hud_medic'
_tTeamBleed=FinalBlend'T_AA2_UI.HUD.ui_hud_bleeding_fb'
_tFT(0)=Texture'T_AA2_UI.HUD.hud_fireteam_a'
_tFT(1)=Texture'T_AA2_UI.HUD.hud_fireteam_b'
_tFT(2)=Texture'T_AA2_UI.HUD.hud_fireteam_c'
_tFT(3)=Texture'T_AA2_UI.HUD.hud_fireteam_d'
_tTeamIFVIP=Texture'T_AA2_UI.HUD.hud_rank_VIP'
_tTeamSFCapt=Texture'T_AA2_UI.HUD.hud_rank_captain'
_tTeamSSG1st=Texture'T_AA2_UI.HUD.hud_rank_staffsgt_1st'
_tTeamIF=Texture'T_AA2_UI.HUD.hud_rank_indigenous'
}
//================================================================================
// UIHUD_Radar.
//================================================================================
class UIHUD_Radar extends UIControl;
var(None) Material _tGrid;
var(None) Range GridRange;
var(None) float CurrentRange;
var(None) Position GridUV;
var(None) array<UIHUD_RadarDot> RadarDotPool;
var(None) PlayerReplicationInfo myPRI;
var(None) bool bFrontUp;
var(None) bool bMap;
var(None) int MapSize;
var(None) bool bInitialized;
function Initialize ()
{
local(None) string map_name;
local(None) Material NewMap;
map_name="T_AA2_UI.Map.Map_" $ cFrame.cActor.Level.sLevelName;
NewMap=Material(DynamicLoadObject(map_name,Class'Texture'));
if ( NewMap != None )
{
_tGrid=NewMap;
}
bInitialized=True;
return;
}
function ShouldDrawRadar ()
{
local(None) bool ReturnValue;
local(None) Weapon wpn;
if ( Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_SittingAtDesk') || Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_SittingAtDesk2') || Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_TakingExam') || Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_TakingExam2') )
{
return False;
}
if ( Pawn(cFrame.cActor) == None )
{
return False;
}
wpn=Pawn(cFrame.cActor).Weapon;
if ( wpn == None )
{
return True;
}
return !wpn.IsZoomed();
return;
}
function Draw ()
{
local(None) Canvas C;
local(None) GameReplicationInfo GRI;
local(None) PlayerController PC;
if ( !bInitialized )
{
Initialize();
}
PC=cFrame.cHUD.PlayerOwner;
GRI=PC.GameReplicationInfo;
if ( ShouldDrawRadar() )
{
if ( !GRI.bHUDHideRadar && !PC.bHUDHideRadar )
{
UpdateRadarDots();
DrawRadarGrid(C);
}
}
return;
}
function DrawRadarGrid ()
{
local(None) Canvas C;
C.SetPos(_ScaledPos.X,_ScaledPos.Y);
C.SetDrawColor(255,255,255,C.DrawColor.A);
C.DrawTile(_tGrid,_ScaledPos.W,_ScaledPos.H,GridUV.X,GridUV.Y,GridUV.W,GridUV.H);
C.DrawColor=cFrame.cHUD.HUDColor;
return;
}
function UpdateRadarDots ()
{
local(None) TeamInfo MyTeam;
local(None) int i;
local(None) int draw_num;
local(None) float max_distance_s;
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
MyTeam=myPRI.Team;
if ( MyTeam != None )
{
i=0;
JL0048:
if ( i < MyTeam.Size )
{
if ( ShouldDraw(MyTeam.TeamList[i]) )
{
UpdateRadarDot(MyTeam.TeamList[i],draw_num);
max_distance_s=FMax(max_distance_s,RadarDotPool[draw_num].GetDistanceSquared());
draw_num++;
}
i++;
goto JL0048;
}
} else {
UpdateRadarDot(myPRI,draw_num);
draw_num++;
}
UpdateCurrentRange(Sqrt(max_distance_s));
i=draw_num;
JL0101:
if ( i < RadarDotPool )
{
RadarDotPool[i].bVisible=False;
i++;
goto JL0101;
}
return;
}
function CreateNewRadarDot ()
{
local(None) UIHUD_RadarDot NewRadarDot;
cScreen.AddHUDBaseDisplay("AGP_UI.UIHUD_RadarDot",-1,_Pos,1);
NewRadarDot=UIHUD_RadarDot(cScreen.GetLastControl());
NewRadarDot.SetMyRadar(self);
NewRadarDot.ScaleControl(None);
RadarDotPool[RadarDotPool]=NewRadarDot;
return;
}
function UpdateRadarDot ()
{
local(None) PlayerReplicationInfo PRI;
local(None) int draw_number;
local(None) UIHUD_RadarDot RadarDot;
local(None) Vector MyLoc;
local(None) Vector DotLoc;
local(None) Vector RelLoc;
local(None) Rotator R;
JL0000:
if ( RadarDotPool <= draw_number )
{
CreateNewRadarDot();
goto JL0000;
}
RadarDot=RadarDotPool[draw_number];
RadarDot.bVisible=True;
MyLoc=myPRI.GetPawnLocation();
DotLoc=PRI.GetPawnLocation();
RelLoc=MyLoc - DotLoc;
if ( bFrontUp )
{
R.Yaw=myPRI.GetMyPawn().Rotation.Yaw;
RelLoc=RelLoc << R;
}
RadarDot.SetRadarDotXY(RelLoc.X,RelLoc.Y);
return;
}
function ShouldDraw ()
{
local(None) PlayerReplicationInfo PRI;
local(None) bool ReturnValue;
if ( PRI.isDead() )
{
return False;
} else {
return True;
}
return;
}
function UpdateCurrentRange ()
{
local(None) float max_distance;
local(None) float NewRange;
NewRange=FClamp(max_distance * 1.50,GridRange.Min,GridRange.Max);
if ( (NewRange != CurrentRange) || bMap )
{
SetCurrentRange(NewRange);
}
return;
}
function SetCurrentRange ()
{
local(None) float NewRange;
local(None) float ratio;
local(None) float u_max;
local(None) float v_max;
local(None) Vector CenterLoc;
local(None) float U;
local(None) float V;
local(None) float X;
local(None) float Y;
local(None) float X1;
local(None) float X2;
local(None) float Y1;
local(None) float Y2;
CurrentRange=NewRange;
u_max=_tGrid.MaterialUSize();
v_max=_tGrid.MaterialVSize();
if ( bMap )
{
CenterLoc=myPRI.GetMyPawn().Location;
X=CenterLoc.Y;
Y= -CenterLoc.X;
X += MapSize / 2;
Y += MapSize / 2;
X1=X - CurrentRange;
Y1=Y - CurrentRange;
X2=X + CurrentRange;
Y2=Y + CurrentRange;
GridUV.X=u_max * X1 / MapSize;
GridUV.Y=v_max * Y1 / MapSize;
GridUV.W=u_max * (X2 - X1) / MapSize;
GridUV.H=v_max * (Y2 - Y1) / MapSize;
} else {
ratio=1.00 - CurrentRange / GridRange.Max;
U=ratio * u_max / 2;
V=ratio * v_max / 2;
GridUV.X=U;
GridUV.Y=V;
GridUV.W=u_max - U - U;
GridUV.H=v_max - V - V;
}
return;
}
defaultproperties
{
GridRange=(Min=0.00, Max=1.60231035868848196E34)
bMap=True
MapSize=32768
}
//================================================================================
// UIHUD_RadarDot.
//================================================================================
class UIHUD_RadarDot extends UIControl;
var(None) bool bVisible;
var(None) Material _tPlayerDot;
var(None) float X;
var(None) float Y;
var(None) float dot_size;
var(None) Position PlayerXY;
var(None) UIHUD_Radar MyRadar;
function SetMyRadar ()
{
local(None) UIHUD_Radar NewRadar;
MyRadar=NewRadar;
return;
}
function Draw ()
{
local(None) Canvas C;
if ( bVisible )
{
UpdatePlayerDot();
DrawPlayerDot(C);
}
return;
}
function DrawPlayerDot ()
{
local(None) Canvas C;
C.SetPos(PlayerXY.X,PlayerXY.Y);
C.DrawTile(_tPlayerDot,PlayerXY.W,PlayerXY.H,0.00,0.00,_tPlayerDot.MaterialUSize(),_tPlayerDot.MaterialVSize());
return;
}
function UpdatePlayerDot ()
{
local(None) float draw_x;
local(None) float draw_y;
local(None) float draw_size;
local(None) float screen_x;
local(None) float screen_y;
local(None) float Size;
local(None) float size_squared;
local(None) float Range;
Range=MyRadar.CurrentRange;
draw_size=dot_size * (1 - Range / MyRadar.GridRange.Max);
draw_size=FMax(draw_size,8.00);
size_squared=GetDistanceSquared();
if ( size_squared > Range * Range )
{
Size=Sqrt(size_squared);
draw_x=X / Size * Range;
draw_y=Y / Size * Range;
draw_size *= 1.50;
} else {
draw_x=X;
draw_y=Y;
}
screen_x=( -draw_y / Range + 1.00) / 2;
screen_y=(draw_x / Range + 1.00) / 2;
PlayerXY.W=draw_size;
PlayerXY.H=draw_size;
PlayerXY.X=_ScaledPos.X + _ScaledPos.W * screen_x - draw_size / 2;
PlayerXY.Y=_ScaledPos.Y + _ScaledPos.H * screen_y - draw_size / 2;
return;
}
function SetRadarDotXY ()
{
local(None) float new_x;
local(None) float new_y;
X=new_x;
Y=new_y;
return;
}
function GetDistanceSquared ()
{
local(None) float ReturnValue;
return X * X + Y * Y;
return;
}
defaultproperties
{
_tPlayerDot=Texture'T_AA2_UI.HUD.hud_group_army'
dot_size=32.00
}