Plenty of minor stuff

This commit is contained in:
Adrian Hedqvist 2017-09-24 00:15:28 +02:00
parent a2e3b4efda
commit 7ccb4422b8
14 changed files with 223 additions and 59 deletions

View file

@ -2,7 +2,11 @@
#include "Tilemap.h" #include "Tilemap.h"
#include "BehaviourTree.h" #include "BehaviourTree.h"
int idcounter = 0;
Actor::Actor(Tilemap * map, vec2i pos) { Actor::Actor(Tilemap * map, vec2i pos) {
id = idcounter++;
name = "Actor";
this->map = map; this->map = map;
position = pos; position = pos;
bt = nullptr; bt = nullptr;

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include "vec2i.h" #include "vec2i.h"
#include <string>
class BehaviourTree; class BehaviourTree;
@ -19,6 +20,8 @@ class Actor {
protected: protected:
BehaviourTree* bt; BehaviourTree* bt;
public: public:
int id;
std::string name;
Tilemap* map; Tilemap* map;
bool alive; bool alive;
int health; int health;

View file

@ -100,6 +100,9 @@ int App::start() {
case SDL_WINDOWEVENT_CLOSE: case SDL_WINDOWEVENT_CLOSE:
running = false; running = false;
break; break;
case SDL_WINDOWEVENT_RESIZED:
renderer->set_window_size(ev.window.data1, ev.window.data2);
break;
default: default:
break; break;
} }
@ -154,7 +157,9 @@ int App::start() {
SDL_Delay(1); SDL_Delay(1);
} }
delete renderer; delete renderer;
ImGui::Shutdown();
SDL_Quit(); SDL_Quit();
SDL_LogVerbose(SDL_LOG_CATEGORY_SYSTEM, "Quit."); SDL_LogVerbose(SDL_LOG_CATEGORY_SYSTEM, "Quit.");
return 0; return 0;
} }

View file

@ -3,12 +3,13 @@
#include <functional> #include <functional>
#include <fstream> #include <fstream>
#include <sstream> #include <sstream>
#include <utility>
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
using namespace std; using namespace std;
bool isFloat(string myString) { bool isFloat(const string &myString) {
istringstream iss(myString); istringstream iss(myString);
float f; float f;
iss >> noskipws >> f; // noskipws considers leading whitespace invalid iss >> noskipws >> f; // noskipws considers leading whitespace invalid
@ -16,7 +17,7 @@ bool isFloat(string myString) {
return iss.eof() && !iss.fail(); return iss.eof() && !iss.fail();
} }
bool isInt(string myString) { bool isInt(const string &myString) {
istringstream iss(myString); istringstream iss(myString);
int i; int i;
iss >> noskipws >> i; // noskipws considers leading whitespace invalid iss >> noskipws >> i; // noskipws considers leading whitespace invalid
@ -45,7 +46,7 @@ static inline void trim(string &s) {
Config::Config(string path) { Config::Config(string path) {
this->path = path; this->path = std::move(path);
} }
void Config::load() { void Config::load() {
@ -57,7 +58,7 @@ void Config::load() {
if (conf.is_open()) { if (conf.is_open()) {
string line; string line;
while (getline(conf, line)) { while (getline(conf, line)) {
int pos = line.find("="); unsigned int pos = line.find('=');
if (pos > 0) { if (pos > 0) {
string key = line.substr(0, pos); string key = line.substr(0, pos);
string value = line.substr(pos + 1, line.length()); string value = line.substr(pos + 1, line.length());
@ -182,5 +183,24 @@ bool Config::getBool(std::string key, bool defaultvalue) {
} }
Config::~Config() { Config::~Config() = default;
void Config::setString(std::string key, std::string value) {
deleteValue(key);
strings.insert(pair<string, string>{key, value});
}
void Config::setInt(std::string key, int value) {
deleteValue(key);
ints.insert(pair<string, int>{key, value});
}
void Config::setFloat(std::string key, float value) {
deleteValue(key);
floats.insert(pair<string, float>{key, value});
}
void Config::setBool(std::string key, bool value) {
deleteValue(key);
bools.insert(pair<string, bool>{key, value});
} }

View file

@ -17,6 +17,10 @@ public:
int getInt(std::string key, int defaultvalue); int getInt(std::string key, int defaultvalue);
float getFloat(std::string key, float defaultvalue); float getFloat(std::string key, float defaultvalue);
bool getBool(std::string key, bool defaultvalue); bool getBool(std::string key, bool defaultvalue);
void setString(std::string key, std::string value);
void setInt(std::string key, int value);
void setFloat(std::string key, float value);
void setBool(std::string key, bool value);
~Config(); ~Config();
}; };

View file

@ -8,6 +8,7 @@
BehaviourTree* gobtree = nullptr; BehaviourTree* gobtree = nullptr;
Goblin::Goblin(Tilemap* map, vec2i pos) : Actor(map, pos) { Goblin::Goblin(Tilemap* map, vec2i pos) : Actor(map, pos) {
name = "Goblin";
alive = true; alive = true;
health = 4; health = 4;
maxhealth = 4; maxhealth = 4;

View file

@ -9,6 +9,7 @@
#include "FleeNode.h" #include "FleeNode.h"
Hero::Hero(Tilemap* map, vec2i pos) : Actor(map, pos) { Hero::Hero(Tilemap* map, vec2i pos) : Actor(map, pos) {
name = "Hero";
alive = true; alive = true;
health = 6; health = 6;
maxhealth = 6; maxhealth = 6;

View file

@ -99,7 +99,7 @@ void PlayState::new_game() {
tilemap = new Tilemap(32, 32); tilemap = new Tilemap(32, 32);
int y = 0; int y = 0;
int x = 0; int x = 0;
for (int i = 0; i < map.length(); i++) { for (char i : map) {
if (y >= 32) { if (y >= 32) {
break; break;
@ -108,25 +108,25 @@ void PlayState::new_game() {
y++; y++;
x = 0; x = 0;
} }
if (map[i] == ' ' || map[i] == '\t' || map[i] == '\n') { if (i == ' ' || i == '\t' || i == '\n') {
continue; continue;
} }
if (map[i] == '@') { if (i == '@') {
hero = new Hero(tilemap, vec2i(x, y)); hero = new Hero(tilemap, vec2i(x, y));
tilemap->add_actor(hero); tilemap->add_actor(hero);
tilemap->set_tile(x, y, '.'); tilemap->set_tile(x, y, '.');
} }
else if (map[i] == 'g') { else if (i == 'g') {
tilemap->add_actor(new Goblin(tilemap, vec2i(x, y))); tilemap->add_actor(new Goblin(tilemap, vec2i(x, y)));
tilemap->set_tile(x, y, '.'); tilemap->set_tile(x, y, '.');
} }
else if (map[i] == 's') { else if (i == 's') {
tilemap->add_actor(new Shaman(tilemap, vec2i(x, y))); tilemap->add_actor(new Shaman(tilemap, vec2i(x, y)));
tilemap->set_tile(x, y, '.'); tilemap->set_tile(x, y, '.');
} }
else { else {
tilemap->set_tile(x, y, map[i]); tilemap->set_tile(x, y, i);
} }
x++; x++;
} }
@ -168,10 +168,13 @@ Gamestate *PlayState::update(double delta) {
} }
} }
} }
hero->update();
fov->calc(hero->get_position(), 6);
} }
auto actors = tilemap->get_actor_list(); auto actors = tilemap->get_actor_list();
for (Actor* var : *actors) { for (Actor* var : *actors) {
if (var == hero) continue;
var->update(); var->update();
} }
for (int i = (int)actors->size() - 1; i >= 0; i--) { for (int i = (int)actors->size() - 1; i >= 0; i--) {
@ -183,38 +186,57 @@ Gamestate *PlayState::update(double delta) {
actors->erase(actors->begin() + i); actors->erase(actors->begin() + i);
} }
} }
if (hero) {
fov->calc(hero->get_position(), 6);
}
action = ACTION_NONE; action = ACTION_NONE;
} }
return nullptr; return nullptr;
} }
bool debug_actors = false;
bool debug_settings = false;
void PlayState::draw(double delta) { void PlayState::draw(double delta) {
if (debug) { if (debug) {
bool wireframe = app->renderer->is_wireframes_enabled(); {
ImGui::Checkbox("Wireframes", &wireframe); ImGui::BeginMainMenuBar();
app->renderer->set_wireframes_enabled(wireframe);
bool vsync = app->renderer->is_vsync_enabled();
ImGui::Checkbox("VSync", &vsync);
app->renderer->set_vsync_enabled(vsync);
ImGui::BeginMainMenuBar(); if (ImGui::BeginMenu("View")) {
ImGui::MenuItem("Settings", nullptr, &debug_settings);
ImGui::MenuItem("Actors", nullptr, &debug_actors);
ImGui::EndMenu();
}
if (ImGui::BeginMenu("File")) { ImGui::EndMainMenuBar();
ImGui::EndMenu();
} }
if (debug_settings) {
ImGui::Begin("Settings", &debug_settings);
if (ImGui::BeginMenu("Edit")) { bool wireframe = app->renderer->is_wireframes_enabled();
ImGui::EndMenu(); ImGui::Checkbox("Wireframes", &wireframe);
app->renderer->set_wireframes_enabled(wireframe);
bool vsync = app->renderer->is_vsync_enabled();
ImGui::Checkbox("VSync", &vsync);
app->renderer->set_vsync_enabled(vsync);
ImGui::End();
} }
if (debug_actors) {
ImGui::Begin("Actors", &debug_actors);
if (ImGui::BeginMenu("View")) { auto actors = tilemap->get_actor_list();
ImGui::EndMenu(); const char* headers[] {
"id", "name", "health"
};
static float widths[3]{0.2f, 0.5f, 0.3f};
ImGui::BeginTable("ActorColumns", headers, widths, 3);
for (Actor* act : *actors) {
ImGui::Text("%d", act->id); ImGui::NextColumn();
ImGui::Text(act->name.c_str()); ImGui::NextColumn();
ImGui::Text("%d/%d", act->health, act->maxhealth); ImGui::NextColumn();
}
ImGui::EndTable();
ImGui::End();
} }
ImGui::EndMainMenuBar();
} }
vec2i asciisize = { vec2i asciisize = {

View file

@ -9,21 +9,22 @@
#include "imgui_impl_sdl_gl3.h" #include "imgui_impl_sdl_gl3.h"
#include <glm/gtx/transform.hpp> #include <glm/gtx/transform.hpp>
#include <glm/matrix.hpp> #include <glm/matrix.hpp>
#include <utility>
const GLfloat rectVertData[]{ const GLfloat rectVertData[]{
0,0,0, 1,0,0, 0,1,0, 1,1,0 0,0,0, 1,0,0, 0,1,0, 1,1,0
}; };
glm::mat4 screenVPmat; glm::mat4 screenVPmat;
float widthmult; double widthmult;
float heightmult; double heightmult;
GLuint LoadShader(const char* path, GLenum shadertype) { GLuint LoadShader(const char* path, GLenum shadertype) {
GLuint shaderId = glCreateShader(shadertype); GLuint shaderId = glCreateShader(shadertype);
std::string shadersource; std::string shadersource;
std::ifstream shaderstream(path, std::ios::in); std::ifstream shaderstream(path, std::ios::in);
if (shaderstream.is_open()) { if (shaderstream.is_open()) {
std::string line = ""; std::string line;
while (getline(shaderstream, line)) { while (getline(shaderstream, line)) {
shadersource += line + "\n"; shadersource += line + "\n";
} }
@ -105,8 +106,8 @@ Renderer::~Renderer() {
GLuint shaderProg; GLuint shaderProg;
GLuint wireShaderProg; GLuint wireShaderProg;
GLuint spriteVertArrayId; GLuint spriteVertArrayId;
GLuint colorUniform; GLint colorUniform;
GLuint mvpUniform; GLint mvpUniform;
bool Renderer::Init(std::string title, int width, int height) { bool Renderer::Init(std::string title, int width, int height) {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
@ -114,7 +115,7 @@ bool Renderer::Init(std::string title, int width, int height) {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
window = SDL_CreateWindow(title.data(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL); window = SDL_CreateWindow(title.data(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL /* | SDL_WINDOW_RESIZABLE */);
if (window == NULL) { if (window == NULL) {
SDL_LogCritical(SDL_LOG_CATEGORY_RENDER,"Failed to create a window!\n"); SDL_LogCritical(SDL_LOG_CATEGORY_RENDER,"Failed to create a window!\n");
return false; return false;
@ -164,7 +165,7 @@ bool Renderer::Init(std::string title, int width, int height) {
colorUniform = glGetUniformLocation(shaderProg, "colortint"); colorUniform = glGetUniformLocation(shaderProg, "colortint");
mvpUniform = glGetUniformLocation(shaderProg, "MVP"); mvpUniform = glGetUniformLocation(shaderProg, "MVP");
SetWindowSize(width, height); set_window_size(width, height);
SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "Renderer initialized.\n"); SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "Renderer initialized.\n");
return true; return true;
@ -174,35 +175,35 @@ void Renderer::set_color(float r, float g, float b, float a) {
currentcolor = { r, g, b, a }; currentcolor = { r, g, b, a };
} }
void Renderer::SetColor(Color col) { void Renderer::set_color(Color col) {
set_color(col.r, col.g, col.b, col.a); set_color(col.r, col.g, col.b, col.a);
} }
void Renderer::SetTitle(const char * title) { void Renderer::set_title(const char *title) {
SDL_SetWindowTitle(window, title); SDL_SetWindowTitle(window, title);
} }
void Renderer::SetWindowSize(int width, int height) { void Renderer::set_window_size(int width, int height) {
SDL_SetWindowSize(window, width, height); SDL_SetWindowSize(window, width, height);
windowwidth = width; windowwidth = width;
windowheight = height; windowheight = height;
widthmult = 1.f / windowwidth * 2; widthmult = 1. / windowwidth * 2;
heightmult = 1.f / windowheight * 2; heightmult = 1. / windowheight * 2;
glm::mat4 projection = glm::ortho(-1, 1, 1, -1); glm::mat4 projection = glm::ortho(-1, 1, 1, -1);
glm::mat4 view = glm::scale(glm::vec3(widthmult, heightmult, 1)) * glm::translate(glm::vec3(-windowwidth / 2, -windowheight / 2, 0)) * glm::mat4(1); glm::mat4 view = glm::scale(glm::vec3(widthmult, heightmult, 1)) * glm::translate(glm::vec3(-windowwidth / 2, -windowheight / 2, 0)) * glm::mat4(1);
screenVPmat = projection * view; screenVPmat = projection * view;
SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "Window size set to %dx%d.\n", width, height); SDL_LogDebug(SDL_LOG_CATEGORY_RENDER, "Window size set to %dx%d.\n", windowwidth, windowheight);
} }
void Renderer::SetClearColor(float r, float g, float b, float a) { void Renderer::set_clear_color(float r, float g, float b, float a) {
glClearColor(r, g, b, a); glClearColor(r, g, b, a);
} }
void Renderer::SetClearColor(Color col) { void Renderer::set_clear_color(Color col) {
glClearColor(col.r, col.g, col.b, col.a); glClearColor(col.r, col.g, col.b, col.a);
} }
@ -265,7 +266,7 @@ Texture * Renderer::LoadTexture(std::string path) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Texture t; Texture t{};
t.id = textureId; t.id = textureId;
t.w = surface->w; t.w = surface->w;
t.h = surface->h; t.h = surface->h;
@ -294,10 +295,10 @@ Sprite Renderer::CreateSprite(std::string path, int x, int y, int w, int h) {
sprite.region.y = y; sprite.region.y = y;
sprite.region.w = w; sprite.region.w = w;
sprite.region.h = h; sprite.region.h = h;
sprite.texture = LoadTexture(path); sprite.texture = LoadTexture(std::move(path));
if (sprite.texture != nullptr) { if (sprite.texture != nullptr) {
float tw = (float)sprite.texture->w; auto tw = (float)sprite.texture->w;
float th = (float)sprite.texture->h; auto th = (float)sprite.texture->h;
const float uvs[] = { const float uvs[] = {
x / tw, y / th, x / tw, y / th,
(x + w) / tw, y / th, (x + w) / tw, y / th,
@ -319,7 +320,6 @@ void Renderer::draw_sprite(Sprite *sprite, int x, int y, float sx, float sy) {
glm::mat4 model = glm::translate(glm::vec3(x, y, 0)) * glm::scale(glm::vec3(sprite->region.w * sx, sprite->region.h * sy, 1)) * glm::mat4(1); glm::mat4 model = glm::translate(glm::vec3(x, y, 0)) * glm::scale(glm::vec3(sprite->region.w * sx, sprite->region.h * sy, 1)) * glm::mat4(1);
glm::mat4 mvp = screenVPmat * model; glm::mat4 mvp = screenVPmat * model;
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
@ -337,9 +337,9 @@ void Renderer::draw_sprite(Sprite *sprite, int x, int y, float sx, float sy) {
glEnableVertexAttribArray(0); glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1); glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, spriteVBuf); glBindBuffer(GL_ARRAY_BUFFER, spriteVBuf);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
glBindBuffer(GL_ARRAY_BUFFER, sprite->uvBuf); glBindBuffer(GL_ARRAY_BUFFER, sprite->uvBuf);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, nullptr);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
@ -353,9 +353,9 @@ void Renderer::draw_sprite(Sprite *sprite, int x, int y, float sx, float sy) {
glEnableVertexAttribArray(0); glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1); glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, spriteVBuf); glBindBuffer(GL_ARRAY_BUFFER, spriteVBuf);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
glBindBuffer(GL_ARRAY_BUFFER, sprite->uvBuf); glBindBuffer(GL_ARRAY_BUFFER, sprite->uvBuf);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, nullptr);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
} }

View file

@ -47,11 +47,11 @@ public:
~Renderer(); ~Renderer();
bool Init(std::string title, int width, int height); bool Init(std::string title, int width, int height);
void set_color(float r, float g, float b, float a); void set_color(float r, float g, float b, float a);
void SetColor(Color col); void set_color(Color col);
void SetTitle(const char* title); void set_title(const char *title);
void SetWindowSize(int width, int height); void set_window_size(int width, int height);
void SetClearColor(float r, float g, float b, float a); void set_clear_color(float r, float g, float b, float a);
void SetClearColor(Color col); void set_clear_color(Color col);
void set_vsync_enabled(bool enabled); void set_vsync_enabled(bool enabled);
bool is_vsync_enabled(); bool is_vsync_enabled();
void set_wireframes_enabled(bool enabled); void set_wireframes_enabled(bool enabled);

View file

@ -12,6 +12,7 @@
BehaviourTree* shamtree = nullptr; BehaviourTree* shamtree = nullptr;
Shaman::Shaman(Tilemap* map, vec2i pos) : Actor(map, pos) { Shaman::Shaman(Tilemap* map, vec2i pos) : Actor(map, pos) {
name = "Shaman";
alive = true; alive = true;
health = 2; health = 2;
maxhealth = 2; maxhealth = 2;

View file

@ -14,7 +14,7 @@
//#define IMGUI_API __declspec( dllimport ) //#define IMGUI_API __declspec( dllimport )
//---- Include imgui_user.h at the end of imgui.h //---- Include imgui_user.h at the end of imgui.h
//#define IMGUI_INCLUDE_IMGUI_USER_H #define IMGUI_INCLUDE_IMGUI_USER_H
//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) //---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions)
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS

72
src/imgui_user.cpp Normal file
View file

@ -0,0 +1,72 @@
//
// Created by Adrian on 2017-09-23.
//
#include <cstdio>
#include "imgui.h"
namespace ImGui {
int BeginTable(const char* columnsId, const char** headers, float* widths, int count, bool draw_border)
{
if(count<=0)
return 0;
// Draw column headers
ImGuiStyle & style = ImGui::GetStyle();
const ImVec2 firstTextSize = ImGui::CalcTextSize(headers[0], NULL, true);
ImGui::BeginChild(columnsId, ImVec2(0,firstTextSize.y + 2 * style.ItemSpacing.y), true);
char str_id[256];
sprintf(str_id, "tbl0_%s", columnsId);
ImGui::Columns(count, str_id, draw_border);
float offset = 0.0f;
for(int i=0; i < count; i++)
{
ImGui::SetColumnOffset(i, offset);
if(widths[i] <= 0)
{
const ImVec2 textsize = ImGui::CalcTextSize(headers[i], NULL, true);
const float colSizeX = (textsize.x + 2 * style.ItemSpacing.x);
widths[i] = colSizeX + 1;
}
if(i < (count-1))
{
float curOffset = offset;
offset = ImGui::GetColumnOffset(i+1);
widths[i] = offset - curOffset + 1;
}
ImGui::Text(headers[i]);
ImGui::NextColumn();
}
ImGui::Columns(1);
ImGui::EndChild();
// Draw body
str_id[3] = '1';
columnsId = str_id;
ImGui::BeginChild(columnsId, ImVec2(0,0), true);
ImGui::Columns(count, columnsId, draw_border);
offset = 0.0f;
for(int i=0; i < count; i++)
{
ImGui::SetColumnOffset(i, offset);
offset += widths[i] - 1;
}
return 1;
}
void EndTable()
{
ImGui::Columns(1);
ImGui::EndChild();
}
}

31
src/imgui_user.h Normal file
View file

@ -0,0 +1,31 @@
//
// Created by Adrian on 2017-09-23.
//
#ifndef DUNGEON_IMGUI_USER_H
#define DUNGEON_IMGUI_USER_H
namespace ImGui {
/* // [table src] https://github.com/ocornut/imgui/issues/513#issuecomment-240388455
// Usage:
static const char *headers[] = {
"Index", "Color", "Flip?", "Filename"
};
static float widths[ IM_ARRAYSIZE(headers) ] = {};
if( ImGui::BeginTable("WinTextureContent", headers, widths, IM_ARRAYSIZE(headers)) ) {
// Draw as many rows as needed
for( int i = 0; i < 10; ++i ) {
ImGui::Text("%d", i); ImGui::NextColumn();
ImGui::ColorButton( ImVec4(0.5f,0.2f,i*0.3f,1.f)); ImGui::NextColumn();
ImGui::Text("%s", i % 2 ? "yes" : "no"); ImGui::NextColumn();
ImGui::Text(__FILE__); ImGui::NextColumn();
}
ImGui::EndTable();
}
*/
int BeginTable(const char* columnsId, const char** headers, float *widths, int count, bool border=true);
void EndTable();
}
#endif //DUNGEON_IMGUI_USER_H