fix root lookup; add vec2 to json types; render test image when window is created

This commit is contained in:
Frank DeMarco 2020-08-21 02:21:34 -04:00
parent bab8c778ca
commit 14afcef0ce
7 changed files with 54 additions and 17 deletions

View File

@ -12,7 +12,8 @@
changed, gradients, level select code input, logging, variable screen
resolution, debug display, loading wheel animation, shadowed sprite, separate
update and draw, sprite movement cage, multiple windows, multiple renderers,
node children list, node animations list
node children list, node animations list, copy constructor for node, private
and public class members
:) SWEATY HANDS :) OILY SNACKS :) AND BAD HYGIENE :)

View File

@ -14,7 +14,7 @@ struct Color
std::uint8_t r, g, b, a;
Color();
Color(std::uint8_t, std::uint8_t, std::uint8_t, std::uint8_t);
Color(std::uint8_t, std::uint8_t, std::uint8_t, std::uint8_t = 255);
Color(const SDL_Color&);
void set_rgb_float(const float&, const float&, const float&);
void set_hsv(const float&, const float& = 1.0f, const float& = 1.0f);

View File

@ -42,7 +42,9 @@ void Configuration::set_defaults()
{"dimensions", {640, 480}},
{"framerate", 60},
{"title", "sfw"},
{"debug", false}
{"debug", false},
{"show-cursor", false},
{"render-test-spacing", 2}
};
sys_config["recording"] = {
{"enabled", false},

View File

@ -44,7 +44,7 @@ void FramerateIndicator::refresh()
}
}
Game::Game() : Node()
Game::Game()
{
frame_length_history.reserve(5000);
set_framerate(get_configuration()["display"]["framerate"]);
@ -75,16 +75,37 @@ Game::Game() : Node()
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
print_gl_attributes();
std::vector<int> window_size = get_configuration()["display"]["dimensions"];
auto window_size = get_configuration()["display"]["dimensions"].get<glm::ivec2>();
window = SDL_CreateWindow(
get_configuration()["display"]["title"].get_ref<const std::string&>().c_str(), SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, window_size[0], window_size[1], SDL_WINDOW_OPENGL);
SDL_WINDOWPOS_CENTERED, window_size.x, window_size.y, SDL_WINDOW_OPENGL);
if (window == NULL)
{
print_sdl_error("Could not create window");
flag_to_end();
}
SDL_ShowCursor(0);
if ((renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE)) == NULL)
{
print_sdl_error("Could not create renderer");
flag_to_end();
}
else
{
SDL_SetRenderTarget(renderer, NULL);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
int step = get_configuration()["display"]["render-test-spacing"];
for (int x = 0, r = 1, g = 0, b = 2; x < window_size.x; x += step)
{
SDL_SetRenderDrawColor(renderer, (r++ % 3 == 0) * 255, (g++ % 3 == 0) * 255, (b++ % 3 == 0) * 255, 255);
const SDL_Rect rect = {x, 0, step, window_size.y};
SDL_RenderFillRect(renderer, &rect);
}
SDL_RenderPresent(renderer);
SDL_RenderFlush(renderer);
SDL_DestroyRenderer(renderer);
}
SDL_ShowCursor(get_configuration()["display"]["show-cursor"]);
if (TTF_Init() < 0)
{
print_sdl_error("Could not initialize SDL ttf");

View File

@ -13,23 +13,19 @@
#define GL_GLEXT_PROTOTYPES
#define GLEW_STATIC
#if defined(__EMSCRIPTEN__)
#include <emscripten.h>
#include <emscripten/html5.h>
#include <GL/glew.h>
#else
#include "glew/glew.h"
#endif
#include "Node.hpp"
#include "Input.hpp"
#include "Recorder.hpp"
#include "Sprite.hpp"
#include "extension.hpp"
struct FramerateIndicator : Sprite
{

View File

@ -3,7 +3,7 @@
Node::Node() : Node(NULL) {}
Node::Node(Node *parent) : parent(parent)
Node::Node(Node* parent) : parent(parent)
{
std::cout << "Constructing ";
print_branch();
@ -61,12 +61,12 @@ const Input& Node::get_input() const
const Game* Node::get_root() const
{
const Node* root = this;
while (root->parent != NULL)
const Node* r = this;
while (r->parent != NULL)
{
root = parent;
r = r->parent;
}
return dynamic_cast<const Game*>(root);
return dynamic_cast<const Game*>(r);
}
Box Node::get_window_box()

View File

@ -18,6 +18,7 @@
#include "glm/trigonometric.hpp"
#include "glm/vec2.hpp"
#include "glm/gtx/vector_angle.hpp"
#include "json/json.hpp"
#include "Box.hpp"
#include "Segment.hpp"
@ -158,6 +159,22 @@ bool operator<(const SDL_Color& color_1, const SDL_Color& color_2);
bool operator==(const SDL_Color& color_1, const SDL_Color& color_2);
std::ostream& operator<<(std::ostream&, const SDL_Color&);
namespace glm
{
template <typename T>
void to_json(nlohmann::json& j, const vec<2, T, defaultp>& v)
{
j = nlohmann::json{{"x", v.x}, {"y", v.y}};
}
template <typename T>
void from_json(const nlohmann::json& j, vec<2, T, defaultp>& v)
{
j.at(0).get_to(v.x);
j.at(1).get_to(v.y);
}
}
#include "Node.hpp"
#endif