Ru/Personal Game Logo: Difference between revisions
No edit summary |
m (obsolete language category) |
||
(21 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Multiple issues| | |||
{{Underlinked|date=January 2024}} | |||
{{Orphan|date=January 2024}} | |||
}} | |||
=Вступление= | =Вступление= | ||
В случае если вы используете 2007 версию SDK, в которой в главном меню игры нет Логотипа, этот туториал как раз то что доктор прописал.<br/> | В случае если вы используете 2007 версию SDK, в которой в главном меню игры нет Логотипа, этот туториал как раз то что доктор прописал.<br/> | ||
Его также можно использовать для того чтобы написать дополнительный логотип, например вашей команды разработчиков.<br/> | Его также можно использовать для того чтобы написать дополнительный логотип, например вашей команды разработчиков {{L|Adding_Your_Logo_to_the_Menu|Смотреть здесь}}.<br/> | ||
Наш логотип будет аналогичен коду от VALVe в 2009 версии движка, только он не читает запись из файла gameinfo.txt | Наш логотип будет аналогичен коду от VALVe в 2009 версии движка, только он не читает запись из файла gameinfo.txt | ||
=Начнем= | =Начнем= | ||
Откроем клиент игры. Я создал новый фильтр в Visual Studio 2010, в фильтре Source Files и располагал файлы там.<br/> | Откроем клиент игры. Я создал новый фильтр в Visual Studio 2010, в фильтре Source Files и располагал файлы там.<br/> | ||
Вы можете поступить как угодно.<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/> | Создадим файл '''GameLogo.h'''<br/> | ||
<source lang=cpp> | <source lang=cpp> | ||
Line 14: | Line 46: | ||
*/ | */ | ||
#ifdef _WIN32 | |||
#pragma once | |||
#endif | |||
#include "vgui_controls/Frame.h" | #include "vgui_controls/Frame.h" | ||
#include "igamelogo.h" | |||
class CGameLogoPanel : vgui::Frame | |||
class | |||
{ | { | ||
DECLARE_CLASS_SIMPLE( | DECLARE_CLASS_SIMPLE( CGameLogoPanel, vgui::Frame ); | ||
public: | public: | ||
CGameLogoPanel( vgui::VPANEL parent, char const *panelName ); | |||
~ | ~CGameLogoPanel(); | ||
void | void SetParent(Panel *newParent); | ||
void SetParent(vgui::VPANEL panel); | |||
}; | |||
class CGameLogo : public IGameLogo | |||
{ | |||
private: | 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> | </source> | ||
<br/><br/> | <br/><br/> | ||
Line 41: | Line 103: | ||
#include "cbase.h" | #include "cbase.h" | ||
#include "GameLogo.h" | #include "GameLogo.h" | ||
#include "tier0/memdbgon.h" | #include "tier0/memdbgon.h" | ||
using namespace vgui; | using namespace vgui; | ||
CGameLogoPanel::CGameLogoPanel( vgui::VPANEL parent, char const *panelName ) : BaseClass( NULL, panelName ) // Конструктор | |||
{ | { | ||
SetParent( parent ); | SetParent( parent ); | ||
SetMoveable( false ); | SetMoveable( false ); | ||
SetSizeable( false ); | SetSizeable( false ); | ||
SetTitleBarVisible( false ); | SetTitleBarVisible( false ); | ||
SetKeyBoardInputEnabled( false ); | SetKeyBoardInputEnabled( false ); | ||
SetMouseInputEnabled( false ); | SetMouseInputEnabled( false ); | ||
SetPaintBackgroundEnabled( false ); | SetPaintBackgroundEnabled( false ); | ||
SetPaintBorderEnabled( false ); | SetPaintBorderEnabled( false ); | ||
SetProportional( true ); | SetProportional( true ); | ||
SetMenuButtonVisible( false ); | SetMenuButtonVisible( false ); | ||
SetMinimizeButtonVisible( false ); | SetMinimizeButtonVisible( false ); | ||
SetMaximizeButtonVisible( false ); | SetMaximizeButtonVisible( false ); | ||
SetCloseButtonVisible( false ); | SetCloseButtonVisible( false ); | ||
SetScheme( vgui::scheme()->LoadSchemeFromFile("resource/SourceScheme.res", "SourceScheme") ); | SetScheme( vgui::scheme()->LoadSchemeFromFile("resource/SourceScheme.res", "SourceScheme") ); | ||
LoadControlSettings( "resource/GameLogo.res" ); | LoadControlSettings( "resource/GameLogo.res" ); | ||
SetVisible( true ); | SetVisible( true ); | ||
} | } | ||
void | void CGameLogoPanel::SetParent(vgui::VPANEL panel) | ||
{ | { | ||
BaseClass::SetParent(panel); | |||
} | } | ||
void CGameLogoPanel::SetParent(Panel *newParent) | |||
void | |||
{ | { | ||
BaseClass::SetParent(newParent); | |||
} | } | ||
CGameLogoPanel::~CGameLogoPanel() // Деструктор | |||
{ | { | ||
} | } | ||
Line 140: | Line 157: | ||
void gamelogo_CC() | void gamelogo_CC() | ||
{ | { | ||
DevMsg("Debug mode for gamelogo hud is disabled\n"); | |||
} | } | ||
Line 151: | Line 165: | ||
<br/><br/> | <br/><br/> | ||
Далее открываем файл '''vgui_int.cpp'''<br> | Далее открываем файл '''vgui_int.cpp'''<br> | ||
Подключим наш файл интерфейса<br/> | |||
<source lang=cpp> | <source lang=cpp> | ||
#include "igamelogo.h" | |||
</source> | </source> | ||
<br/><br/> | <br/><br/> | ||
Line 163: | Line 175: | ||
// То логотип будет автоматически скрываться при запуске карты | // То логотип будет автоматически скрываться при запуске карты | ||
VPANEL GameUiDll = enginevgui->GetPanel( PANEL_GAMEUIDLL); | VPANEL GameUiDll = enginevgui->GetPanel( PANEL_GAMEUIDLL); | ||
gamelogo->Create( GameUiDll ); | |||
</source> | </source> | ||
<br/><br/> | <br/><br/> | ||
Затем в конец функции '''void VGui_Shutdown()''' допишем уничтожение нашего логотипа<br/> | Затем в конец функции '''void VGui_Shutdown()''' допишем уничтожение нашего логотипа<br/> | ||
<source lang=cpp> | <source lang=cpp> | ||
gamelogo->Destroy(); | |||
</source> | </source> | ||
Запускаем мод. Не пугайтесь если ничего не отобразилось<br/> | |||
Нужно в '''GameLogo.res''' написать вот что<br/> | |||
<source> | <source> | ||
"resource/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" | |||
} | |||
} | } | ||
</source> | </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