commit 172ff70c
Switch scaling method
Changed files
| M | src/saland.cpp before |
| M | src/saland/GameDraw.cpp before |
diff --git a/src/saland.cpp b/src/saland.cpp
index b4567b7..8e573a6 100644
--- a/src/saland.cpp
+++ b/src/saland.cpp
@@ -221,11 +221,7 @@ void RunGameState(sago::GameStateInterface& state ) {
ImGui::Render();
ImGuiIO& io = ImGui::GetIO();
io.IniFilename = NULL;
- //float x, y;
- //SDL_RenderGetScale(globalData.screen, &x, &y);
- //SDL_RenderSetScale(globalData.screen, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
ImGui_ImplSDLRenderer2_RenderDrawData( ImGui::GetDrawData(), globalData.screen );
- //SDL_RenderSetScale(globalData.screen, x, y);
//While using Dear ImGui we do not draw the mouse ourself. This is gone: globalData.mouse.Draw(globalData.screen, SDL_GetTicks(), globalData.mousex, globalData.mousey);
SDL_RenderPresent(globalData.screen);
@@ -243,7 +239,7 @@ void RunGameState(sago::GameStateInterface& state ) {
if (event.type == SDL_WINDOWEVENT) {
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
std::cout << event.window.data1 << ", " << event.window.data2 << "\n";
- //SDL_GetRendererOutputSize(globalData.screen, &globalData.xsize, &globalData.ysize);
+ SDL_GetRendererOutputSize(globalData.screen, &globalData.xsize, &globalData.ysize);
}
}
@@ -436,7 +432,7 @@ void runGame() {
win = SDL_CreateWindow("Saland Adventures", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, globalData.xsize, globalData.ysize, SDL_WINDOW_RESIZABLE);
globalData.screen = SDL_CreateRenderer(win, -1, rendererFlags);
- SDL_RenderSetLogicalSize(globalData.screen, globalData.xsize, globalData.ysize);
+ //SDL_RenderSetLogicalSize(globalData.screen, globalData.xsize, globalData.ysize);
InitImGui(win, globalData.screen, globalData.xsize, globalData.ysize);
globalData.ysize = globalData.ysize;
diff --git a/src/saland/GameDraw.cpp b/src/saland/GameDraw.cpp
index 55388f2..2efe430 100644
--- a/src/saland/GameDraw.cpp
+++ b/src/saland/GameDraw.cpp
@@ -50,22 +50,33 @@ sago::SagoTextField* TextCache::getLabel(const std::string& text) {
TextCache textCache;
+static float scale = 1.0f;
+
+static int getScaledX(int x) {
+ return x * scale;
+}
+static int getScaledY(int y) {
+ return y * scale;
+}
static void Draw(SDL_Renderer* target, SDL_Texture* t, int x, int y, const SDL_Rect& part) {
SDL_Rect pos = {};
- pos.x = x;
- pos.y = y;
- pos.w = 32;
- pos.h = 32;
+ pos.x = getScaledX(x);
+ pos.y = getScaledY(y);
+ pos.w = getScaledX(32+x)-pos.x;
+ pos.h = getScaledY(32+y)-pos.y;
SDL_RenderCopy(target, t, &part, &pos);
}
static void DrawCollision(SDL_Renderer* target, const Placeable* entity, int offsetX, int offsetY, bool drawCollision) {
if (drawCollision) {
+ int x = getScaledX(entity->X - offsetX);
+ int y = getScaledY(entity->Y - offsetY);
+ int r = getScaledX(entity->Radius);
circleRGBA(target,
- entity->X - offsetX, entity->Y - offsetY, entity->Radius,
+ x, y, r,
255, 255, 0, 255);
- textCache.getLabel(entity->id)->Draw(target, entity->X - offsetX + entity->Radius + 4, entity->Y - offsetY, sago::SagoTextField::Alignment::left, sago::SagoTextField::VerticalAlignment::center);
+ textCache.getLabel(entity->id)->Draw(target, x + r + 4, y, sago::SagoTextField::Alignment::left, sago::SagoTextField::VerticalAlignment::center);
}
}
@@ -170,30 +181,32 @@ void DrawHumanEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, cons
relativeAnimation = true;
relativeAnimationState = 0.9f;
}
+ int x = getScaledX(std::round(entity->X) - offsetX);
+ int y = getScaledY(std::round(entity->Y) - offsetY);
DrawCollision(target, entity, offsetX, offsetY, drawCollision);
const sago::SagoSprite& mySprite = sHolder->GetSprite(entity->race + "_" + animation + "_" + std::string(1, entity->direction));
if (relativeAnimation) {
- mySprite.DrawProgressive(target, relativeAnimationState, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ mySprite.DrawProgressive(target, relativeAnimationState, x, y);
}
else {
- mySprite.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ mySprite.Draw(target, time, x, y);
}
if (entity->pants.length() > 0) {
const sago::SagoSprite& myPants = sHolder->GetSprite(entity->race + "_"+animation+"_"+entity->pants+"_"+std::string(1,entity->direction));
if (relativeAnimation) {
- myPants.DrawProgressive(target, relativeAnimationState, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myPants.DrawProgressive(target, relativeAnimationState, x, y);
}
else {
- myPants.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myPants.Draw(target, time, x, y);
}
}
if (entity->top.length() > 0) {
const sago::SagoSprite& myTop = sHolder->GetSprite(entity->race + "_"+animation+"_"+entity->top+"_"+std::string(1,entity->direction));
if (relativeAnimation) {
- myTop.DrawProgressive(target, relativeAnimationState, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myTop.DrawProgressive(target, relativeAnimationState, x, y);
}
else {
- myTop.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myTop.Draw(target, time, x, y);
}
}
if (entity->hair.length() > 0) {
@@ -203,19 +216,19 @@ void DrawHumanEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, cons
}
const sago::SagoSprite& myHair = sHolder->GetSprite(entity->race + "_"+hairAnimation+"_"+entity->hair+"_"+std::string(1,entity->direction));
if (relativeAnimation) {
- myHair.DrawProgressive(target, relativeAnimationState, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myHair.DrawProgressive(target, relativeAnimationState, x, y);
}
else {
- myHair.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myHair.Draw(target, time, x, y);
}
}
if (entity->weapon.length() > 0) {
const sago::SagoSprite& myWeapon = sHolder->GetSprite("human_"+animation+"_"+entity->weapon+"_"+std::string(1,entity->direction));
if (relativeAnimation) {
- myWeapon.DrawProgressive(target, relativeAnimationState, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myWeapon.DrawProgressive(target, relativeAnimationState, x, y);
}
else {
- myWeapon.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ myWeapon.Draw(target, time, x, y);
}
}
}