GL - Buttons is now using one texture per button type. Fixed button state when spamming the button.

This commit is contained in:
Pontus Fransson 2014-02-12 10:02:52 +01:00
parent d4b7fbf1b4
commit 8e07475434
3 changed files with 20 additions and 31 deletions

View File

@ -42,26 +42,17 @@ namespace DanBias
virtual ~EventButtonGUI() virtual ~EventButtonGUI()
{ {
Oyster::Graphics::API::DeleteTexture(texture); Oyster::Graphics::API::DeleteTexture(texture);
Oyster::Graphics::API::DeleteTexture(texture2);
Oyster::Graphics::API::DeleteTexture(texture3);
texture = NULL; texture = NULL;
texture2 = NULL;
texture3 = NULL;
} }
void CreateTexture(std::wstring textureName) void CreateTexture(std::wstring textureName)
{ {
std::wstring file = L".png";
//Create texture //Create texture
texture = Oyster::Graphics::API::CreateTexture(textureName + std::wstring(L"none") + file); texture = Oyster::Graphics::API::CreateTexture(textureName);
texture2 = Oyster::Graphics::API::CreateTexture(textureName + std::wstring(L"highlight") + file);
texture3 = Oyster::Graphics::API::CreateTexture(textureName + std::wstring(L"down") + file);
} }
virtual void Render() virtual void Render()
{ {
if(EventButton<Owner>::Enabled()) if(EventButton<Owner>::Enabled())
{ {
//Render att xPos and yPos //Render att xPos and yPos
@ -69,15 +60,15 @@ namespace DanBias
if(EventButton<Owner>::GetState() == ButtonState_None) if(EventButton<Owner>::GetState() == ButtonState_None)
{ {
Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height)); Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height), Oyster::Math::Float3(1, 1, 1));
} }
else if(EventButton<Owner>::GetState() == ButtonState_Hover) else if(EventButton<Owner>::GetState() == ButtonState_Hover)
{ {
Oyster::Graphics::API::RenderGuiElement(texture2, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height)); Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height), Oyster::Math::Float3(0, 1, 0));
} }
else else
{ {
Oyster::Graphics::API::RenderGuiElement(texture3, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height)); Oyster::Graphics::API::RenderGuiElement(texture, Oyster::Math::Float2(xPos, yPos), Oyster::Math::Float2(width, height), Oyster::Math::Float3(1, 0, 0));
} }
} }
@ -87,8 +78,6 @@ namespace DanBias
float xPos, yPos; float xPos, yPos;
float width, height; float width, height;
Oyster::Graphics::API::Texture texture; Oyster::Graphics::API::Texture texture;
Oyster::Graphics::API::Texture texture2;
Oyster::Graphics::API::Texture texture3;
}; };

View File

@ -110,21 +110,21 @@ bool LoginState::Init(Oyster::Network::NetworkClient* nwClient)
//Create menu buttons //Create menu buttons
privData->collection = new EventButtonCollection; privData->collection = new EventButtonCollection;
EventHandler::Instance().AddCollection(privData->collection); EventHandler::Instance().AddCollection(privData->collection);
privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.2f, 0.1f, 0.2f)); privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle.png", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.2f, 0.1f, 0.2f));
privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.3f, 0.1f, 0.2f)); privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle.png", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.3f, 0.1f, 0.2f));
privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.4f, 0.1f, 0.2f)); privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle.png", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.4f, 0.1f, 0.2f));
privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle_", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.5f, 0.1f, 0.2f)); privData->collection->AddButton(new ButtonEllipse<LoginState*>(L"circle.png", &LoginState::ButtonCallback, this, (void*)Create, 0.2f, 0.5f, 0.1f, 0.2f));
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.15f, 0.05f, 0.1f, 0.1f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Create, 0.15f, 0.05f, 0.1f, 0.1f));
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.25f, 0.05f, 0.1f, 0.1f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Create, 0.25f, 0.05f, 0.1f, 0.1f));
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.35f, 0.05f, 0.1f, 0.1f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Create, 0.35f, 0.05f, 0.1f, 0.1f));
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.45f, 0.05f, 0.1f, 0.1f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Create, 0.45f, 0.05f, 0.1f, 0.1f));
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Create, 0.5f, 0.5f, 0.3f, 0.3f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Create, 0.5f, 0.5f, 0.3f, 0.3f));
//Incr/decr buttons //Incr/decr buttons
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Incr, 0.85f, 0.2f, 0.1f, 0.1f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Incr, 0.85f, 0.2f, 0.1f, 0.1f));
privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button_", &LoginState::ButtonCallback, this, (void*)Decr, 0.55f, 0.2f, 0.1f, 0.1f)); privData->collection->AddButton(new ButtonRectangle<LoginState*>(L"button.png", &LoginState::ButtonCallback, this, (void*)Decr, 0.55f, 0.2f, 0.1f, 0.1f));
privData->testNumber = 0; privData->testNumber = 0;
@ -217,7 +217,6 @@ GameClientState::ClientState LoginState::Update(float deltaTime, InputClass* Key
} }
bool LoginState::Render(float dt) bool LoginState::Render(float dt)
{ {
Oyster::Graphics::API::SetView(privData->view); Oyster::Graphics::API::SetView(privData->view);
Oyster::Graphics::API::SetProjection( privData->proj); Oyster::Graphics::API::SetProjection( privData->proj);
@ -241,7 +240,7 @@ bool LoginState::Render(float dt)
_itow_s(privData->testNumber, temp, 10); _itow_s(privData->testNumber, temp, 10);
number = temp; number = temp;
Oyster::Graphics::API::StartTextRender(); Oyster::Graphics::API::StartTextRender();
Oyster::Graphics::API::RenderText(number, Oyster::Math::Float2(0.7, 0.2), Oyster::Math::Float2(0.1, 0.1)); Oyster::Graphics::API::RenderText(number, Oyster::Math::Float2(0.7, 0.2), Oyster::Math::Float2(0.1, 0.1), Oyster::Math::Float3(1, 0, 0));
Oyster::Graphics::API::EndFrame(); Oyster::Graphics::API::EndFrame();
return true; return true;

View File

@ -155,16 +155,17 @@ namespace Oyster
break; break;
case ButtonState_Hover: case ButtonState_Hover:
case ButtonState_Released:
if(outside == false) if(outside == false)
{ {
clicked = true; clicked = true;
currentState = ButtonState_Pressed; currentState = ButtonState_Pressed;
} }
else break;
case ButtonState_Released:
currentState = ButtonState_Hover; currentState = ButtonState_Hover;
break; break;
case ButtonState_Pressed: case ButtonState_Pressed:
case ButtonState_Down: case ButtonState_Down:
currentState = ButtonState_Down; currentState = ButtonState_Down;