Ru/Personal Game Logo

From Valve Developer Community
< Ru
Jump to: navigation, search
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