int main()
{
SetTraceLogLevel(LOG_WARNING);
InitWindow(900, 600, "Raylib is the master");
SetTargetFPS(60);
std::cout << "Game Initializing" << std::endl;
Game game;
//float ar = (1080.0 / 1920.0) * 1.25;
game.init(900, 600);
game.runFixed();
CloseWindow();
return 0;
}
game.h#ifndef GAME_H
#define GAME_H
#include <iostream>
#include <TGUI/TGUI.hpp>
#include <TGUI/Backend/raylib.hpp>
#include "AppUI.h"
class Game
{
public:
Game();
~Game();
void init(int,int);
void runFixed();
private:
ui::App m_app;
};
#endif
game.cpp#include "Game.h"
Game::Game()
{
std::cout << "Game Created" << std::endl;
//m_ui = nullptr;
}
Game::~Game(){}
void Game::init(int screenWidth,int screenHeight)
{
m_app.init(screenWidth, screenHeight);
tgui::RAYLIB::Gui& ui = m_app.getGUI();
}
void Game::runFixed()
{
while (!WindowShouldClose()) // Detect window close button or ESC key
{
auto& ui = m_app.getGUI();
ui.handleEvents();
int pressedChar = GetCharPressed();
while (pressedChar)
{
ui.handleCharPressed(pressedChar);
pressedChar = GetCharPressed();
}
int pressedKey = GetKeyPressed();
while (pressedKey)
{
ui.handleKeyPressed(pressedKey);
pressedKey = GetKeyPressed();
}
m_app.draw();
// ui.mainLoop();
}
}
AppUI.h#include <map>
#include <string>
#include <filesystem>
#include <TGUI/TGUI.hpp>
#include <TGUI/Backend/raylib.hpp>
namespace ui
{
namespace fs = std::filesystem;
class App
{
public:
App();
~App();
void init(int,int);
tgui::RAYLIB::Gui& getGUI();
void draw();
void update();
private:
tgui::RAYLIB::Gui m_gui;
};
}
#endif // header guard
AppUI.cpp#include "AppUI.h"
ui::App::App(){
}
ui::App::~App()
{
}
void ui::App::init(int screenWidth, int screenHeight)
{
std::cout << "Initializing App User Interface." << std::endl;
try {
tgui::Theme blackTheme{ "../../themes/Black.txt" };
tgui::CanvasRaylib::Ptr MainCanvas = tgui::CanvasRaylib::create({ "80%", "80%" });
m_gui.add(MainCanvas, "main_canvas");
tgui::MenuBar::Ptr MainMenuBar = tgui::MenuBar::create();
MainMenuBar->setRenderer(blackTheme.getRenderer("MenuBar"));
MainMenuBar->setHeight(22.f);
MainMenuBar->setPosition("1%", "1%");
MainMenuBar->addMenu("File");
MainMenuBar->addMenuItem("New");
MainMenuBar->addMenuItem("Load");
MainMenuBar->addMenuItem("Save");
MainMenuBar->addMenuItem("Exit");
MainMenuBar->addMenu("Window");
MainMenuBar->addMenuItem("Map Object Tree");//Show a tree view of the map in a child window
MainMenuBar->addMenuItem("Object Properties");//Show Properties of an object
MainMenuBar->addMenu("Help");
MainMenuBar->addMenuItem("About");
MainMenuBar->setVisible(true);
m_gui.add(MainMenuBar, "main_menu_bar");
//MainMenuBar->connectMenuItem({ "File", "New" }, &UI::createWizard, this);
}
catch (const tgui::Exception& e)
{
std::cerr << "TGUI Exception: " << e.what() << std::endl;
exit(1);
}
}
tgui::RAYLIB::Gui& ui::App::getGUI()
{
return m_gui;
}
void ui::App::draw()
{
auto MainCanvas = m_gui.get<tgui::CanvasRaylib>("main_canvas");
//auto MainMenuBar = m_gui.get<tgui::MenuBar>("main_canvas");
BeginTextureMode(MainCanvas->getTextureTarget());
ClearBackground({ 40, 160, 140, 255 });
DrawCircle(100, 120, 20, Color{ 100,10,10,255 });
EndTextureMode();
BeginDrawing();
ClearBackground({ 40, 60, 40, 255 });
DrawCircle(200, 120, 50, Color{ 100,10,10,255 });
m_gui.draw();//TGUI draw
EndDrawing();
}
void ui::App::update()
{
//m_screenSize.x = static_cast<float>(GetScreenWidth());
//m_screenSize.y = static_cast<float>(GetScreenHeight());
}
//#include <iostream>
//#include "raylib.h"
//#include <filesystem>
//namespace fs = std::filesystem;
//#include <SFML/Graphics.hpp>
#include <iostream>
//#include <UI.h>
//#include <TGUI/TGUI.hpp>
//#include <TGUI/Backend/raylib.hpp>
#include "Game.h"
int main()
{
Game game;
//float ar = (1080.0 / 1920.0) * 1.25;
game.init(900, 600);
game.runFixed();
return 0;
}
game.cpp#ifndef GAME_H
#define GAME_H
#include <iostream>
//#include <filesystem>
//#include <unordered_map>
//#include <string>
//#include <cassert> // for assert()
//#include "raylib.h"
//#include "raymath.h"
#include <TGUI/TGUI.hpp>
#include <TGUI/Backend/raylib.hpp>
//#include "VecUtil.h"
//#include "MapMan.h"
//#include "AssetMan.h"
//#include "GameObjects.hpp"
#include "AppUI.h"
class Game
{
public:
Game();
~Game();
void init(int,int);
void runFixed();
private:
ui::App m_ui;
};
#endif
Game.cpp#include "Game.h"
Game::Game()
{
std::cout << "Game Created" << std::endl;
//m_ui = nullptr;
}
Game::~Game(){CloseWindow();}
void Game::init(int screenWidth,int screenHeight)
{
SetTraceLogLevel(LOG_WARNING);
std::cout << "Game Initializing" << std::endl;
InitWindow(screenWidth, screenHeight, "Raylib is the master");
SetTargetFPS(60);
m_ui.init();
tgui::RAYLIB::Gui* ui = m_ui.getUI();
if (ui == nullptr)
std::cout << "UI is null" << std::endl;
}
void Game::runFixed()
{
while (!WindowShouldClose()) // Detect window close button or ESC key
{
auto ui = m_ui.getUI();
ui->handleEvents();
int pressedChar = GetCharPressed();
while (pressedChar)
{
ui->handleCharPressed(pressedChar);
pressedChar = GetCharPressed();
}
int pressedKey = GetKeyPressed();
while (pressedKey)
{
ui->handleKeyPressed(pressedKey);
pressedKey = GetKeyPressed();
}
BeginDrawing();
ClearBackground({40, 60, 40, 255});
DrawCircle(200, 120, 50, Color{100,10,10,255});
m_ui.draw();
EndDrawing();
// ui.mainLoop();
}
}
#ifndef HEADER_APP_UI
#define HEADER_APP_UI
#pragma once
#include <iostream>
#include <unordered_map>
#include <map>
#include <string>
#include <filesystem>
//#include "raylib.h"
//#include "rlgl.h"
#include <TGUI/TGUI.hpp>
#include <TGUI/Backend/raylib.hpp>
//#include "VecUtil.h"
//#include "AssetMan.h"
namespace ui
{
namespace fs = std::filesystem;
class App
{
public:
App();
~App();
void init();
tgui::RAYLIB::Gui* getUI();
void draw();
void update();
private:
tgui::RAYLIB::Gui m_ui;
};
}
#endif // header guard
#include "AppUI.h"
ui::App::App(){
}
ui::App::~App()
{
}
void ui::App::init()
{
std::cout << "Initializing App User Interface." << std::endl;
try {
tgui::Theme blackTheme{ "../../themes/Black.txt" };
tgui::CanvasRaylib::Ptr MainCanvas = tgui::CanvasRaylib::create({ "100%", "100%" });
m_ui.add(MainCanvas, "main_canvas");
tgui::MenuBar::Ptr MainMenuBar = tgui::MenuBar::create();
MainMenuBar->setRenderer(blackTheme.getRenderer("MenuBar"));
MainMenuBar->setHeight(22.f);
MainMenuBar->setPosition("1%", "1%");
MainMenuBar->addMenu("File");
MainMenuBar->addMenuItem("New");
MainMenuBar->addMenuItem("Load");
MainMenuBar->addMenuItem("Save");
MainMenuBar->addMenuItem("Exit");
MainMenuBar->addMenu("Window");
MainMenuBar->addMenuItem("Map Object Tree");//Show a tree view of the map in a child window
MainMenuBar->addMenuItem("Object Properties");//Show Properties of an object
MainMenuBar->addMenu("Help");
MainMenuBar->addMenuItem("About");
MainMenuBar->setVisible(true);
m_ui.add(MainMenuBar, "main_menu_bar");
//MainMenuBar->connectMenuItem({ "File", "New" }, &UI::createWizard, this);
}
catch (const tgui::Exception& e)
{
std::cerr << "TGUI Exception: " << e.what() << std::endl;
exit(1);
}
}
tgui::RAYLIB::Gui* ui::App::getUI()
{
return &m_ui;
}
void ui::App::draw()
{
auto MainCanvas = m_ui.get<tgui::CanvasRaylib>("main_canvas");
BeginTextureMode(MainCanvas->getTextureTarget());
m_ui.draw();
EndTextureMode();
}
void ui::App::update()
{
//m_screenSize.x = static_cast<float>(GetScreenWidth());
//m_screenSize.y = static_cast<float>(GetScreenHeight());
}



//tgui::Picture::Ptr picPtr = tgui::Picture::create("themes/newCrack_albedo.jpg"); //nope
//tgui::Picture::Ptr picPtr = tgui::Picture::create("themes/Ground.jpg");//nope
//tgui::Picture::Ptr picPtr = tgui::Picture::create("themes/ground.jpg");//nope
tgui::Picture::Ptr picPtr = tgui::Picture::create("themes/RedBackground.jpg");//Works
//tgui::Picture::Ptr picPtr = tgui::Picture::create("themes/RedBackground.png");//nope
//tgui::Picture::Ptr picPtr = tgui::Picture::create("themes/BabyBlue.png");//Works
//tgui::Picture::Ptr picPtr = tgui::Picture::create("C:\\Users\\Mattd\\Documents\\MyCode\\RaylibTest3\\x64\\Debug\\themes\\development\\Black\\images\\ButtonBackgroundFocused.png");//Works
//tgui::Picture::Ptr picPtr = tgui::Picture::create("themes\\development\\Black\\images\\ButtonBackgroundFocused.png");//Works
I will post the image as soon as I figure out how.