Ru/Personal Game Logo: Difference between revisions
Line 245: | Line 245: | ||
=Результаты= | =Результаты= | ||
Вот и все. Приведу примеры того что получилось у меня в результате кодинга :)<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 |
Revision as of 15:13, 10 August 2012
Вступление
В случае если вы используете 2007 версию SDK, в которой в главном меню игры нет Логотипа, этот туториал как раз то что доктор прописал.
Его также можно использовать для того чтобы написать дополнительный логотип, например вашей команды разработчиков.
Наш логотип будет аналогичен коду от VALVe в 2009 версии движка, только он не читает запись из файла gameinfo.txt
Начнем
Откроем клиент игры. Я создал новый фильтр в Visual Studio 2010, в фильтре Source Files и располагал файлы там.
Вы можете поступить как угодно.
Создадим файл GameLogo.h
/*
Copyright © 2010-2012, Refresh Team
Load a game logo to menu
*/
// Подключение базового класса
#include "vgui_controls/Frame.h"
// Определение нашего класса
class CGameLogo : vgui::Frame
{
DECLARE_CLASS_SIMPLE( CGameLogo, vgui::Frame );
public:
CGameLogo( vgui::VPANEL parent, char const *panelName );
~CGameLogo();
void toggleBuildMode(); // Переключение режима отладки логотипа
private:
bool m_bBuildMode;
};
Далее создадим файл 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; // Используем vgui для удобства
static CGameLogo *g_pGameLogo = NULL; // Переменная в которой хранится созданный класс
CGameLogo::CGameLogo( vgui::VPANEL parent, char const *panelName ) : BaseClass( NULL, panelName ) // Конструктор
{
g_pGameLogo = this; // Помещаем в переменную созданный класс
m_bBuildMode = false; // Выключаем режим отладки
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 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 GameLogo_Create( VPANEL parent )
{
new CGameLogo( parent, "GameLogo" );
}
// Функция скрытия панели с логотипом
void GameLogo_Destroy()
{
g_pGameLogo = NULL;
}
// Это функция вызываемая при вводе команды в консоль
void gamelogo_CC()
{
if ( g_pGameLogo )
{
g_pGameLogo->toggleBuildMode();
}
}
// Определение консольной команды при выполнении которой будет включаться/выключаться режим отладки
ConCommand cl_gamelogo_build_mode("cl_gamelogo_build_mode", gamelogo_CC, "Change build mode to gamelogo");
Далее открываем файл vgui_int.cpp
И где нибудь вверху после подключений напишем такие строки
// Определение функций для использования в файле
void GameLogo_Create( VPANEL parent );
void GameLogo_Destroy();
Найдем функцию 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"
{
}
Запускаем мод. Не пугайтесь если ничего не отобразилось. Включаем режим отладки командой cl_gamelogo_build_mode
Для особо ленивых или знающих предоставлю почищенный файл 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