struct RenderCamera { | struct RenderCamera { | ||||
SwanCommon::Vec2 pos; | SwanCommon::Vec2 pos; | ||||
SwanCommon::Vec2i size; | |||||
float zoom; | float zoom; | ||||
}; | }; | ||||
#pragma once | #pragma once | ||||
#include <swan-common/Vector2.h> | |||||
#include <memory> | #include <memory> | ||||
namespace Cygnet { | namespace Cygnet { | ||||
void clear(); | void clear(); | ||||
void flip(); | void flip(); | ||||
void onResize(int w, int h); | void onResize(int w, int h); | ||||
SwanCommon::Vec2i size() { return { w_, h_ }; } | |||||
private: | private: | ||||
std::unique_ptr<WindowState> state_; | std::unique_ptr<WindowState> state_; |
void Renderer::draw(const RenderCamera &cam) { | void Renderer::draw(const RenderCamera &cam) { | ||||
Mat3gf camMat; | Mat3gf camMat; | ||||
camMat.translate(cam.pos.scale(-1, 1) * cam.zoom); // TODO: Change something to make this -cam.pos | camMat.translate(cam.pos.scale(-1, 1) * cam.zoom); // TODO: Change something to make this -cam.pos | ||||
camMat.scale({ cam.zoom, cam.zoom }); | |||||
camMat.scale({ cam.zoom * ((float)cam.size.y / (float)cam.size.x), cam.zoom }); | |||||
auto &chunkProg = state_->chunkProg; | auto &chunkProg = state_->chunkProg; | ||||
chunkProg.enable(); | chunkProg.enable(); |
Cygnet::RenderCamera cam = { | Cygnet::RenderCamera cam = { | ||||
.pos = { 0, 0 }, | .pos = { 0, 0 }, | ||||
.size = win.size(), | |||||
.zoom = 1, | .zoom = 1, | ||||
}; | }; | ||||
switch (evt.window.event) { | switch (evt.window.event) { | ||||
case SDL_WINDOWEVENT_SIZE_CHANGED: | case SDL_WINDOWEVENT_SIZE_CHANGED: | ||||
win.onResize(evt.window.data1, evt.window.data2); | win.onResize(evt.window.data1, evt.window.data2); | ||||
cam.size = win.size(); | |||||
break; | break; | ||||
} | } | ||||
break; | break; |