Перейти к контенту

[SoC] Ковыряемся в файлах


Halford

Рекомендуемые сообщения

Ребята, хочу сделать меньше курсор в меню, у меня монитор 2K курсор увеличенный и мутный. Помогите уменьшить. Stretchtexture только фиксирует x и у, recttexture только обрезает текстуру. 

Скрытый текст



#include "stdafx.h"
#include "uicursor.h"

#include "ui/UIStatic.h"
#include "ui/UIBtnHint.h"


#define C_DEFAULT	D3DCOLOR_XRGB(0xff,0xff,0xff)

CUICursor::CUICursor():m_static(NULL),m_b_use_win_cursor(false)
{    
	bVisible				= false;
	vPrevPos.set			(0.0f, 0.0f);
	vPos.set				(0.f,0.f);
	InitInternal			();
	Device.seqRender.Add	(this,-3/*2*/);
	Device.seqResolutionChanged.Add(this);
}
//--------------------------------------------------------------------
CUICursor::~CUICursor	()
{
	xr_delete				(m_static);
	Device.seqRender.Remove	(this);
	Device.seqResolutionChanged.Remove(this);
}

void CUICursor::OnScreenResolutionChanged()
{
	xr_delete					(m_static);
	InitInternal				();
}

void CUICursor::InitInternal()
{
	
	m_static					= xr_new<CUIStatic>();
	m_static->InitTexture		("ui\\ui_cursor", "hud\\cursor");
	Frect						rect;
	rect.set					(0.0f,0.0f,40.0f,40.0f);
	m_static->SetTextureRect	(rect);
	
	Fvector2					sz;
	sz.set						(rect.rb);
	sz.x						*= UI().get_current_kx();
	
	m_static->SetWndSize		(sz);
    m_static->SetStretchTexture	(true);

	u32 screen_size_x	= GetSystemMetrics( SM_CXSCREEN );
	u32 screen_size_y	= GetSystemMetrics( SM_CYSCREEN );
	m_b_use_win_cursor	= (screen_size_y >=Device.dwHeight && screen_size_x>=Device.dwWidth);
}

//--------------------------------------------------------------------
u32 last_render_frame = 0;

void CUICursor::OnRender	()
{
	g_btnHint->OnRender();
	g_statHint->OnRender();

	if( !IsVisible() ) return;
#ifdef DEBUG
	VERIFY(last_render_frame != Device.dwFrame);
	last_render_frame = Device.dwFrame;

	if(bDebug)
	{
	CGameFont* F		= UI().Font().pFontDI;
	F->SetAligment		(CGameFont::alCenter);
	F->SetHeightI		(0.02f);
	F->OutSetI			(0.f,-0.9f);
	F->SetColor			(0xffffffff);
	Fvector2			pt = GetCursorPosition();
	F->OutNext			("%f-%f",pt.x, pt.y);
	}
#endif

	m_static->SetWndPos	(vPos);
	m_static->Update	();
	m_static->Draw		();
}

Fvector2 CUICursor::GetCursorPosition()
{
	return  vPos;
}

Fvector2 CUICursor::GetCursorPositionDelta()
{
	Fvector2 res_delta;

	res_delta.x = vPos.x - vPrevPos.x;
	res_delta.y = vPos.y - vPrevPos.y;
	return res_delta;
}

void CUICursor::UpdateCursorPosition(int _dx, int _dy)
{
	Fvector2	p;
	vPrevPos	= vPos;
	if(m_b_use_win_cursor)
	{
		POINT		pti;
		BOOL r		= GetCursorPos(&pti);
		if(!r)		return;
		p.x			= (float)pti.x;
		p.y			= (float)pti.y;
		vPos.x		= p.x * (UI_BASE_WIDTH/(float)Device.dwWidth);
		vPos.y		= p.y * (UI_BASE_HEIGHT/(float)Device.dwHeight);
	}else
	{
		float sens = 1.0f;
		vPos.x		+= _dx*sens;
		vPos.y		+= _dy*sens;
	}
	clamp		(vPos.x, 0.f, UI_BASE_WIDTH);
	clamp		(vPos.y, 0.f, UI_BASE_HEIGHT);
}

void CUICursor::SetUICursorPosition(Fvector2 pos)
{
	vPos		= pos;
	POINT		p;
	p.x			= iFloor(vPos.x / (UI_BASE_WIDTH/(float)Device.dwWidth));
	p.y			= iFloor(vPos.y / (UI_BASE_HEIGHT/(float)Device.dwHeight));

	SetCursorPos(p.x, p.y);
}

 


 

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, AndreySol сказал:

Размер 40х40. Уменьши как тебе надо.

вот почему-то не работает, квадрат уменьшается, а масштаб текстуры нет - она тупо обрезается, хотя stretch true

 

Я делаю 2k текстуры для меню lost alpha (ТЧ) и проблема такая: stretch не работает на элементах ui_cursor, ui_checker, ui_slider.

Поделиться этим сообщением


Ссылка на сообщение
4 часа назад, naxac сказал:

@Stepikkkk, SetTextureRect задет координаты, по которым  берется текстура из файла, размер окна задается далее, вот тут:

m_static->SetWndSize(sz);

Можно задать размер здесь, sz - экземпляр класса Fvector2.

Ура, получилось! Спасибо! Сделал так:     

    //sz.set                    (rect.rb);
    //sz.x                      *= UI().get_current_kx();
    
    //m_static->SetWndRect      (rect);
    m_static->SetWndSize        (sz.set(20,20));

 

Изменено пользователем Stepikkkk

Поделиться этим сообщением


Ссылка на сообщение

Если кому надо, написал код для курсора (анимированные тоже работают), можно менять размеры через файл gamedata/config/ui/ui_cursor.xml, чтобы задать размеры для широкоформатного разрешения делаем длину меньше, чем высоту.

Скрытый текст

void CUICursor::InitInternal()
{
	m_static					= xr_new<CUIStatic>();
	m_static->InitTextureEx		("ui\\ui_ani_cursor", "hud\\cursor");
	Frect						rect;
	rect.set					(0.0f,0.0f,40.0f,40.0f);
	m_static->SetTextureRect	(rect);

	CUIXml xml_doc;
	xml_doc.Load				(CONFIG_PATH, UI_PATH, "ui_cursor.xml");
	float width  = xml_doc.ReadAttribFlt("ui_cursor", 0, "width", 40.0f);
	float height = xml_doc.ReadAttribFlt("ui_cursor", 0, "height", 40.0f);
	
	
	m_static->SetWndSize		(Fvector2().set(width, height));
    m_static->SetStretchTexture	(true);

	u32 screen_size_x	= GetSystemMetrics( SM_CXSCREEN );
	u32 screen_size_y	= GetSystemMetrics( SM_CYSCREEN );
	m_b_use_win_cursor	= (screen_size_y >=Device.dwHeight && screen_size_x>=Device.dwWidth);
}

 

 

Скрытый текст

<?xml version="1.0" encoding="utf-8"?>
<a>
    <ui_cursor width="15" height="20">
    </ui_cursor>
</a>

 

Изменено пользователем Stepikkkk
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...