Fixed a crashing issue

Optimized a few things
Changed the perk stars to show prestige
This commit is contained in:
ForrestMarkX 2020-01-13 08:46:44 -06:00
parent 3df4b04058
commit fce1abbe09
2 changed files with 84 additions and 71 deletions

View File

@ -207,9 +207,7 @@ struct XPEarnedS
var Texture2D Icon; var Texture2D Icon;
var Color IconColor; var Color IconColor;
}; };
const XPEARNED_COUNT = 32; var array<XPEarnedS> XPPopups;
var XPEarnedS XPPopups[XPEARNED_COUNT];
var int NextXPPopupIndex;
var float XPFadeOutTime; var float XPFadeOutTime;
struct DoshEarnedS struct DoshEarnedS
@ -218,9 +216,7 @@ struct DoshEarnedS
var bool bInit; var bool bInit;
var int Dosh; var int Dosh;
}; };
const DOSHEARNED_COUNT = 32; var array<DoshEarnedS> DoshPopups;
var DoshEarnedS DoshPopups[XPEARNED_COUNT];
var int NextDoshPopupIndex;
var float DoshFadeOutTime; var float DoshFadeOutTime;
var array<KFPawn_Human> PawnList; var array<KFPawn_Human> PawnList;
@ -436,7 +432,9 @@ function PostRender()
} }
GUIStyle.Canvas = Canvas; GUIStyle.Canvas = Canvas;
GUIStyle.PickDefaultFontSize(Canvas.ClipY); GUIStyle.PickDefaultFontSize(Canvas.ClipY);
GUIController.HandleDrawMenu();
if( !GUIController.bIsInMenuState )
GUIController.HandleDrawMenu();
ScaledBorderSize = FMax(GUIStyle.ScreenScale(HUDBorderSize), 1.f); ScaledBorderSize = FMax(GUIStyle.ScreenScale(HUDBorderSize), 1.f);
@ -1087,10 +1085,10 @@ function DrawHUDBox
function RenderKFHUD(KFPawn_Human KFPH) function RenderKFHUD(KFPawn_Human KFPH)
{ {
local float scale_w, scale_w2, FontScalar, OriginalFontScalar, XL, YL, ObjYL, BoxXL, BoxYL, BoxSW, BoxSH, DoshXL, DoshYL, PerkXL, PerkYL, StarXL, StarYL, ObjectiveH, SecondaryXL, SecondaryYL; local float scale_w, scale_w2, FontScalar, OriginalFontScalar, XL, YL, ObjYL, BoxXL, BoxYL, BoxSW, BoxSH, DoshXL, DoshYL, PerkXL, PerkYL, StarXL, StarYL, ObjectiveH, SecondaryXL, SecondaryYL, PerkLevelXL, PerkLevelYL, PerkIconY;
local float PerkProgressSize, PerkProgressX, PerkProgressY; local float PerkProgressSize, PerkProgressX, PerkProgressY;
local byte PerkLevel; local byte PerkLevel;
local int i, XPos, YPos, DrawCircleSize, FlashlightCharge, AmmoCount, MagCount, StarCount, CurrentScore, Index, ObjectiveSize, ObjectivePadding, ObjX, ObjY, bStatusWarning, bStatusNotification, PrestigeLevel; local int i, XPos, YPos, DrawCircleSize, FlashlightCharge, AmmoCount, MagCount, CurrentScore, Index, ObjectiveSize, ObjectivePadding, ObjX, ObjY, bStatusWarning, bStatusNotification, PrestigeLevel;
local string CircleText, SubCircleText, WeaponName, TraderDistanceText, ObjectiveTitle, ObjectiveDesc, ObjectiveProgress, ObjectiveReward, ObjectiveStatusMessage; local string CircleText, SubCircleText, WeaponName, TraderDistanceText, ObjectiveTitle, ObjectiveDesc, ObjectiveProgress, ObjectiveReward, ObjectiveStatusMessage;
local bool bSingleFire, bHasSecondaryAmmo; local bool bSingleFire, bHasSecondaryAmmo;
local Texture2D PerkIcon; local Texture2D PerkIcon;
@ -1100,7 +1098,7 @@ function RenderKFHUD(KFPawn_Human KFPH)
local KFTraderTrigger T; local KFTraderTrigger T;
local KFGFxObject_TraderItems TraderItems; local KFGFxObject_TraderItems TraderItems;
local FontRenderInfo FRI; local FontRenderInfo FRI;
local Color HealthFontColor; local Color HealthFontColor, PerkStarColor;
local HUDBoxRenderInfo HBRI; local HUDBoxRenderInfo HBRI;
local KFInterface_MapObjective MapObjective; local KFInterface_MapObjective MapObjective;
@ -1259,13 +1257,12 @@ function RenderKFHUD(KFPawn_Human KFPH)
Canvas.DrawColor = FontColor; Canvas.DrawColor = FontColor;
GUIStyle.DrawTextShadow(PlayerScore, DoshXL + (DoshXL * 0.035), DoshYL + (scale_w / 2) - (YL / 2), 1, FontScalar); GUIStyle.DrawTextShadow(PlayerScore, DoshXL + (DoshXL * 0.035), DoshYL + (scale_w / 2) - (YL / 2), 1, FontScalar);
DrawDoshEarned((DoshXL + (DoshXL * 0.035)) + ((scale_w-XL) / 2), DoshYL); if( DoshPopups.Length > 0 )
DrawDoshEarned((DoshXL + (DoshXL * 0.035)) + ((scale_w-XL) / 2), DoshYL);
// Draw Perk Info // Draw Perk Info
if( MyKFPRI.CurrentPerkClass != None ) if( MyKFPRI.CurrentPerkClass != None )
{ {
FontScalar = OriginalFontScalar + GUIStyle.ScreenScale(0.15);
PrestigeLevel = MyKFPRI.GetActivePerkPrestigeLevel(); PrestigeLevel = MyKFPRI.GetActivePerkPrestigeLevel();
PerkLevel = MyKFPRI.GetActivePerkLevel(); PerkLevel = MyKFPRI.GetActivePerkLevel();
PerkIcon = MyKFPRI.CurrentPerkClass.default.PerkIcon; PerkIcon = MyKFPRI.CurrentPerkClass.default.PerkIcon;
@ -1274,71 +1271,76 @@ function RenderKFHUD(KFPawn_Human KFPH)
PerkXL = SizeX - (SizeX - 12); PerkXL = SizeX - (SizeX - 12);
PerkYL = SizeY * 0.8625; PerkYL = SizeY * 0.8625;
Canvas.TextSize(PerkLevel@MyKFPRI.CurrentPerkClass.default.PerkName, XL, YL, OriginalFontScalar, OriginalFontScalar);
PerkLevelXL = PerkXL + scale_w + (ScaledBorderSize*2);
PerkLevelYL = PerkYL + (scale_w - YL) + (ScaledBorderSize*2);
PerkIconY = PerkYL;
Canvas.DrawColor = FontColor;
GUIStyle.DrawTextShadow(PerkLevel@MyKFPRI.CurrentPerkClass.default.PerkName, PerkLevelXL, PerkLevelYL, 1, OriginalFontScalar);
if( PrestigeLevel > 0 ) if( PrestigeLevel > 0 )
{ {
Canvas.DrawColor = PlayerBarShadowColor; Canvas.DrawColor = PlayerBarShadowColor;
Canvas.SetPos(PerkXL+1, PerkYL+1); Canvas.SetPos(PerkXL+1, PerkIconY+1);
Canvas.DrawTile(MyKFPRI.CurrentPerkClass.default.PrestigeIcons[PrestigeLevel - 1], scale_w, scale_w, 0, 3, 256, 256); Canvas.DrawTile(MyKFPRI.CurrentPerkClass.default.PrestigeIcons[PrestigeLevel - 1], scale_w, scale_w, 0, 3, 256, 256);
Canvas.DrawColor = WhiteColor; Canvas.DrawColor = WhiteColor;
Canvas.SetPos(PerkXL, PerkYL); Canvas.SetPos(PerkXL, PerkIconY);
Canvas.DrawTile(MyKFPRI.CurrentPerkClass.default.PrestigeIcons[PrestigeLevel - 1], scale_w, scale_w, 0, 3, 256, 256); Canvas.DrawTile(MyKFPRI.CurrentPerkClass.default.PrestigeIcons[PrestigeLevel - 1], scale_w, scale_w, 0, 3, 256, 256);
} }
if (PrestigeLevel > 0) if (PrestigeLevel > 0)
{ {
Canvas.DrawColor = WhiteColor; Canvas.DrawColor = WhiteColor;
Canvas.SetPos(PerkXL + ((scale_w/2) - ((scale_w*PrestigeIconScale)/2)), PerkYL + ((scale_w/2) - ((scale_w*PrestigeIconScale)/2)) - 4); Canvas.SetPos(PerkXL + ((scale_w/2) - ((scale_w*PrestigeIconScale)/2)), PerkIconY + ((scale_w/2) - ((scale_w*PrestigeIconScale)/2)) - 4);
Canvas.DrawRect(scale_w*PrestigeIconScale, scale_w*PrestigeIconScale, PerkIcon); Canvas.DrawRect(scale_w*PrestigeIconScale, scale_w*PrestigeIconScale, PerkIcon);
} }
else else
{ {
Canvas.DrawColor = PlayerBarShadowColor; Canvas.DrawColor = PlayerBarShadowColor;
Canvas.SetPos(PerkXL+1, PerkYL+1); Canvas.SetPos(PerkXL+1, PerkIconY+1);
Canvas.DrawRect(scale_w, scale_w, PerkIcon); Canvas.DrawRect(scale_w, scale_w, PerkIcon);
Canvas.DrawColor = WhiteColor; Canvas.DrawColor = WhiteColor;
Canvas.SetPos(PerkXL, PerkYL); Canvas.SetPos(PerkXL, PerkIconY);
Canvas.DrawRect(scale_w, scale_w, PerkIcon); Canvas.DrawRect(scale_w, scale_w, PerkIcon);
} }
//Perk Stars //Perk Stars
if( PerkLevel > 0 ) if( PrestigeLevel > 0 )
{ {
StarCount = 0;
PerkIconSize = GUIStyle.ScreenScale(default.PerkIconSize); PerkIconSize = GUIStyle.ScreenScale(default.PerkIconSize);
StarXL = PerkXL + scale_w; StarXL = PerkLevelXL + PerkIconSize;
StarYL = PerkLevelYL - PerkIconSize;
for ( i = 0; i < PerkLevel; i++ ) PerkStarColor = MakeColor(255, 200 * (PrestigeLevel/`MAX_PRESTIGE_LEVEL), 15, 255);
for ( i = 0; i < PrestigeLevel; i++ )
{ {
StarYL = (PerkYL + (scale_w - PerkIconSize)) - (StarCount * PerkIconSize);
Canvas.DrawColor = PlayerBarShadowColor; Canvas.DrawColor = PlayerBarShadowColor;
Canvas.SetPos(StarXL+1, StarYL+1); Canvas.SetPos(StarXL+1, StarYL+1);
Canvas.DrawRect(PerkIconSize, PerkIconSize, PerkStarIcon); Canvas.DrawRect(PerkIconSize, PerkIconSize, PerkStarIcon);
Canvas.DrawColor = WhiteColor; Canvas.DrawColor = PerkStarColor;
Canvas.SetPos(StarXL, StarYL); Canvas.SetPos(StarXL, StarYL);
Canvas.DrawRect(PerkIconSize, PerkIconSize, PerkStarIcon); Canvas.DrawRect(PerkIconSize, PerkIconSize, PerkStarIcon);
if( ++StarCount == MaxStarsPerRow ) StarXL += PerkIconSize;
{
StarCount = 0;
StarXL += PerkIconSize;
}
} }
} }
// Progress Bar // Progress Bar
PerkProgressSize = GUIStyle.ScreenScale(76); PerkProgressSize = GUIStyle.ScreenScale(76);
PerkProgressX = Canvas.ClipX * 0.007; PerkProgressX = Canvas.ClipX * 0.007;
PerkProgressY = PerkYL - (scale_w / 2); PerkProgressY = PerkIconY - (PerkProgressSize*0.125f) - ScaledBorderSize;
Canvas.DrawColor = WhiteColor; Canvas.DrawColor = WhiteColor;
bDisplayingProgress = true; bDisplayingProgress = true;
LevelProgressBar = KFPlayerOwner.GetPerkLevelProgressPercentage(KFPlayerOwner.CurrentPerk.Class) / 100.f; LevelProgressBar = KFPlayerOwner.GetPerkLevelProgressPercentage(KFPlayerOwner.CurrentPerk.Class) / 100.f;
DrawProgressBar(PerkProgressX,PerkProgressY-PerkProgressSize*0.12f,PerkProgressSize*2.f,PerkProgressSize*0.125f,VisualProgressBar); DrawProgressBar(PerkProgressX,PerkProgressY-PerkProgressSize*0.12f,PerkProgressSize*2.f,PerkProgressSize*0.125f,VisualProgressBar);
DrawXPEarned(PerkProgressX + (PerkProgressSize/2), PerkProgressY-(PerkProgressSize*0.125f)-(ScaledBorderSize*2)); if( XPPopups.Length > 0 )
DrawXPEarned(PerkProgressX + (PerkProgressSize/2), PerkProgressY-(PerkProgressSize*0.125f)-(ScaledBorderSize*2));
} }
} }
@ -3024,11 +3026,14 @@ function DrawXPEarned(float X, float Y)
Canvas.Font = GUIStyle.PickFont(Sc); Canvas.Font = GUIStyle.PickFont(Sc);
for( i=0; i<XPEARNED_COUNT; i++ ) for( i=0; i<XPPopups.Length; i++ )
{ {
EndTime = `RealTimeSince(XPPopups[i].StartTime); EndTime = `RealTimeSince(XPPopups[i].StartTime);
if( EndTime > XPFadeOutTime ) if( EndTime > XPFadeOutTime )
{
XPPopups.RemoveItem(XPPopups[i]);
continue; continue;
}
S = "+"$string(XPPopups[i].XP)@"XP"; S = "+"$string(XPPopups[i].XP)@"XP";
Canvas.TextSize(S,TextWidth,TextHeight,Sc,Sc); Canvas.TextSize(S,TextWidth,TextHeight,Sc,Sc);
@ -3081,11 +3086,14 @@ function DrawDoshEarned(float X, float Y)
Canvas.Font = GUIStyle.PickFont(Sc); Canvas.Font = GUIStyle.PickFont(Sc);
for( i=0; i<DOSHEARNED_COUNT; i++ ) for( i=0; i<DoshPopups.Length; i++ )
{ {
EndTime = `RealTimeSince(DoshPopups[i].StartTime); EndTime = `RealTimeSince(DoshPopups[i].StartTime);
if( EndTime > DoshFadeOutTime ) if( EndTime > DoshFadeOutTime )
{
DoshPopups.RemoveItem(DoshPopups[i]);
continue; continue;
}
S = (DoshPopups[i].Dosh > 0 ? "+" : "")$string(DoshPopups[i].Dosh); S = (DoshPopups[i].Dosh > 0 ? "+" : "")$string(DoshPopups[i].Dosh);
Canvas.TextSize(S,TextWidth,TextHeight,Sc,Sc); Canvas.TextSize(S,TextWidth,TextHeight,Sc,Sc);
@ -3126,28 +3134,30 @@ function DrawDoshEarned(float X, float Y)
function NotifyXPEarned( int XP, Texture2D Icon, Color IconColor ) function NotifyXPEarned( int XP, Texture2D Icon, Color IconColor )
{ {
XPPopups[NextXPPopupIndex].XP = XP; local XPEarnedS XPEarned;
XPPopups[NextXPPopupIndex].StartTime = WorldInfo.RealTimeSeconds;
XPPopups[NextXPPopupIndex].RandX = 2.f * FRand();
XPPopups[NextXPPopupIndex].RandY = 1.f + FRand();
XPPopups[NextXPPopupIndex].Icon = Icon;
XPPopups[NextXPPopupIndex].IconColor = IconColor;
XPPopups[NextXPPopupIndex].bInit = true;
if( ++NextXPPopupIndex >= XPEARNED_COUNT) XPEarned.XP = XP;
NextXPPopupIndex=0; XPEarned.StartTime = WorldInfo.RealTimeSeconds;
XPEarned.RandX = 2.f * FRand();
XPEarned.RandY = 1.f + FRand();
XPEarned.Icon = Icon;
XPEarned.IconColor = IconColor;
XPEarned.bInit = true;
XPPopups.AddItem(XPEarned);
} }
function NotifyDoshEarned( int Dosh ) function NotifyDoshEarned( int Dosh )
{ {
DoshPopups[NextDoshPopupIndex].Dosh = Dosh; local DoshEarnedS DoshEarned;
DoshPopups[NextDoshPopupIndex].StartTime = WorldInfo.RealTimeSeconds;
DoshPopups[NextDoshPopupIndex].RandX = 2.f * FRand(); DoshEarned.Dosh = Dosh;
DoshPopups[NextDoshPopupIndex].RandY = 1.f + FRand(); DoshEarned.StartTime = WorldInfo.RealTimeSeconds;
DoshPopups[NextDoshPopupIndex].bInit = true; DoshEarned.RandX = 2.f * FRand();
DoshEarned.RandY = 1.f + FRand();
DoshEarned.bInit = true;
if( ++NextDoshPopupIndex >= DOSHEARNED_COUNT) DoshPopups.AddItem(DoshEarned);
NextDoshPopupIndex=0;
} }
function DrawWeaponPickupInfo() function DrawWeaponPickupInfo()

View File

@ -241,7 +241,7 @@ simulated function HandleDrawMenu()
ClientViewport.ViewportConsole = HackConsole; ClientViewport.ViewportConsole = HackConsole;
// Make sure nothing overrides these settings while menu is being open. // Make sure nothing overrides these settings while menu is being open.
// PlayerOwner.PlayerInput = CustomInput; if( bIsInMenuState ) PlayerOwner.PlayerInput = CustomInput;
} }
} }
simulated function RenderMenu( Canvas C ) simulated function RenderMenu( Canvas C )
@ -249,37 +249,40 @@ simulated function RenderMenu( Canvas C )
local int i; local int i;
local float OrgX,OrgY,ClipX,ClipY; local float OrgX,OrgY,ClipX,ClipY;
if( !bFinishedReplication || KFPlayerController(PlayerOwner).MyGFxManager.bMenusActive ) if( !bFinishedReplication )
return; return;
ClientViewport.ViewportConsole = OrgConsole; ClientViewport.ViewportConsole = OrgConsole;
ScreenSize.X = C.SizeX;
ScreenSize.Y = C.SizeY;
CurrentStyle.Canvas = C;
CurrentStyle.PickDefaultFontSize(C.SizeY);
HUDOwner.Canvas = C;
HUDOwner.RenderKFHUD(KFPawn_Human(PlayerOwner.Pawn));
OrgX = C.OrgX; OrgX = C.OrgX;
OrgY = C.OrgY; OrgY = C.OrgY;
ClipX = C.ClipX; ClipX = C.ClipX;
ClipY = C.ClipY; ClipY = C.ClipY;
for( i=(HUDOwner.HUDWidgets.Length-1); i>=0; --i ) ScreenSize.X = C.SizeX;
ScreenSize.Y = C.SizeY;
CurrentStyle.Canvas = C;
CurrentStyle.PickDefaultFontSize(C.SizeY);
if( !KFPlayerController(PlayerOwner).MyGFxManager.bMenusActive )
{ {
HUDOwner.HUDWidgets[i].InputPos[0] = 0.f; HUDOwner.Canvas = C;
HUDOwner.HUDWidgets[i].InputPos[1] = 0.f; HUDOwner.RenderKFHUD(KFPawn_Human(PlayerOwner.Pawn));
HUDOwner.HUDWidgets[i].InputPos[2] = ScreenSize.X;
HUDOwner.HUDWidgets[i].InputPos[3] = ScreenSize.Y; for( i=(HUDOwner.HUDWidgets.Length-1); i>=0; --i )
HUDOwner.HUDWidgets[i].Canvas = C; {
HUDOwner.HUDWidgets[i].PreDraw(); HUDOwner.HUDWidgets[i].InputPos[0] = 0.f;
HUDOwner.HUDWidgets[i].InputPos[1] = 0.f;
HUDOwner.HUDWidgets[i].InputPos[2] = ScreenSize.X;
HUDOwner.HUDWidgets[i].InputPos[3] = ScreenSize.Y;
HUDOwner.HUDWidgets[i].Canvas = C;
HUDOwner.HUDWidgets[i].PreDraw();
}
C.SetOrigin(OrgX,OrgY);
C.SetClip(ClipX,ClipY);
} }
C.SetOrigin(OrgX,OrgY);
C.SetClip(ClipX,ClipY);
if( bIsInMenuState ) if( bIsInMenuState )
{ {
for( i=(ActiveMenus.Length-1); i>=0; --i ) for( i=(ActiveMenus.Length-1); i>=0; --i )