Ru/Personal Game Logo
January 2024
You can help by adding links to this article from other relevant articles.
January 2024
Вступление
В случае если вы используете 2007 версию SDK, в которой в главном меню игры нет Логотипа, этот туториал как раз то что доктор прописал.
Его также можно использовать для того чтобы написать дополнительный логотип, например вашей команды разработчиков Смотреть здесь .
Наш логотип будет аналогичен коду от VALVe в 2009 версии движка, только он не читает запись из файла gameinfo.txt
Начнем
Откроем клиент игры. Я создал новый фильтр в Visual Studio 2010, в фильтре Source Files и располагал файлы там.
Вы можете поступить как угодно.
Напишем файл интерфейса для логотипа igamelogo.h
/*
Copyright © 2010-2012, Refresh Team
Interface of gamelogo panel
*/
#ifdef _WIN32
#pragma once
#endif
#include <vgui/VGUI.h>
namespace vgui {
class Panel;
typedef unsigned long HFont;
}
abstract_class IGameLogo
{
public:
virtual void Create( vgui::VPANEL parent ) = 0;
virtual void Destroy( void ) = 0;
};
extern IGameLogo *gamelogo;
Создадим файл GameLogo.h
/*
Copyright © 2010-2012, Refresh Team
Load a game logo to menu
*/
#ifdef _WIN32
#pragma once
#endif
#include "vgui_controls/Frame.h"
#include "igamelogo.h"
class CGameLogoPanel : vgui::Frame
{
DECLARE_CLASS_SIMPLE( CGameLogoPanel, vgui::Frame );
public:
CGameLogoPanel( vgui::VPANEL parent, char const *panelName );
~CGameLogoPanel();
void SetParent(Panel *newParent);
void SetParent(vgui::VPANEL panel);
};
class CGameLogo : public IGameLogo
{
private:
CGameLogoPanel *gamelogopanel;
public:
CGameLogo( void )
{
gamelogopanel = NULL;
}
void Create( vgui::VPANEL parent )
{
gamelogopanel = new CGameLogoPanel( parent, "GameLogo" );
}
void Destroy ( void )
{
if ( gamelogopanel )
{
gamelogopanel->SetParent( (vgui::Panel *)NULL );
delete gamelogopanel;
}
}
};
static CGameLogo g_GameLogo;
IGameLogo *gamelogo = ( IGameLogo * )&g_GameLogo;
Далее создадим файл GameLogo.cpp
/*
Copyright © 2010-2012, Refresh Team
Base class for creating a logo
*/
#include "cbase.h"
#include "GameLogo.h"
#include "tier0/memdbgon.h"
using namespace vgui;
CGameLogoPanel::CGameLogoPanel( vgui::VPANEL parent, char const *panelName ) : BaseClass( NULL, panelName ) // Конструктор
{
SetParent( parent );
SetMoveable( false );
SetSizeable( false );
SetTitleBarVisible( false );
SetKeyBoardInputEnabled( false );
SetMouseInputEnabled( false );
SetPaintBackgroundEnabled( false );
SetPaintBorderEnabled( false );
SetProportional( true );
SetMenuButtonVisible( false );
SetMinimizeButtonVisible( false );
SetMaximizeButtonVisible( false );
SetCloseButtonVisible( false );
SetScheme( vgui::scheme()->LoadSchemeFromFile("resource/SourceScheme.res", "SourceScheme") );
LoadControlSettings( "resource/GameLogo.res" );
SetVisible( true );
}
void CGameLogoPanel::SetParent(vgui::VPANEL panel)
{
BaseClass::SetParent(panel);
}
void CGameLogoPanel::SetParent(Panel *newParent)
{
BaseClass::SetParent(newParent);
}
CGameLogoPanel::~CGameLogoPanel() // Деструктор
{
}
// Это функция вызываемая при вводе команды в консоль
void gamelogo_CC()
{
DevMsg("Debug mode for gamelogo hud is disabled\n");
}
// Определение консольной команды при выполнении которой будет включаться/выключаться режим отладки
ConCommand cl_gamelogo_build_mode("cl_gamelogo_build_mode", gamelogo_CC, "Change build mode to gamelogo");
Далее открываем файл vgui_int.cpp
Подключим наш файл интерфейса
#include "igamelogo.h"
Найдем функцию void VGui_CreateGlobalPanels( void ), допишем в ее конец создание нашей функции
// Если использовать как родительскую панель PANEL_GAMEUIDLL
// То логотип будет автоматически скрываться при запуске карты
VPANEL GameUiDll = enginevgui->GetPanel( PANEL_GAMEUIDLL);
gamelogo->Create( GameUiDll );
Затем в конец функции void VGui_Shutdown() допишем уничтожение нашего логотипа
gamelogo->Destroy();
Запускаем мод. Не пугайтесь если ничего не отобразилось
Нужно в GameLogo.res написать вот что
"resource/GameLogo.res"
{
"GameLogo"
{
"ControlName" "CGameLogo"
"fieldName" "GameLogo"
"xpos" "62"
"ypos" "0"
"wide" "255"
"tall" "255"
"autoResize" "0"
"pinCorner" "0"
"visible" "1"
"enabled" "1"
"tabPosition" "0"
"settitlebarvisible" "1"
"title" "#Frame_Untitled"
}
"ImageRefresh"
{
"ControlName" "ImagePanel"
"fieldName" "ImageRefresh"
"xpos" "0"
"ypos" "0"
"wide" "255"
"tall" "255"
"autoResize" "0"
"pinCorner" "0"
"visible" "1"
"enabled" "1"
"tabPosition" "0"
"image" "../game/refresh"
"scaleImage" "0"
"scaleAmount" "0.000000"
"tileImage" "0"
"tileHorizontally" "0"
"tileVertically" "0"
}
}
Заменяем ../game/refresh на путь к своему логотипу
Результаты
Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)
- Автор: LestaD
- Игра: Refresh