mirror of
https://github.com/nillerusr/source-engine.git
synced 2025-06-08 08:18:13 +00:00
516 lines
20 KiB
C++
516 lines
20 KiB
C++
#include "cbase.h"
|
|
#include "MedalCollectionPanel.h"
|
|
#include "vgui_controls/ImagePanel.h"
|
|
#include "vgui_controls/Label.h"
|
|
#include <vgui_controls/ImagePanel.h>
|
|
#include "asw_medal_store.h"
|
|
#include "MedalPanel.h"
|
|
#include "BriefingTooltip.h"
|
|
#include "c_asw_player.h"
|
|
#include <vgui/ISurface.h>
|
|
#include <vgui_controls/Frame.h>
|
|
#include <vgui/ILocalize.h>
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include <tier0/memdbgon.h>
|
|
|
|
ConVar asw_medal_collection_sp("asw_medal_collection_sp", "1", FCVAR_ARCHIVE, "Whether the medal collection shows singleplayer or multiplayer");
|
|
|
|
MedalCollectionPanel::MedalCollectionPanel(vgui::Panel *parent, const char *name) :
|
|
vgui::Panel(parent, name)
|
|
{
|
|
m_iCursorOver = -1;
|
|
m_szNameString[0] = '\0';
|
|
m_szTotalString[0] = '\0';
|
|
SetMouseInputEnabled(true);
|
|
|
|
m_pTooltip = new BriefingTooltip(this, "MedalsTooltip");
|
|
m_pTooltip->SetTooltip(this, "INIT", "INIT", 0, 0); // have to do this, as the tooltip "jumps" for one frame when it's first drawn (this makes the jump happen while the briefing is fading in)
|
|
|
|
m_pPlayerArea = new vgui::Panel(this, "PlayerArea");
|
|
m_pNCOArea = new vgui::Panel(this, "NCOArea");
|
|
m_pSpecialWeaponsArea = new vgui::Panel(this, "SWArea");
|
|
m_pMedicArea = new vgui::Panel(this, "MedicArea");
|
|
m_pTechArea = new vgui::Panel(this, "TechArea");
|
|
m_pGenArea = new vgui::Panel(this, "TechArea");
|
|
|
|
m_pPlayerArea->SetMouseInputEnabled(false);
|
|
m_pNCOArea->SetMouseInputEnabled(false);
|
|
m_pSpecialWeaponsArea->SetMouseInputEnabled(false);
|
|
m_pMedicArea->SetMouseInputEnabled(false);
|
|
m_pTechArea->SetMouseInputEnabled(false);
|
|
m_pGenArea->SetMouseInputEnabled(false);
|
|
|
|
m_pTitle = new vgui::Label(this, "Title", "Medal Collection");
|
|
m_pTitle->SetContentAlignment(vgui::Label::a_north);
|
|
m_pCollectionLabel = new vgui::Label(this, "CollectionLabel", "#asw_commander_medals");
|
|
m_pCollectionLabel->SetContentAlignment(vgui::Label::a_northwest);
|
|
|
|
m_pNCOLabel = new vgui::Label(this, "CollectionLabel", "#asw_nco_medals");
|
|
m_pNCOLabel->SetContentAlignment(vgui::Label::a_northwest);
|
|
m_pSWLabel = new vgui::Label(this, "CollectionLabel", "#asw_sw_medals");
|
|
m_pSWLabel->SetContentAlignment(vgui::Label::a_northwest);
|
|
m_pMedicLabel = new vgui::Label(this, "CollectionLabel", "#asw_medic_medals");
|
|
m_pMedicLabel->SetContentAlignment(vgui::Label::a_northwest);
|
|
m_pTechLabel = new vgui::Label(this, "CollectionLabel", "#asw_tech_medals");
|
|
m_pTechLabel->SetContentAlignment(vgui::Label::a_northwest);
|
|
|
|
m_pTotalLabel = new vgui::Label(this, "TotalLabel", "");
|
|
m_pTotalLabel->SetContentAlignment(vgui::Label::a_southeast);
|
|
|
|
for (int i=0;i<ASW_MEDAL_COLLECTION_PORTRAITS;i++)
|
|
{
|
|
m_pPortrait[i] = new vgui::ImagePanel(this, "Portrait");
|
|
m_pPortrait[i]->SetShouldScaleImage(true);
|
|
m_pPortrait[i]->SetMouseInputEnabled(false);
|
|
}
|
|
m_pPortrait[0]->SetImage("swarm/PortraitsSmall/Sarge");
|
|
m_pPortrait[1]->SetImage("swarm/PortraitsSmall/Jaeger");
|
|
m_pPortrait[2]->SetImage("swarm/PortraitsSmall/Wildcat");
|
|
m_pPortrait[3]->SetImage("swarm/PortraitsSmall/Wolfe");
|
|
m_pPortrait[4]->SetImage("swarm/PortraitsSmall/Faith");
|
|
m_pPortrait[5]->SetImage("swarm/PortraitsSmall/Bastille");
|
|
m_pPortrait[6]->SetImage("swarm/PortraitsSmall/Crash");
|
|
m_pPortrait[7]->SetImage("swarm/PortraitsSmall/Flynn");
|
|
m_pPortrait[8]->SetImage("swarm/PortraitsSmall/Vegas");
|
|
|
|
m_pOnlineLabel = new vgui::Label(this, "onlinelabel", "");
|
|
m_pOnlineLabel->SetMouseInputEnabled(false);
|
|
m_pOnlineLabel->SetContentAlignment(vgui::Label::a_west);
|
|
m_pOnlineImage = new vgui::ImagePanel(this, "onlineimage");
|
|
m_pOnlineImage->SetShouldScaleImage(true);
|
|
m_pOnlineImage->SetMouseInputEnabled(false);
|
|
|
|
m_bOffline = (gpGlobals->maxClients <= 1);
|
|
if (m_bOffline)
|
|
{
|
|
m_pOnlineLabel->SetText("#asw_offline_medals");
|
|
m_pOnlineImage->SetImage("swarm/medals/offlinemedals");
|
|
}
|
|
else
|
|
{
|
|
m_pOnlineLabel->SetText("#asw_online_medals");
|
|
m_pOnlineImage->SetImage("swarm/medals/onlinemedals");
|
|
}
|
|
|
|
for (int i=0;i<ASW_MEDAL_COLLECTION_MEDALS;i++)
|
|
{
|
|
m_pMedals[i] = NULL;
|
|
}
|
|
|
|
// create medals
|
|
for (int i=1;i<LAST_MEDAL;i++)
|
|
{
|
|
m_pMedals[i] = new MedalPanel(this, "Medal", i, m_pTooltip);
|
|
m_pMedals[i]->SetMedalIndex(i, m_bOffline);
|
|
m_pMedals[i]->SetVisible(true);
|
|
m_pMedals[i]->SetAlpha(255);
|
|
}
|
|
|
|
m_pTooltip->MoveToFront();
|
|
|
|
m_fScale = 1.0f;
|
|
}
|
|
|
|
void MedalCollectionPanel::ApplySchemeSettings(vgui::IScheme *pScheme)
|
|
{
|
|
BaseClass::ApplySchemeSettings(pScheme);
|
|
|
|
//m_pTitle->SetFont(pScheme->GetFont("DefaultLarge", true));
|
|
m_pTitle->SetFgColor(Color(255,255,255,255));
|
|
m_pCollectionLabel->SetFgColor(Color(255,255,255,255));
|
|
m_pNCOLabel->SetFgColor(Color(255,255,255,255));
|
|
m_pSWLabel->SetFgColor(Color(255,255,255,255));
|
|
m_pMedicLabel->SetFgColor(Color(255,255,255,255));
|
|
m_pTechLabel->SetFgColor(Color(255,255,255,255));
|
|
m_pTotalLabel->SetFgColor(Color(255,255,255,255));
|
|
//m_pTotalLabel->SetFont(pScheme->GetFont("DefaultLarge", true));
|
|
m_pPlayerArea->SetPaintBackgroundEnabled(true);
|
|
m_pPlayerArea->SetBgColor(Color(33, 38, 49, 153));
|
|
m_pNCOArea->SetPaintBackgroundEnabled(true);
|
|
m_pNCOArea->SetBgColor(Color(33, 38, 49, 153));
|
|
m_pSpecialWeaponsArea->SetPaintBackgroundEnabled(true);
|
|
m_pSpecialWeaponsArea->SetBgColor(Color(33, 38, 49, 153));
|
|
m_pMedicArea->SetPaintBackgroundEnabled(true);
|
|
m_pMedicArea->SetBgColor(Color(33, 38, 49, 153));
|
|
m_pTechArea->SetPaintBackgroundEnabled(true);
|
|
m_pTechArea->SetBgColor(Color(33, 38, 49, 153));
|
|
m_pGenArea->SetPaintBackgroundEnabled(true);
|
|
m_pGenArea->SetBgColor(Color(33, 38, 49, 153));
|
|
//m_pOnlineLabel->SetFont(pScheme->GetFont("Default", true));
|
|
m_pOnlineLabel->SetFgColor(Color(255,255,255,255)); //Color(66, 142, 192, 255));
|
|
}
|
|
|
|
void MedalCollectionPanel::PerformLayout()
|
|
{
|
|
int sw, sh;
|
|
vgui::surface()->GetScreenSize( sw, sh );
|
|
int wide = GetWide();
|
|
int tall = GetTall();
|
|
m_fScale = tall / 768.0f;
|
|
//m_fScale *= 0.5f;
|
|
|
|
|
|
int border = 10 * m_fScale;
|
|
int top = 0 * m_fScale;
|
|
int portrait_gap = border; // 40 * m_fScale;
|
|
|
|
m_pTitle->SetBounds(border * 2, top - border*3, wide - (border * 4), 96 * m_fScale);
|
|
m_pPlayerArea->SetBounds(border, top, wide - border * 2, 96 * m_fScale);
|
|
m_pCollectionLabel->SetBounds(border * 2, top + border, wide * 0.6f, tall * 0.1f);
|
|
|
|
int portrait_width = 64 * m_fScale;
|
|
int portrait_height = portrait_width;
|
|
int medal_size = 56 * m_fScale;
|
|
//int portrait_area_total_wide = border * 11 + portrait_width * 9 + portrait_gap * 5;
|
|
int portrait_area_top = top + 96 * m_fScale + border * 2;
|
|
int label_height = border * 2.3f;
|
|
int portrait_area_h = border + portrait_height + border * 2 + medal_size + border + label_height;
|
|
//int two_portrait_area_width = border * 2 + portrait_gap + portrait_width * 2;
|
|
int two_portrait_area_width = (wide - border * 5) * 0.25f;
|
|
int nco_left = border; //(wide * 0.5f) - (portrait_area_total_wide * 0.5f);
|
|
m_pNCOLabel->SetBounds(nco_left + border, portrait_area_top + border, two_portrait_area_width - border * 2, label_height);
|
|
m_pNCOArea->SetBounds(nco_left, portrait_area_top, two_portrait_area_width, portrait_area_h);
|
|
|
|
int sw_left = nco_left + border + two_portrait_area_width;
|
|
m_pSWLabel->SetBounds(sw_left + border, portrait_area_top + border, two_portrait_area_width - border * 2, label_height);
|
|
m_pSpecialWeaponsArea->SetBounds(sw_left, portrait_area_top, two_portrait_area_width, portrait_area_h);
|
|
|
|
int medic_left = nco_left + border * 2 + two_portrait_area_width * 2;
|
|
m_pMedicLabel->SetBounds(medic_left + border, portrait_area_top + border, two_portrait_area_width - border * 2, label_height);
|
|
m_pMedicArea->SetBounds(medic_left, portrait_area_top, two_portrait_area_width, portrait_area_h);
|
|
|
|
int tech_left = nco_left + border * 3 + two_portrait_area_width * 3;
|
|
//int three_portrait_area_width = two_portrait_area_width + portrait_gap + portrait_width;
|
|
int three_portrait_area_width = (wide - border * 5) * 0.25f;
|
|
m_pTechLabel->SetBounds(tech_left + border, portrait_area_top + border, two_portrait_area_width - border * 2, label_height);
|
|
m_pTechArea->SetBounds(tech_left, portrait_area_top, three_portrait_area_width, portrait_area_h);
|
|
|
|
int bottom = tall * 0.85f;
|
|
int gen_top = (portrait_area_top + portrait_area_h + border * 2);
|
|
m_pGenArea->SetBounds(border, gen_top, wide - border * 2,
|
|
(bottom) - gen_top);
|
|
|
|
int total_left = 0.3f * wide;
|
|
int total_h = 64.0f * m_fScale;
|
|
int total_top = bottom - (total_h + border);
|
|
|
|
m_pTotalLabel->SetBounds(total_left, total_top, (wide - border*2) - total_left, total_h );
|
|
|
|
int online_h = 32*m_fScale;
|
|
int online_top = total_top + total_h - online_h;
|
|
m_pOnlineImage->SetBounds(border * 2, online_top, online_h, online_h);
|
|
m_pOnlineLabel->SetBounds(border * 2 + 36 * m_fScale, online_top, 180 * m_fScale, online_h);
|
|
|
|
for (int i=0;i<ASW_MEDAL_COLLECTION_PORTRAITS;i++)
|
|
{
|
|
m_pPortrait[i]->SetSize(portrait_width, portrait_height);
|
|
}
|
|
int portrait_y = portrait_area_top + border * 2 + label_height;
|
|
m_pPortrait[0]->SetPos(nco_left + border, portrait_y);
|
|
m_pPortrait[1]->SetPos(nco_left + border + portrait_width + portrait_gap, portrait_y);
|
|
m_pPortrait[2]->SetPos(sw_left + border, portrait_y);
|
|
m_pPortrait[3]->SetPos(sw_left + portrait_width + portrait_gap + border, portrait_y);
|
|
m_pPortrait[4]->SetPos(medic_left + border, portrait_y);
|
|
m_pPortrait[5]->SetPos(medic_left + portrait_width + portrait_gap + border, portrait_y);
|
|
m_pPortrait[6]->SetPos(tech_left + border, portrait_y);
|
|
m_pPortrait[7]->SetPos(tech_left + portrait_width + portrait_gap + border, portrait_y);
|
|
m_pPortrait[8]->SetPos(tech_left + portrait_width*2 + portrait_gap*2 + border, portrait_y);
|
|
|
|
int iSpacing = 20.0f * m_fScale;
|
|
// player medals
|
|
int mx = border * 2;
|
|
int my = (top + 96 * m_fScale) - (border + medal_size);
|
|
LayoutMedal(m_pMedals[MEDAL_IAF_TRAINING], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_IAF_COMBAT_HONORS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_IAF_BATTLE_HONORS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_IAF_CAMPAIGN_HONORS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_IAF_WARTIME_SERVICE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_PROFESSIONAL], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_NEMESIS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_RETRIBUTION], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_IAF_HERO], mx, my, iSpacing);
|
|
|
|
// nco medals
|
|
mx = nco_left + border;
|
|
my = portrait_y + portrait_height + border;
|
|
LayoutMedal(m_pMedals[MEDAL_IRON_HAMMER], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_INCENDIARY_DEFENCE], mx, my, iSpacing);
|
|
//LayoutMedal(m_pMedals[MEDAL_LAST_STAND], mx, my, iSpacing);
|
|
|
|
// sw medals
|
|
mx = sw_left + border;
|
|
my = portrait_y + portrait_height + border;
|
|
LayoutMedal(m_pMedals[MEDAL_IRON_SWORD], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SWARM_SUPPRESSION], mx, my, iSpacing);
|
|
|
|
// medic medals
|
|
mx = medic_left + border;
|
|
my = portrait_y + portrait_height + border;
|
|
LayoutMedal(m_pMedals[MEDAL_BLOOD_HALO], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SILVER_HALO], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_GOLDEN_HALO], mx, my, iSpacing);
|
|
|
|
// tech medals
|
|
mx = tech_left + border;
|
|
my = portrait_y + portrait_height + border;
|
|
LayoutMedal(m_pMedals[MEDAL_ELECTRICAL_SYSTEMS_EXPERT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_COMPUTER_SYSTEMS_EXPERT], mx, my, iSpacing);
|
|
|
|
// shared medals
|
|
mx = border * 2;
|
|
my = gen_top + border;
|
|
|
|
LayoutMedal(m_pMedals[MEDAL_BLOOD_HEART], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_FIREFIGHTER], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_LIFESAVER], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_ALL_SURVIVE_A_MISSION], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_RECKLESS_EXPLOSIVES_MERIT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_PEST_CONTROL], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_BUGSTOMPER], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SHIELDBUG_ASSASSIN], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_EXTERMINATOR], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_CLEAR_FIRING], mx, my, iSpacing);
|
|
//mx = border * 2; my += medal_size;
|
|
|
|
// weapon specific medals
|
|
LayoutMedal(m_pMedals[MEDAL_IRON_FIST], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_IRON_DAGGER], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_PYROMANIAC], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_HUNTER], mx, my, iSpacing);
|
|
//LayoutMedal(m_pMedals[MEDAL_HYBRID_WEAPONS_EXPERT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SMALL_ARMS_SPECIALIST], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_GUNFIGHTER], mx, my, iSpacing);
|
|
//mx = border * 2; my += medal_size;
|
|
|
|
// high quality shared medals
|
|
LayoutMedal(m_pMedals[MEDAL_PERFECT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SHARPSHOOTER], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_COLLATERAL_DAMAGE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_EXPLOSIVES_MERIT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_KILLING_SPREE], mx, my, iSpacing);
|
|
//mx = border * 2; my += medal_size;
|
|
|
|
// campaign completion medals
|
|
LayoutMedal(m_pMedals[MEDAL_EASY_CAMPAIGN], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_NORMAL_CAMPAIGN], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_HARD_CAMPAIGN], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_INSANE_CAMPAIGN], mx, my, iSpacing);
|
|
//mx = border * 2; my += medal_size;
|
|
|
|
// speed runs
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_LANDING_BAY], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_OUTSIDE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_PLANT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_OFFICE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_DESCENT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_SEWERS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_MINE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_SPEED_RUN_QUEEN_LAIR], mx, my, iSpacing);
|
|
//mx = border * 2; my += medal_size;
|
|
|
|
// outstanding execution
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_LANDING_BAY], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_OUTSIDE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_PLANT], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_OFFICE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_LABS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_SEWERS], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_MINE], mx, my, iSpacing);
|
|
LayoutMedal(m_pMedals[MEDAL_OUTSTANDING_EXECUTION_QUEEN_LAIR], mx, my, iSpacing);
|
|
}
|
|
|
|
void MedalCollectionPanel::OnThink()
|
|
{
|
|
UpdateMedals();
|
|
}
|
|
|
|
// sets the image and color of each medal depending on if we have it or not
|
|
void MedalCollectionPanel::UpdateMedals()
|
|
{
|
|
if (!GetMedalStore())
|
|
{
|
|
Msg("Error: Couldn't find medal store\n");
|
|
return;
|
|
}
|
|
// update medal colors
|
|
int iCollected = 0;
|
|
int iMarineCollected=0;
|
|
for (int i=1;i<ASW_MEDAL_COLLECTION_MEDALS;i++)
|
|
{
|
|
if (!m_pMedals[i] || !m_pMedals[i]->m_pMedalIcon)
|
|
continue;
|
|
bool bHasMedal = GetMedalStore()->HasMedal(m_pMedals[i]->m_iMedalIndex, m_bOffline, m_iCursorOver);
|
|
if (bHasMedal)
|
|
{
|
|
m_pMedals[i]->m_pMedalIcon->SetDrawColor(Color(255,255,255,255));
|
|
m_pMedals[i]->m_bShowTooltip = true;
|
|
iCollected++;
|
|
if (!GetMedalStore()->IsPlayerMedal(m_pMedals[i]->m_iMedalIndex))
|
|
iMarineCollected++;
|
|
}
|
|
else
|
|
{
|
|
if (m_iCursorOver != -1) // if we're showing a specific marine, check if another marine has the medal, to just grey it out a bit rather than make it completely black
|
|
bHasMedal = GetMedalStore()->HasMedal(m_pMedals[i]->m_iMedalIndex, m_bOffline, -1);
|
|
if (bHasMedal)
|
|
{
|
|
m_pMedals[i]->m_pMedalIcon->SetDrawColor(Color(64,64,64,255));
|
|
m_pMedals[i]->m_bShowTooltip = true;
|
|
}
|
|
else
|
|
{
|
|
// temp change to debug medals
|
|
m_pMedals[i]->m_pMedalIcon->SetDrawColor(Color(32,32,32,255));
|
|
m_pMedals[i]->m_bShowTooltip = true;
|
|
|
|
// m_pMedals[i]->m_pMedalIcon->SetDrawColor(Color(0,0,0,255));
|
|
//m_pMedals[i]->m_bShowTooltip = false;
|
|
}
|
|
}
|
|
}
|
|
// update our corner label
|
|
char buffer[128];
|
|
if (m_iCursorOver == -1)
|
|
{
|
|
Q_snprintf(buffer, sizeof(buffer), "%d / %d", iCollected, ASW_MEDAL_COLLECTION_MEDALS-1);
|
|
}
|
|
else
|
|
{
|
|
wchar_t *pName;
|
|
if (m_iCursorOver == 0) pName = g_pVGuiLocalize->Find("#asw_sarges_total");
|
|
else if (m_iCursorOver == 1) pName = g_pVGuiLocalize->Find("#asw_jaegers_total");
|
|
else if (m_iCursorOver == 2) pName = g_pVGuiLocalize->Find("#asw_wildcats_total");
|
|
else if (m_iCursorOver == 3) pName = g_pVGuiLocalize->Find("#asw_wolfes_total");
|
|
else if (m_iCursorOver == 4) pName = g_pVGuiLocalize->Find("#asw_faiths_total");
|
|
else if (m_iCursorOver == 5) pName = g_pVGuiLocalize->Find("#asw_bastilles_total");
|
|
else if (m_iCursorOver == 6) pName = g_pVGuiLocalize->Find("#asw_crashs_total");
|
|
else if (m_iCursorOver == 7) pName = g_pVGuiLocalize->Find("#asw_flynns_total");
|
|
else pName = g_pVGuiLocalize->Find("#asw_vegas_total");
|
|
|
|
// 43 or 44
|
|
int iMarineMax = ASW_MEDAL_COLLECTION_MEDALS - (9 + 8); // minus the 9 player medals and the other classes medals
|
|
if (m_iCursorOver >= 4 && m_iCursorOver <= 5)
|
|
iMarineMax++; // +1 for medics, since they get 3 medals
|
|
|
|
char number_buffer[12];
|
|
Q_snprintf(number_buffer, sizeof(number_buffer), "%d / %d", iMarineCollected, iMarineMax);
|
|
wchar_t wnumber_buffer[24];
|
|
g_pVGuiLocalize->ConvertANSIToUnicode(number_buffer, wnumber_buffer, sizeof( wnumber_buffer ));
|
|
|
|
wchar_t wbuffer[64];
|
|
g_pVGuiLocalize->ConstructString( wbuffer, sizeof(wbuffer),
|
|
g_pVGuiLocalize->Find("#asw_medal_collect_format"), 2,
|
|
pName, wnumber_buffer);
|
|
|
|
g_pVGuiLocalize->ConvertUnicodeToANSI( wbuffer, buffer, sizeof(buffer) );
|
|
}
|
|
if (Q_strcmp(buffer, m_szTotalString))
|
|
{
|
|
Q_strcpy(m_szTotalString, buffer);
|
|
m_pTotalLabel->SetText(buffer);
|
|
}
|
|
|
|
HACK_GETLOCALPLAYER_GUARD( "Would need to redo the medal system to associate medals with a particular player's profile, rather than just storing them locally" );
|
|
C_ASW_Player *pPlayer = C_ASW_Player::GetLocalASWPlayer();
|
|
if (pPlayer && Q_strcmp(pPlayer->GetPlayerName(), m_szNameString))
|
|
{
|
|
Q_strcpy(m_szNameString, pPlayer->GetPlayerName());
|
|
wchar_t wname_buffer[32];
|
|
g_pVGuiLocalize->ConvertANSIToUnicode(m_szNameString, wname_buffer, sizeof( wname_buffer ));
|
|
wchar_t wbuffer[64];
|
|
if (m_szNameString[Q_strlen(m_szNameString)-1] == 's' || m_szNameString[Q_strlen(m_szNameString)-1] == 'S')
|
|
{
|
|
g_pVGuiLocalize->ConstructString( wbuffer, sizeof(wbuffer),
|
|
g_pVGuiLocalize->Find("#asw_medal_player_collection_no_s"), 1, wname_buffer);
|
|
}
|
|
else
|
|
{
|
|
g_pVGuiLocalize->ConstructString( wbuffer, sizeof(wbuffer),
|
|
g_pVGuiLocalize->Find("#asw_medal_player_collection"), 1, wname_buffer);
|
|
}
|
|
m_pTitle->SetText(wbuffer);
|
|
vgui::Frame *pFrame = dynamic_cast<vgui::Frame*>(GetParent());
|
|
if (pFrame)
|
|
{
|
|
pFrame->SetTitle(wbuffer, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
// positions a medal and moves the medal cursor along, wrapping it down a line if it goes off the right hand side of the panel
|
|
void MedalCollectionPanel::LayoutMedal(MedalPanel* pMedal, int &mx, int &my, int iSpacing)
|
|
{
|
|
if (!pMedal)
|
|
return;
|
|
|
|
int medal_size = 56 * m_fScale;
|
|
int border = 10 * m_fScale;
|
|
pMedal->SetBounds(mx, my, medal_size, medal_size);
|
|
mx += medal_size + iSpacing;
|
|
if (mx > GetWide() - (border*2 + medal_size + iSpacing))
|
|
{
|
|
mx = border * 2;
|
|
my += medal_size + iSpacing;
|
|
}
|
|
}
|
|
|
|
void MedalCollectionPanel::OnMouseReleased(vgui::MouseCode code)
|
|
{
|
|
BaseClass::OnMouseReleased(code);
|
|
if ( code != MOUSE_LEFT )
|
|
return;
|
|
|
|
int iCursorOver = -1;
|
|
for (int i=0;i<ASW_MEDAL_COLLECTION_PORTRAITS;i++)
|
|
{
|
|
if (m_pPortrait[i]->IsCursorOver())
|
|
{
|
|
iCursorOver = i;
|
|
m_pPortrait[i]->SetDrawColor(Color(255,255,255,255));
|
|
}
|
|
else
|
|
{
|
|
m_pPortrait[i]->SetDrawColor(Color(64,64,64,255));
|
|
}
|
|
}
|
|
|
|
if (iCursorOver != m_iCursorOver)
|
|
{
|
|
m_iCursorOver = iCursorOver;
|
|
}
|
|
else
|
|
{
|
|
m_iCursorOver = -1;
|
|
}
|
|
|
|
if (m_iCursorOver == -1)
|
|
{
|
|
for (int i=0;i<ASW_MEDAL_COLLECTION_PORTRAITS;i++)
|
|
{
|
|
m_pPortrait[i]->SetDrawColor(Color(255,255,255,255));
|
|
}
|
|
}
|
|
|
|
if (m_pOnlineLabel->IsCursorOver() || m_pOnlineImage->IsCursorOver())
|
|
{
|
|
m_bOffline = !m_bOffline;
|
|
asw_medal_collection_sp.SetValue(m_bOffline ? 1 : 0);
|
|
if (m_bOffline)
|
|
{
|
|
m_pOnlineLabel->SetText("#asw_offline_medals");
|
|
m_pOnlineImage->SetImage("swarm/medals/offlinemedals");
|
|
}
|
|
else
|
|
{
|
|
m_pOnlineLabel->SetText("#asw_online_medals");
|
|
m_pOnlineImage->SetImage("swarm/medals/onlinemedals");
|
|
}
|
|
|
|
// update offline status of all our medal panels
|
|
for (int i=1;i<LAST_MEDAL;i++)
|
|
{
|
|
m_pMedals[i]->SetMedalIndex(i, m_bOffline);
|
|
}
|
|
}
|
|
} |