Danbias/Into The Void client/MainMenu.cpp

167 lines
4.9 KiB
C++

#include "MainMenu.h"
#include "RenderEngine.h"
#include "Input\InputController.h"
#include "Window\Window.h"
#include "Lobby.h"
Oyster::Math::Float3 ConnectPos, QuitPos, TitlePos;
bool IntersectsOverlay(const Overlay &overlay, Oyster::Math::Float2 point)
{
if (point.x >= overlay.position.x && point.x <= (overlay.position.x + overlay.size.x) &&
point.y >= overlay.position.y && point.y <= (overlay.position.y + overlay.size.y))
{
return true;
}
return false;
}
MainMenu::MainMenu()
{
m_stateStack = NULL;
m_connection = NULL;
}
MainMenu::~MainMenu()
{
}
void MainMenu::Enter(GameStateStack *stateStack)
{
Oyster::Input::Controller::OrigoTopLeft();
Oyster::Input::Controller::RestrictMouse(false);
m_stateStack = stateStack;
m_connection = NULL;
Oyster::Math::Float2 windowSize;
windowSize.x = (float)Oyster::Window::Size.right;
windowSize.y = (float)Oyster::Window::Size.top;
D3DX11CreateShaderResourceViewFromFile(Oyster::Core::Device, "..\\Content\\GUI\\button_darkblue_250x64.png", NULL, NULL, &m_connectTextures[0], NULL);
D3DX11CreateShaderResourceViewFromFile(Oyster::Core::Device, "..\\Content\\GUI\\button_250x64.png", NULL, NULL, &m_connectTextures[1], NULL);
D3DX11CreateShaderResourceViewFromFile(Oyster::Core::Device, "..\\Content\\GUI\\button_darkblue_250x64.png", NULL, NULL, &m_quitTextures[0], NULL);
D3DX11CreateShaderResourceViewFromFile(Oyster::Core::Device, "..\\Content\\GUI\\button_250x64.png", NULL, NULL, &m_quitTextures[1], NULL);
D3DX11CreateShaderResourceViewFromFile(Oyster::Core::Device, "..\\Content\\GUI\\lobby_bg_screen.png", NULL, NULL, &m_backgroundOverlay.texture, NULL);
m_backgroundOverlay.size = windowSize;
m_backgroundOverlay.position.x = 0.0f;
m_backgroundOverlay.position.y = 0.0f;
m_backgroundOverlay.position.z = 0.5f;
m_connectOverlay.texture = m_connectTextures[0];
m_connectOverlay.size = Oyster::Math::Float2(229.0f, 80.0f);
m_connectOverlay.position.x = windowSize.x / 2.0f - m_connectOverlay.size.x / 2.0f;
m_connectOverlay.position.y = 200.0f;
m_connectOverlay.position.z = 0.0f;
ConnectPos = m_connectOverlay.position;
ConnectPos.x+=10;
m_quitOverlay.texture = m_quitTextures[0];
m_quitOverlay.size = Oyster::Math::Float2(132.0f, 83.0f);
m_quitOverlay.position.x = windowSize.x / 2.0f - m_quitOverlay.size.x / 2.0f;
m_quitOverlay.position.y = windowSize.y - m_quitOverlay.size.y - 20.0f;
m_quitOverlay.position.z = 0.0f;
QuitPos = m_quitOverlay.position;
QuitPos.x+=10;
QuitPos.y+=5;
TitlePos.x = 120.0f;
TitlePos.y = 10.0f;
TitlePos.z = 0.0f;
}
void MainMenu::Exit()
{
m_stateStack = NULL;
m_connection = NULL;
}
void MainMenu::Suspend()
{
}
void MainMenu::Resume()
{
Oyster::Input::Controller::OrigoTopLeft();
Oyster::Input::Controller::RestrictMouse(false);
}
void MainMenu::Update(float timeDelta)
{
if (m_connection)
{
if (m_connection->getConnectionStatus() != OFFLINE)
{
m_stateStack->SetState(new Lobby(m_connection));
return;
}
else
{
m_connectTimer += timeDelta;
// If we haven't established a connection after 5 seconds, stop trying.
if (m_connectTimer >= 5.0f)
{
m_connection->disconnect();
delete m_connection;
m_connection = NULL;
}
}
}
Oyster::Math::Float2 cursorPosition = Oyster::Math::Float2((float)Oyster::Input::Controller::GetX(), (float)Oyster::Input::Controller::GetY());
if (IntersectsOverlay(m_connectOverlay, cursorPosition))
m_connectOverlay.texture = m_connectTextures[1];
else
m_connectOverlay.texture = m_connectTextures[0];
if (IntersectsOverlay(m_quitOverlay, cursorPosition))
m_quitOverlay.texture = m_quitTextures[1];
else
m_quitOverlay.texture = m_quitTextures[0];
if (Oyster::Input::Controller::isMouseBtnPressed(MK_LBUTTON))
{
if (!m_connection && IntersectsOverlay(m_connectOverlay, cursorPosition))
{
m_connection = new NetworkConnection();
m_connectTimer = 0.0f;
if (m_connection->connectWithFileData("../Connectiondata.txt")== NetworkConnection::Failure)
{
delete m_connection;
m_connection = NULL;
}
}
else if (IntersectsOverlay(m_quitOverlay, cursorPosition))
{
m_stateStack->PopState();
}
}
}
void MainMenu::Render() const
{
Oyster::Engine::PrepareForRendering::Begin2DTextRender();
Oyster::Engine::Render::Text("Into The Void!",Oyster::Math::Float2(20,50), TitlePos);
Oyster::Engine::Render::Text("Quit",Oyster::Math::Float2(15,40),QuitPos);
if (m_connection)
Oyster::Engine::Render::Text("Connecting",Oyster::Math::Float2(10,50),ConnectPos);
else
Oyster::Engine::Render::Text("Connect",Oyster::Math::Float2(15,50),ConnectPos);
Oyster::Engine::PrepareForRendering::Begin2DRender();
Oyster::Engine::Render::Sprite(m_backgroundOverlay.texture, m_backgroundOverlay.size, m_backgroundOverlay.position);
Oyster::Engine::Render::Sprite(m_connectOverlay.texture, m_connectOverlay.size, m_connectOverlay.position);
Oyster::Engine::Render::Sprite(m_quitOverlay.texture, m_quitOverlay.size, m_quitOverlay.position);
}