Implemented some basic UI
This commit is contained in:
@@ -62,6 +62,7 @@ void FarmlandsGame::onRender()
|
||||
m_gameState.sdlRenderer.renderBegin();
|
||||
m_gameState.gameRenderer.render();
|
||||
m_gameState.guiRenderer.render();
|
||||
m_guiController.render();
|
||||
m_gameState.sdlRenderer.renderEnd();
|
||||
}
|
||||
|
||||
|
@@ -5,7 +5,10 @@
|
||||
* Author: tibi
|
||||
*/
|
||||
|
||||
#include <GameState.h>
|
||||
#include <controller/GuiController.h>
|
||||
#include <gui/primitives/RenderContext.h>
|
||||
#include <gui/primitives/TextArea.h>
|
||||
|
||||
#include <cassert>
|
||||
|
||||
@@ -26,13 +29,56 @@ GuiController::~GuiController()
|
||||
void GuiController::initialize(GameState* gameState)
|
||||
{
|
||||
assert(gameState != nullptr);
|
||||
assert(gameState->viewport.initialized);
|
||||
|
||||
m_gameState = gameState;
|
||||
|
||||
// Set up canvas
|
||||
m_canvas.setSize(m_gameState->viewport.width, m_gameState->viewport.height);
|
||||
|
||||
// Add a text element
|
||||
auto text = new gui::primitives::TextArea();
|
||||
text->setText("Hello world!\nMy name is Tibi!\nThis is a really really long long long, even the longest ever, line.");
|
||||
text->setSize(200, 100);
|
||||
text->setPosition(100, 10);
|
||||
text->setColor(0, 1, 0);
|
||||
text->setBackColor(0.5f, 0, 0, 0.5f);
|
||||
text->setTextSize(11);
|
||||
text->setHorizontalWrap(gui::primitives::TextHorizontalWrapping::Ellipsis);
|
||||
m_canvas.addChild(text);
|
||||
}
|
||||
|
||||
bool GuiController::processEvent(SDL_Event& event)
|
||||
{
|
||||
return false;
|
||||
bool handled = m_canvas.handleEvent(event);
|
||||
|
||||
float currentW = m_canvas.child(0)->width();
|
||||
float currentH = m_canvas.child(0)->height();
|
||||
|
||||
if (event.type == SDL_EventType::SDL_KEYDOWN && event.key.keysym.scancode == SDL_SCANCODE_HOME)
|
||||
{
|
||||
m_canvas.child(0)->setSize(currentW + 50, currentH);
|
||||
}
|
||||
if (event.type == SDL_EventType::SDL_KEYDOWN && event.key.keysym.scancode == SDL_SCANCODE_END)
|
||||
{
|
||||
m_canvas.child(0)->setSize(currentW - 50, currentH);
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
void GuiController::render()
|
||||
{
|
||||
// Compute render context
|
||||
gui::primitives::RenderContext renderContext =
|
||||
{
|
||||
.sdlRenderer = &m_gameState->sdlRenderer,
|
||||
.resManager = &m_gameState->resManager,
|
||||
.uiScale = 1,
|
||||
};
|
||||
|
||||
// Render
|
||||
m_canvas.render(renderContext);
|
||||
}
|
||||
|
||||
} /* namespace controller */
|
||||
|
@@ -8,6 +8,8 @@
|
||||
#ifndef CONTROLLER_GUICONTROLLER_H_
|
||||
#define CONTROLLER_GUICONTROLLER_H_
|
||||
|
||||
#include <gui/Canvas.h>
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
namespace farmlands {
|
||||
@@ -33,8 +35,14 @@ namespace controller {
|
||||
*/
|
||||
bool processEvent(SDL_Event& event);
|
||||
|
||||
/**
|
||||
* Renders the GUI
|
||||
*/
|
||||
void render();
|
||||
|
||||
private:
|
||||
GameState* m_gameState;
|
||||
gui::Canvas m_canvas;
|
||||
};
|
||||
|
||||
} /* namespace controller */
|
||||
|
@@ -39,31 +39,30 @@ void PlayerController::updateLogic()
|
||||
{
|
||||
// Get keyboard status
|
||||
const Uint8* keys = SDL_GetKeyboardState(NULL);
|
||||
const SDL_Keymod mods = SDL_GetModState();
|
||||
|
||||
float deltaX = 0;
|
||||
float deltaY = 0;
|
||||
|
||||
// Compute movement delta multiplier
|
||||
float deltaMultiplier = 5.0f * m_gameState->elapsedTime; // Equivalent to units per second
|
||||
if ((mods & KMOD_LSHIFT) || (mods & KMOD_RSHIFT))
|
||||
if (keys[m_gameState->config.keys.Run])
|
||||
deltaMultiplier *= 5;
|
||||
|
||||
// Handle scale changes (debugging only)
|
||||
if (keys[SDL_SCANCODE_KP_MINUS])
|
||||
if (keys[m_gameState->config.keys.Debug_ZoomOut])
|
||||
m_gameState->camera.scale *= 1.0f - 0.05f * deltaMultiplier;
|
||||
if (keys[SDL_SCANCODE_KP_PLUS])
|
||||
if (keys[m_gameState->config.keys.Debug_ZoomIn])
|
||||
m_gameState->camera.scale *= 1.0f + 0.05f * deltaMultiplier;
|
||||
|
||||
// Handle movement
|
||||
if (keys[SDL_SCANCODE_UP])
|
||||
deltaY -= 1;
|
||||
if (keys[SDL_SCANCODE_DOWN])
|
||||
deltaY += 1;
|
||||
if (keys[SDL_SCANCODE_LEFT])
|
||||
deltaX -= 1;
|
||||
if (keys[SDL_SCANCODE_RIGHT])
|
||||
if (keys[m_gameState->config.keys.Right] || keys[m_gameState->config.keys.AltRight])
|
||||
deltaX += 1;
|
||||
if (keys[m_gameState->config.keys.Up] || keys[m_gameState->config.keys.AltUp])
|
||||
deltaY -= 1;
|
||||
if (keys[m_gameState->config.keys.Left] || keys[m_gameState->config.keys.AltLeft])
|
||||
deltaX -= 1;
|
||||
if (keys[m_gameState->config.keys.Down] || keys[m_gameState->config.keys.AltDown])
|
||||
deltaY += 1;
|
||||
|
||||
float newX = m_gameState->player.posX + deltaX * deltaMultiplier;
|
||||
float newY = m_gameState->player.posY + deltaY * deltaMultiplier;
|
||||
|
Reference in New Issue
Block a user