Ru/Personal Game Logo: Difference between revisions
No edit summary |
m (obsolete language category) |
||
| (12 intermediate revisions by 3 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 | SetVisible( true ); | ||
} | } | ||
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" | ||
| Line 234: | Line 228: | ||
<br/> | <br/> | ||
Заменяем '''../game/refresh''' на путь к своему логотипу | Заменяем '''../game/refresh''' на путь к своему логотипу | ||
=Результаты= | =Результаты= | ||
Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)<br/> | Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)<br/> | ||
[[File:Pgl_5.JPG| | [[File:Pgl_5.JPG|800px|thumb|center|Главное меню]] | ||
[[File:Pgl_6.JPG| | [[File:Pgl_6.JPG|800px|thumb|center|Меню во время игры]] | ||
<br/><br/><br/><br> | <br/><br/><br/><br> | ||
* Автор: LestaD | * Автор: LestaD | ||
* Игра: Refresh | * Игра: 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