From 8ffb27ab09ff567a159e5be5a243fd3967084977 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sun, 3 Feb 2019 16:10:44 -0500 Subject: Very basic ECS --- src/renderer.cpp | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/renderer.cpp (limited to 'src/renderer.cpp') diff --git a/src/renderer.cpp b/src/renderer.cpp new file mode 100644 index 0000000..2916dd6 --- /dev/null +++ b/src/renderer.cpp @@ -0,0 +1,97 @@ +#include "renderer.h" +#include "simulation.h" +#include "consts.h" +#include "level.h" + +Renderer::Renderer() +{ + win_ = window_ptr( + SDL_CreateWindow( + "dispatcher", + 100, + 100, + WINDOW_SIZE.w(), + WINDOW_SIZE.h(), + SDL_WINDOW_SHOWN)); + + if (!win_) + { + throw sdl_error(); + } + + ren_ = renderer_ptr( + SDL_CreateRenderer( + win_.get(), + -1, + SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC)); + + if (!ren_) + { + throw sdl_error(); + } + + SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_MOD); + SDL_SetRenderDrawColor(ren_.get(), 255, 150, 255, 255); + SDL_RenderFillRect(ren_.get(), nullptr); +} + +void Renderer::render(const Simulation& sim) +{ + texture_ptr canvas( + SDL_CreateTexture( + ren_.get(), + SDL_PIXELFORMAT_RGBA8888, + SDL_TEXTUREACCESS_TARGET, + WINDOW_SIZE.w(), + WINDOW_SIZE.h())); + + if (!canvas) + { + throw sdl_error(); + } + + SDL_SetRenderTarget(ren_.get(), nullptr); + SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(ren_.get(), 255, 150, rand() % 255, 255); + SDL_RenderClear(ren_.get()); + + const Level& level = sim.getLevel(); + + for (size_t y = 0; y < level.getSize().h(); y++) + { + for (size_t x = 0; x < level.getSize().w(); x++) + { + int val = level.at(x, y) * 10; + + SDL_SetRenderDrawColor(ren_.get(), val, val, 0, 255); + + SDL_Rect rect { + static_cast(x * TILE_SIZE.w()), + static_cast(y * TILE_SIZE.h()), + TILE_SIZE.w(), + TILE_SIZE.h() + }; + + SDL_RenderFillRect(ren_.get(), &rect); + } + } + + for (Simulation::id_type id : sim.getActive()) + { + const Entity& entity = sim.getEntity(id); + + SDL_SetRenderDrawColor(ren_.get(), 100, 100, 100, 255); + + SDL_Rect rect { + static_cast(entity.pos.x()), + static_cast(entity.pos.y()), + static_cast(entity.size.w()), + static_cast(entity.size.h()) + }; + + SDL_RenderFillRect(ren_.get(), &rect); + } + + //SDL_RenderCopy(ren_.get(), canvas.get(), nullptr, nullptr); + SDL_RenderPresent(ren_.get()); +} -- cgit 1.4.1