Personal Game Logo:ru

From Valve Developer Community
(Redirected from PersonalGameLogo:ru)
Jump to: navigation, search

Вступление

В случае если вы используете 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