Ru/Personal Game Logo: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m (obsolete language category)
 
(10 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<br/>
Наш логотип будет аналогичен коду от VALVe в 2009 версии движка, только он не читает запись из файла gameinfo.txt
<br/>
 
=Начнем=
=Начнем=
Откроем клиент игры. Я создал новый фильтр в 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 CGameLogo : vgui::Frame
{
{


DECLARE_CLASS_SIMPLE( CGameLogo, vgui::Frame );
DECLARE_CLASS_SIMPLE( CGameLogoPanel, vgui::Frame );


public:
public:
CGameLogo( vgui::VPANEL parent, char const *panelName );
CGameLogoPanel( vgui::VPANEL parent, char const *panelName );
~CGameLogo();
~CGameLogoPanel();
void toggleBuildMode(); // Переключение режима отладки логотипа
void SetParent(Panel *newParent);
void SetParent(vgui::VPANEL panel);
};


class CGameLogo : public IGameLogo
{
private:
private:
bool m_bBuildMode;
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; // Используем vgui для удобства
using namespace vgui;
 
static CGameLogo *g_pGameLogo = NULL; // Переменная в которой хранится созданный класс


CGameLogo::CGameLogo( vgui::VPANEL parent, char const *panelName ) : BaseClass( NULL, panelName ) // Конструктор
CGameLogoPanel::CGameLogoPanel( vgui::VPANEL parent, char const *panelName ) : BaseClass( NULL, panelName ) // Конструктор
{
{
g_pGameLogo = this; // Помещаем в переменную созданный класс
m_bBuildMode = false; // Выключаем режим отладки


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 CGameLogo::toggleBuildMode() // Переключение режима отладки панели
{
if ( m_bBuildMode ) // Если режим отладки включен
{
SetMoveable( false );
SetSizeable( false );
 
SetTitleBarVisible( false );
 
SetKeyBoardInputEnabled( false );
SetMouseInputEnabled( false );
 
SetPaintBackgroundEnabled( false );
SetPaintBorderEnabled( false );
m_bBuildMode = false; // То выключаем его
}
else // Если же он уже выключен
{
SetMoveable( true );
SetSizeable( false );
 
SetTitleBarVisible( true );
 
SetKeyBoardInputEnabled( true );
SetMouseInputEnabled( true );
 
SetPaintBackgroundEnabled( true );
SetPaintBorderEnabled( true );


m_bBuildMode = true; // Включаем
}
}
}


CGameLogo::~CGameLogo() // Деструктор
void CGameLogoPanel::SetParent(vgui::VPANEL panel)
{
{
BaseClass::SetParent(panel);
}
}


// Функция создания панели с логотипом
void CGameLogoPanel::SetParent(Panel *newParent)
void GameLogo_Create( VPANEL parent )
{
{
new CGameLogo( parent, "GameLogo" );
BaseClass::SetParent(newParent);
}
}


// Функция скрытия панели с логотипом
CGameLogoPanel::~CGameLogoPanel() // Деструктор
void GameLogo_Destroy()
{
{
g_pGameLogo = NULL;
}
}


Line 140: Line 157:
void gamelogo_CC()
void gamelogo_CC()
{
{
if ( g_pGameLogo )
DevMsg("Debug mode for gamelogo hud is disabled\n");
{
g_pGameLogo->toggleBuildMode();
}
}
}


Line 151: Line 165:
<br/><br/>
<br/><br/>
Далее открываем файл '''vgui_int.cpp'''<br>
Далее открываем файл '''vgui_int.cpp'''<br>
И где нибудь вверху после подключений напишем такие строки<br/>
Подключим наш файл интерфейса<br/>
<source lang=cpp>
<source lang=cpp>
// Определение функций для использования в файле
#include "igamelogo.h"
void GameLogo_Create( VPANEL parent );
void GameLogo_Destroy();
</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 );
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();
gamelogo->Destroy();
</source>
</source>
<br><br>


Теперь займемся самим файлом GameLogo.res.<br/>
Запускаем мод. Не пугайтесь если ничего не отобразилось<br/>
Достаточно его просто создать а затем настроить панель в режиме отладки, так как это сделал я. Вот содержимое файла<br/>
Нужно в '''GameLogo.res''' написать вот что<br/>
<source>
"resource/GameLogo.res"
{
}
</source>
<br><br>
Запускаем мод. Не пугайтесь если ничего не отобразилось. Включаем режим отладки командой '''cl_gamelogo_build_mode'''<br/>
{| class="wikitable" class="wide"
|-
|-
|[[File:Pgl_1.jpg|600px|thumb|center|cl_gamelogo_build_mode]]
|-
|[[File:Pgl_2.JPG|600px|thumb|center|Затем жмем CTRL+SHIFT+ALT+B]]
|-
|[[File:Pgl_3.JPG|600px|thumb|center|Настраиваем панель и жмем Save и Exit]]
|-
|[[File:Pgl_4.JPG|600px|thumb|center|Выключаем режим отладки той же командой, что и включали]]
|}
 
 
<br/>
 
----
Для особо ленивых или знающих предоставлю почищенный файл GameLogo.res<br/>
<source>
<source>
"resource/GameLogo.res"
"resource/GameLogo.res"
Line 241: Line 228:


<br/>
<br/>
Заменяем '''../game/refresh''' на путь к своему логотипу<br/>
Заменяем '''../game/refresh''' на путь к своему логотипу


=Результаты=
=Результаты=
Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)<br/>
Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)<br/>
[[File:Pgl_5.JPG|500px|thumb|center|Главное меню]]
[[File:Pgl_5.JPG|800px|thumb|center|Главное меню]]
[[File:Pgl_6.JPG|500px|thumb|center|Меню во время игры]]
[[File:Pgl_6.JPG|800px|thumb|center|Меню во время игры]]
<br/><br/><br/><br>
<br/><br/><br/><br>
* Автор: LestaD
* Автор: LestaD
* Игра: Refresh
* Игра: Refresh


 
{{ACategory|Tutorials}}
[[Category:Tutorials:ru]]
{{ACategory|Programming}}
[[Category:Programming:ru]]

Latest revision as of 03:56, 22 August 2024

Wikipedia - Letter.png
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
Underlinked - Logo.png
This article needs more Wikipedia icon links to other articles to help Wikipedia icon integrate it into the encyclopedia. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
January 2024

Вступление

В случае если вы используете 2007 версию SDK, в которой в главном меню игры нет Логотипа, этот туториал как раз то что доктор прописал.
Его также можно использовать для того чтобы написать дополнительный логотип, например вашей команды разработчиков Смотреть здесь(en).
Наш логотип будет аналогичен коду от 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