Ru/Personal Game Logo: Difference between revisions
(Created page with " Category:Tutorials:ru Category:Programming:ru") |
m (obsolete language category) |
||
(28 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Multiple issues| | |||
{{Underlinked|date=January 2024}} | |||
{{Orphan|date=January 2024}} | |||
}} | |||
[[ | =Вступление= | ||
[[ | В случае если вы используете 2007 версию SDK, в которой в главном меню игры нет Логотипа, этот туториал как раз то что доктор прописал.<br/> | ||
Его также можно использовать для того чтобы написать дополнительный логотип, например вашей команды разработчиков {{L|Adding_Your_Logo_to_the_Menu|Смотреть здесь}}.<br/> | |||
Наш логотип будет аналогичен коду от VALVe в 2009 версии движка, только он не читает запись из файла gameinfo.txt | |||
=Начнем= | |||
Откроем клиент игры. Я создал новый фильтр в Visual Studio 2010, в фильтре Source Files и располагал файлы там.<br/> | |||
Вы можете поступить как угодно.<br/> | |||
Напишем файл интерфейса для логотипа '''igamelogo.h'''<br/> | |||
<source lang=cpp> | |||
/* | |||
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; | |||
</source> | |||
Создадим файл '''GameLogo.h'''<br/> | |||
<source lang=cpp> | |||
/* | |||
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; | |||
</source> | |||
<br/><br/> | |||
Далее создадим файл '''GameLogo.cpp'''<br/> | |||
<source lang=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"); | |||
</source> | |||
<br/><br/> | |||
Далее открываем файл '''vgui_int.cpp'''<br> | |||
Подключим наш файл интерфейса<br/> | |||
<source lang=cpp> | |||
#include "igamelogo.h" | |||
</source> | |||
<br/><br/> | |||
Найдем функцию '''void VGui_CreateGlobalPanels( void )''', допишем в ее конец создание нашей функции<br> | |||
<source lang=cpp> | |||
// Если использовать как родительскую панель PANEL_GAMEUIDLL | |||
// То логотип будет автоматически скрываться при запуске карты | |||
VPANEL GameUiDll = enginevgui->GetPanel( PANEL_GAMEUIDLL); | |||
gamelogo->Create( GameUiDll ); | |||
</source> | |||
<br/><br/> | |||
Затем в конец функции '''void VGui_Shutdown()''' допишем уничтожение нашего логотипа<br/> | |||
<source lang=cpp> | |||
gamelogo->Destroy(); | |||
</source> | |||
Запускаем мод. Не пугайтесь если ничего не отобразилось<br/> | |||
Нужно в '''GameLogo.res''' написать вот что<br/> | |||
<source> | |||
"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" | |||
} | |||
} | |||
</source> | |||
<br/> | |||
Заменяем '''../game/refresh''' на путь к своему логотипу | |||
=Результаты= | |||
Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)<br/> | |||
[[File:Pgl_5.JPG|800px|thumb|center|Главное меню]] | |||
[[File:Pgl_6.JPG|800px|thumb|center|Меню во время игры]] | |||
<br/><br/><br/><br> | |||
* Автор: LestaD | |||
* Игра: Refresh | |||
{{ACategory|Tutorials}} | |||
{{ACategory|Programming}} |
Latest revision as of 03:56, 22 August 2024





January 2024

Вы можете помочь,

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