Skip to content

Commit

Permalink
make objective list on mission details screen color moddable
Browse files Browse the repository at this point in the history
  • Loading branch information
BenLubar committed Jun 23, 2024
1 parent 8a938d5 commit 3720650
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 105 deletions.
3 changes: 2 additions & 1 deletion reactivedrop/resource/swarmschemenew.res
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ Scheme
"DarkBlueTrans" "65 74 96 64"
"Blue" "83 148 192 255"
"HighlightBlue" "169 213 255 255"

"ObjectiveBackground" "30 66 89 164"

"TransparentBlack" "0 0 0 128"
"Black" "0 0 0 255"

Expand Down
185 changes: 92 additions & 93 deletions src/game/client/swarm/vgui/objectivetitlepanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,107 +15,106 @@
// memdbgon must be the last include file in a .cpp file!!!
#include <tier0/memdbgon.h>

ObjectiveTitlePanel::ObjectiveTitlePanel(Panel *parent, const char *name) : Panel(parent, name)
{
m_pListBox = dynamic_cast<ObjectiveListBox*>(parent);

ObjectiveTitlePanel::ObjectiveTitlePanel( Panel *parent, const char *name ) : Panel( parent, name )
{
m_pListBox = dynamic_cast< ObjectiveListBox * >( parent );

m_pCheckbox = new vgui::ImagePanel( this, "Checkbox" );
m_pCheckbox->SetShouldScaleImage( true );
m_pCheckbox->SetMouseInputEnabled( false );

// create a blank imagepanel for the objective pic
m_ObjectiveImagePanel = new vgui::ImagePanel(this, "ObjectiveTitlePanelImage");
m_ObjectiveImagePanel->SetImage("swarm/MissionPics/UnknownMissionPic");
m_ObjectiveImagePanel->SetShouldScaleImage(true);
m_ObjectiveImagePanel->SetMouseInputEnabled(false);
m_ObjectiveImagePanel = new vgui::ImagePanel( this, "ObjectiveTitlePanelImage" );
m_ObjectiveImagePanel->SetImage( "swarm/MissionPics/UnknownMissionPic" );
m_ObjectiveImagePanel->SetShouldScaleImage( true );
m_ObjectiveImagePanel->SetMouseInputEnabled( false );

// create the blank objective text - note, label isn't actually a child of this class!
wchar_t *text = L"<objectivetitle>";
m_ObjectiveLabel = new vgui::Label(this, "ObjectiveTitlePanelLabel", text);
m_ObjectiveLabel->SetContentAlignment(vgui::Label::a_northwest);
m_ObjectiveLabel->SetMouseInputEnabled(false);
m_ObjectiveLabel = new vgui::Label( this, "ObjectiveTitlePanelLabel", text );
m_ObjectiveLabel->SetContentAlignment( vgui::Label::a_northwest );
m_ObjectiveLabel->SetMouseInputEnabled( false );

m_bObjectiveSelected = false;
m_szImageName[0] = NULL;
m_szImageName[0] = NULL;
m_hFont = m_hSmallFont = vgui::INVALID_FONT;

}

ObjectiveTitlePanel::~ObjectiveTitlePanel()
{
if (GetControllerFocus())
GetControllerFocus()->RemoveFromFocusList(this);
if ( GetControllerFocus() )
GetControllerFocus()->RemoveFromFocusList( this );
}

// a single panel showing a marine
void ObjectiveTitlePanel::PerformLayout()
{
int height = ScreenHeight();
int iLineTall = vgui::surface()->GetFontTall(m_hFont);
int iPadding = 7.0f * (ScreenHeight() / 768.0f); // 10 pixels of padding
int height = ScreenHeight();
int iLineTall = vgui::surface()->GetFontTall( m_hFont );
int iPadding = 7.0f * ( ScreenHeight() / 768.0f ); // 10 pixels of padding

m_pCheckbox->SetBounds( YRES( 3 ), YRES( 3 ), YRES( 10 ), YRES( 10 ) );
m_pCheckbox->SetBounds( YRES( 3 ), YRES( 3 ), YRES( 10 ), YRES( 10 ) );

m_ObjectiveLabel->SetSize( YRES( 140 ), iLineTall);
m_ObjectiveLabel->SetPos( YRES( 15 ), iPadding);
m_ObjectiveLabel->SetSize( YRES( 140 ), iLineTall );
m_ObjectiveLabel->SetPos( YRES( 15 ), iPadding );
int image_high = height * 0.23;
int image_wide = image_high * (1.25f); // 4:3 ratio
int image_wide = image_high * ( 1.25f ); // 4:3 ratio
//if (image_wide > width * 0.23)
//image_wide = width * 0.23;
m_ObjectiveImagePanel->SetSize(image_wide, image_high);
m_ObjectiveImagePanel->SetPos( YRES( 80 ) - (image_wide * 0.5f), iLineTall + iPadding * 2);
m_ObjectiveImagePanel->SetSize( image_wide, image_high );
m_ObjectiveImagePanel->SetPos( YRES( 80 ) - ( image_wide * 0.5f ), iLineTall + iPadding * 2 );

int text_wide = 0;
int text_tall = 0;
wchar_t buffer[256];
m_ObjectiveLabel->GetText(buffer, sizeof(buffer));
vgui::surface()->GetTextSize(m_hFont, buffer, text_wide, text_tall);
m_ObjectiveLabel->GetText( buffer, sizeof( buffer ) );
vgui::surface()->GetTextSize( m_hFont, buffer, text_wide, text_tall );
//Msg("PL %d text_wide = %d label wide = %f\n", m_Index, text_wide, m_ObjectiveLabel->GetWide());
//if (text_wide > m_ObjectiveLabel->GetWide())
//m_ObjectiveLabel->SetFont(m_hSmallFont);
//else
m_ObjectiveLabel->SetFont(m_hFont);
m_ObjectiveLabel->SetText(buffer);
m_ObjectiveLabel->InvalidateLayout(true);
m_ObjectiveLabel->SetFont( m_hFont );
m_ObjectiveLabel->SetText( buffer );
m_ObjectiveLabel->InvalidateLayout( true );
}


// sets this roster entry to show the picture/name of the specified profile
void ObjectiveTitlePanel::SetObjective(C_ASW_Objective* pObjective)
void ObjectiveTitlePanel::SetObjective( C_ASW_Objective *pObjective )
{
C_ASW_Objective* pCur = m_hObjective.Get();
if (pCur != pObjective && pObjective)
C_ASW_Objective *pCur = m_hObjective.Get();
if ( pCur != pObjective && pObjective )
{
if (GetControllerFocus())
GetControllerFocus()->AddToFocusList(this, true, true);
if ( GetControllerFocus() )
GetControllerFocus()->AddToFocusList( this, true, true );
}
m_hObjective = pObjective;
m_hObjective = pObjective;
UpdateElements();
}

void ObjectiveTitlePanel::OnThink()
{
BaseClass::OnThink();

if (IsCursorOver() || m_bObjectiveSelected)
m_ObjectiveLabel->SetFgColor(Color(255,255,255,255));
if ( IsCursorOver() || m_bObjectiveSelected )
m_ObjectiveLabel->SetFgColor( Color( 255, 255, 255, 255 ) );
else
m_ObjectiveLabel->SetFgColor(m_BlueColor);
m_ObjectiveLabel->SetFgColor( m_BlueColor );

// check for setcting the text or image
if (m_hObjective.Get())
if ( m_hObjective.Get() )
{
UpdateElements();
UpdateElements();
}
}

void ObjectiveTitlePanel::UpdateElements()
{
if (!m_hObjective.Get())
if ( !m_hObjective.Get() )
return;
wchar_t buffer[256];
wchar_t buffer2[256];
const wchar_t* pTitle = buffer2;
const wchar_t *pTitle = buffer2;

if ( m_hObjective->IsObjectiveDummy() )
{
Expand All @@ -126,110 +125,110 @@ void ObjectiveTitlePanel::UpdateElements()
m_pCheckbox->SetVisible( true );
if ( m_hObjective->IsObjectiveComplete() )
{
m_pCheckbox->SetImage("swarm/HUD/TickBoxTicked");
m_pCheckbox->SetImage( "swarm/HUD/TickBoxTicked" );
}
else
{
m_pCheckbox->SetImage("swarm/HUD/TickBoxEmpty");
m_pCheckbox->SetImage( "swarm/HUD/TickBoxEmpty" );
}
}
m_ObjectiveLabel->GetText(buffer, 255);
if (m_hObjective->IsObjectiveDummy())
pTitle = m_hObjective->GetObjectiveTitle();
m_ObjectiveLabel->GetText( buffer, 255 );
if ( m_hObjective->IsObjectiveDummy() )
pTitle = m_hObjective->GetObjectiveTitle();
else
{
char buffer[8];
Q_snprintf(buffer, sizeof(buffer), "%d", m_Index);
Q_snprintf( buffer, sizeof( buffer ), "%d", m_Index );

wchar_t wnumber[8];
g_pVGuiLocalize->ConvertANSIToUnicode(buffer, wnumber, sizeof( wnumber ));
wchar_t*pLocal = g_pVGuiLocalize->Find("#asw_objective_titlef");
if (!pLocal)
g_pVGuiLocalize->ConvertANSIToUnicode( buffer, wnumber, sizeof( wnumber ) );

wchar_t *pLocal = g_pVGuiLocalize->Find( "#asw_objective_titlef" );
if ( !pLocal )
pLocal = L"";
g_pVGuiLocalize->ConstructString( buffer2, sizeof(buffer2),
g_pVGuiLocalize->ConstructString( buffer2, sizeof( buffer2 ),
pLocal, 1,
m_hObjective->GetObjectiveTitle());
m_hObjective->GetObjectiveTitle() );
}
if (Q_wcscmp(buffer, pTitle))
if ( Q_wcscmp( buffer, pTitle ) )
{
int text_wide = 0;
int text_tall = 0;
vgui::surface()->GetTextSize(m_hFont, pTitle, text_wide, text_tall);
vgui::surface()->GetTextSize( m_hFont, pTitle, text_wide, text_tall );
//Msg("%d text_wide = %d label wide = %f\n", m_Index, text_wide, m_ObjectiveLabel->GetWide());
//if (text_wide > m_ObjectiveLabel->GetWide())
//m_ObjectiveLabel->SetFont(m_hSmallFont);
//else
m_ObjectiveLabel->SetFont(m_hFont);
m_ObjectiveLabel->SetText(pTitle);
m_ObjectiveLabel->InvalidateLayout(true);
m_ObjectiveLabel->SetFont( m_hFont );
m_ObjectiveLabel->SetText( pTitle );
m_ObjectiveLabel->InvalidateLayout( true );
}
char sbuffer[256];
if (Q_strlen(m_hObjective->GetObjectiveImage())<1)
{
Q_snprintf(sbuffer, sizeof(sbuffer), "swarm/MissionPics/UnknownMissionPic");
if ( Q_strlen( m_hObjective->GetObjectiveImage() ) < 1 )
{
Q_snprintf( sbuffer, sizeof( sbuffer ), "swarm/MissionPics/UnknownMissionPic" );
}
else
{
Q_snprintf(sbuffer, sizeof(sbuffer), "swarm/ObjectivePics/%s", m_hObjective->GetObjectiveImage());
Q_snprintf( sbuffer, sizeof( sbuffer ), "swarm/ObjectivePics/%s", m_hObjective->GetObjectiveImage() );
}
if (Q_strcmp(sbuffer, m_szImageName))
if ( Q_strcmp( sbuffer, m_szImageName ) )
{
Q_snprintf(m_szImageName, sizeof(m_szImageName), "%s", sbuffer);
m_ObjectiveImagePanel->SetImage(m_szImageName);
Q_snprintf( m_szImageName, sizeof( m_szImageName ), "%s", sbuffer );
m_ObjectiveImagePanel->SetImage( m_szImageName );
}
}

void ObjectiveTitlePanel::OnMouseReleased(vgui::MouseCode code)
void ObjectiveTitlePanel::OnMouseReleased( vgui::MouseCode code )
{
//Msg("Clicked on %s\n", m_Profile->m_ShortName);
BaseClass::OnMouseReleased(code);
BaseClass::OnMouseReleased( code );

if ( code != MOUSE_LEFT )
return;
if (m_pListBox)
m_pListBox->ClickedTitle(this);

if ( m_pListBox )
m_pListBox->ClickedTitle( this );
}

void ObjectiveTitlePanel::OnCursorEntered()
{
BaseClass::OnCursorEntered();

// todo: highlight
}

void ObjectiveTitlePanel::ApplySchemeSettings(vgui::IScheme *pScheme)
void ObjectiveTitlePanel::ApplySchemeSettings( vgui::IScheme *pScheme )
{
BaseClass::ApplySchemeSettings(pScheme);
m_BlueColor = pScheme->GetColor("LightBlue", Color(66,142,192,255));
m_ObjectiveLabel->SetFgColor(m_BlueColor);
BaseClass::ApplySchemeSettings( pScheme );
m_BlueColor = pScheme->GetColor( "LightBlue", Color( 66, 142, 192, 255 ) );
m_ObjectiveLabel->SetFgColor( m_BlueColor );
m_hFont = pScheme->GetFont( "Default", IsProportional() );
m_hSmallFont = pScheme->GetFont( "DefaultSmall", IsProportional() );
m_ObjectiveLabel->SetFont(m_hFont); // temp was normal font
SetBgColor(Color(30,66,89,164));
m_ObjectiveLabel->SetFont( m_hFont ); // temp was normal font
SetBgColor( pScheme->GetColor( "ObjectiveBackground", Color( 30, 66, 89, 164 ) ) );

int iLineTall = vgui::surface()->GetFontTall(m_hFont);
int iPadding = 7.0f * (ScreenHeight() / 768.0f); // 10 pixels of padding
SetSize( YRES( 160 ), iLineTall + iPadding * 2);
int iLineTall = vgui::surface()->GetFontTall( m_hFont );
int iPadding = 7.0f * ( ScreenHeight() / 768.0f ); // 10 pixels of padding
SetSize( YRES( 160 ), iLineTall + iPadding * 2 );
}

void ObjectiveTitlePanel::SetSelected(bool bSelected)
void ObjectiveTitlePanel::SetSelected( bool bSelected )
{
m_bObjectiveSelected = bSelected;
float fDuration = 0.3f;
int iLineTall = vgui::surface()->GetFontTall(m_hFont);
int iPadding = 7.0f * (ScreenHeight() / 768.0f); // 10 pixels of padding
if (bSelected)
int iLineTall = vgui::surface()->GetFontTall( m_hFont );
int iPadding = 7.0f * ( ScreenHeight() / 768.0f ); // 10 pixels of padding
if ( bSelected )
{
int h = iLineTall + iPadding * 3 + ScreenHeight() * 0.23;
vgui::GetAnimationController()->RunAnimationCommand(this, "tall", h, 0, fDuration, vgui::AnimationController::INTERPOLATOR_LINEAR);
vgui::GetAnimationController()->RunAnimationCommand( this, "tall", h, 0, fDuration, vgui::AnimationController::INTERPOLATOR_LINEAR );

CLocalPlayerFilter filter;
C_BaseEntity::EmitSound( filter, -1 /*SOUND_FROM_LOCAL_PLAYER*/, "ASWInterface.ObjectiveSlide" );
C_BaseEntity::EmitSound( filter, -1 /*SOUND_FROM_LOCAL_PLAYER*/, "ASWInterface.ObjectiveSlide" );
}
else
{
vgui::GetAnimationController()->RunAnimationCommand(this, "tall", iLineTall + iPadding * 2, 0, fDuration, vgui::AnimationController::INTERPOLATOR_LINEAR);
}
}
{
vgui::GetAnimationController()->RunAnimationCommand( this, "tall", iLineTall + iPadding * 2, 0, fDuration, vgui::AnimationController::INTERPOLATOR_LINEAR );
}
}
22 changes: 11 additions & 11 deletions src/game/client/swarm/vgui/objectivetitlepanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,27 @@ class ObjectiveTitlePanel : public vgui::Panel
{
DECLARE_CLASS_SIMPLE( ObjectiveTitlePanel, vgui::Panel );
public:
ObjectiveTitlePanel(Panel *parent, const char *name);
ObjectiveTitlePanel( Panel *parent, const char *name );
virtual ~ObjectiveTitlePanel();

virtual void OnMouseReleased(vgui::MouseCode code);
virtual void OnMouseReleased( vgui::MouseCode code );
virtual void OnCursorEntered();

virtual void PerformLayout();

virtual void OnThink();
void UpdateElements();
virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );

void SetObjective(C_ASW_Objective* pObjective);
C_ASW_Objective* GetObjective() { return m_hObjective.Get(); }
void SetSelected(bool bSelected);
void SetObjective( C_ASW_Objective *pObjective );
C_ASW_Objective *GetObjective() { return m_hObjective.Get(); }
void SetSelected( bool bSelected );

vgui::Label* m_ObjectiveLabel;
vgui::ImagePanel* m_ObjectiveImagePanel;
vgui::ImagePanel* m_pCheckbox;
vgui::Label *m_ObjectiveLabel;
vgui::ImagePanel *m_ObjectiveImagePanel;
vgui::ImagePanel *m_pCheckbox;

void SetIndex(int i) { m_Index = i; }
void SetIndex( int i ) { m_Index = i; }
int m_Index;
vgui::HTexture m_TextureID;

Expand All @@ -55,7 +55,7 @@ class ObjectiveTitlePanel : public vgui::Panel
char m_szImageName[256];

vgui::HFont m_hFont, m_hSmallFont;
ObjectiveListBox* m_pListBox;
ObjectiveListBox *m_pListBox;
};

#endif // _INCLUDED_OBJECTIVE_TITLE_PANEL_H

0 comments on commit 3720650

Please sign in to comment.