git repos / saland

commit 2e368f08

Poul Sander · 2025-11-18 21:35
2e368f0844c45eeb090495ab537f6e0c82772fb6 patch · browse files
parent fb952d0a37f61d731a42b53cab101f980deed107

Resize. Still needs some letterboxing.

Changed files

M src/saland.cpp before
M src/saland/Game.cpp before
M src/saland/GameDraw.cpp before
M src/saland/GameDraw.hpp before
M src/saland/globals.hpp before
diff --git a/src/saland.cpp b/src/saland.cpp index 07dc8a0..6759c33 100644 --- a/src/saland.cpp +++ b/src/saland.cpp
@@ -214,6 +214,10 @@ void RunGameState(sago::GameStateInterface& state ) {
}
SDL_SetRenderDrawColor(globalData.screen, 0, 0, 0, 0);
SDL_RenderClear(globalData.screen);
+ int w=1;
+ int h=1;
+ SDL_GetRendererOutputSize(globalData.screen, &w, &h);
+ globalData.logicalResize.SetPhysicalSize(w, h);
ImGui_ImplSDLRenderer2_NewFrame();
ImGui_ImplSDL2_NewFrame();
ImGui::NewFrame();
@@ -443,7 +447,7 @@ void runGame() {
std::string imgui_inifile = getPathToSaveFiles() + "/imgui.ini";
ImGui::LoadIniSettingsFromDisk(imgui_inifile.c_str());
- globalData.ysize = globalData.ysize;
+ globalData.logicalResize = sago::SagoLogicalResize(1280, 720);
sago::SagoDataHolder holder(globalData.screen);
globalData.spriteHolder.reset(new sago::SagoSpriteHolder(holder));
diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index a2624d6..3809ec8 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp
@@ -360,8 +360,9 @@ static void DrawDebugMenu(SDL_Renderer* target) {
}
void Game::Draw(SDL_Renderer* target) {
- double screen_width = globalData.xsize;
- double screen_height = globalData.ysize;
+ // Use logical coordinates for game rendering (1920x1080 as set in main)
+ double screen_width = 1280;
+ double screen_height = 720;
int screen_boarder = 64;
data->topx = std::round(data->center_x - screen_width / 2.0);
data->topy = std::round(data->center_y - screen_height / 2.0);
@@ -379,45 +380,48 @@ void Game::Draw(SDL_Renderer* target) {
}
std::sort(data->gameRegion.placeables.begin(), data->gameRegion.placeables.end(),sort_placeable);
SDL_Texture* texture = globalData.spriteHolder->GetDataHolder().getTexturePtr("terrain");
- DrawOuterBorder(target, texture, data->gameRegion.world.tm, data->topx, data->topy, data->gameRegion.outerTile);
+ DrawOuterBorder(target, texture, data->gameRegion.world.tm, data->topx, data->topy, data->gameRegion.outerTile, &globalData.logicalResize);
for (size_t i = 0; i < data->gameRegion.world.tm.layers.size(); ++i) {
if (std::string(data->gameRegion.world.tm.layers.at(i).name).find("overlay",0) == std::string::npos ) {
- DrawLayer(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, i, data->topx, data->topy);
+ DrawLayer(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, i, data->topx, data->topy, &globalData.logicalResize);
}
}
for (size_t i = 0; i < data->gameRegion.world.tm.object_groups.size(); ++i) {
- DrawOjbectGroup(target, data->gameRegion.world.tm, i, data->topx, data->topy);
+ DrawOjbectGroup(target, data->gameRegion.world.tm, i, data->topx, data->topy, &globalData.logicalResize);
}
if (data->world_mouse_x >= 0 && data->world_mouse_y >= 0) {
int mousebox_x = data->world_mouse_x - data->world_mouse_x % 32 - data->topx;
int mousebox_y = data->world_mouse_y - data->world_mouse_y % 32 - data->topy;
if (data->spell_holder->slot_spell.at(data->spell_holder->slot_selected).type == SpellCursorType::tile) {
- rectangleRGBA(globalData.screen, mousebox_x, mousebox_y,
- mousebox_x + 32, mousebox_y + 32, 255, 255, 0, 255);
+ int phys_x1 = mousebox_x, phys_y1 = mousebox_y;
+ int phys_x2 = mousebox_x + 32, phys_y2 = mousebox_y + 32;
+ globalData.logicalResize.LogicalToPhysical(&phys_x1, &phys_y1);
+ globalData.logicalResize.LogicalToPhysical(&phys_x2, &phys_y2);
+ rectangleRGBA(globalData.screen, phys_x1, phys_y1, phys_x2, phys_y2, 255, 255, 0, 255);
}
}
//Draw
for (const auto& p : data->gameRegion.placeables) {
MiscItem* m = dynamic_cast<MiscItem*> (p.get());
if (m) {
- DrawMiscEntity(target, globalData.spriteHolder.get(), m, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision);
+ DrawMiscEntity(target, globalData.spriteHolder.get(), m, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision, &globalData.logicalResize);
}
Human* h = dynamic_cast<Human*> (p.get());
if (h) {
- DrawHumanEntity(target, globalData.spriteHolder.get(), h, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision);
+ DrawHumanEntity(target, globalData.spriteHolder.get(), h, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision, &globalData.logicalResize);
}
Monster* monster = dynamic_cast<Monster*> (p.get());
if (monster) {
- DrawMonster(target, globalData.spriteHolder.get(), monster, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision);
+ DrawMonster(target, globalData.spriteHolder.get(), monster, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision, &globalData.logicalResize);
}
Projectile* projectile = dynamic_cast<Projectile*> (p.get());
if (projectile) {
- DrawProjectile(target, globalData.spriteHolder.get(), projectile, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision);
+ DrawProjectile(target, globalData.spriteHolder.get(), projectile, SDL_GetTicks(), data->topx, data->topy, globalData.debugDrawCollision, &globalData.logicalResize);
}
}
for (size_t i = 0; i < data->gameRegion.world.tm.layers.size(); ++i) {
if (std::string(data->gameRegion.world.tm.layers.at(i).name).find("overlay",0) != std::string::npos ) {
- DrawLayer(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, i, data->topx, data->topy);
+ DrawLayer(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, i, data->topx, data->topy, &globalData.logicalResize);
}
}
if (data->world_mouse_x >= 0 && data->world_mouse_y >= 0) {
@@ -428,8 +432,8 @@ void Game::Draw(SDL_Renderer* target) {
else {
data->bottomField.SetText("outside world");
}
- data->bottomField.Draw(target, 2, screen_height, sago::SagoTextField::Alignment::left, sago::SagoTextField::VerticalAlignment::bottom);
- data->middleField.Draw(target, screen_width/2, screen_height/4, sago::SagoTextField::Alignment::center, sago::SagoTextField::VerticalAlignment::bottom);
+ data->bottomField.Draw(target, 2, screen_height, sago::SagoTextField::Alignment::left, sago::SagoTextField::VerticalAlignment::bottom, &globalData.logicalResize);
+ data->middleField.Draw(target, screen_width/2, screen_height/4, sago::SagoTextField::Alignment::center, sago::SagoTextField::VerticalAlignment::bottom, &globalData.logicalResize);
data->spellSelect->Draw(target);
if (data->consoleActive && data->console) {
@@ -454,7 +458,7 @@ void Game::Draw(SDL_Renderer* target) {
Ticks = SDL_GetTicks();
}
fpsField.SetText(FPS);
- fpsField.Draw(globalData.screen, globalData.xsize-4, 4, sago::SagoTextField::Alignment::right);
+ fpsField.Draw(globalData.screen, 1920-4, 4, sago::SagoTextField::Alignment::right, sago::SagoTextField::VerticalAlignment::top, &globalData.logicalResize);
//#endif
}
@@ -633,8 +637,11 @@ void Game::Update() {
int mousex;
int mousey;
SDL_GetMouseState(&mousex, &mousey);
- data->world_mouse_x = data->topx + mousex;
- data->world_mouse_y = data->topy + mousey;
+ // Convert physical mouse coordinates to logical coordinates
+ int logical_mousex, logical_mousey;
+ globalData.logicalResize.PhysicalToLogical(mousex, mousey, logical_mousex, logical_mousey);
+ data->world_mouse_x = data->topx + logical_mousex;
+ data->world_mouse_y = data->topy + logical_mousey;
//std::cout << "world x: " << data->world_mouse_x << ", y: " << data->world_mouse_y << " \r";
data->lastUpdate = nowTime;
data->gameRegion.physicsBox->Step(deltaTime / 1000.0f / 60.0f, velocityIterations, positionIterations);
diff --git a/src/saland/GameDraw.cpp b/src/saland/GameDraw.cpp index 2efe430..3806000 100644 --- a/src/saland/GameDraw.cpp +++ b/src/saland/GameDraw.cpp
@@ -50,45 +50,46 @@ 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) {
+static void Draw(SDL_Renderer* target, SDL_Texture* t, int x, int y, const SDL_Rect& part, sago::SagoLogicalResize* resize = nullptr) {
SDL_Rect pos = {};
- pos.x = getScaledX(x);
- pos.y = getScaledY(y);
- pos.w = getScaledX(32+x)-pos.x;
- pos.h = getScaledY(32+y)-pos.y;
+ pos.x = x;
+ pos.y = y;
+ pos.w = 32;
+ pos.h = 32;
+ if (resize) {
+ resize->LogicalToPhysical(pos);
+ }
SDL_RenderCopy(target, t, &part, &pos);
}
-static void DrawCollision(SDL_Renderer* target, const Placeable* entity, int offsetX, int offsetY, bool drawCollision) {
+static void DrawCollision(SDL_Renderer* target, const Placeable* entity, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize = nullptr) {
if (drawCollision) {
- int x = getScaledX(entity->X - offsetX);
- int y = getScaledY(entity->Y - offsetY);
- int r = getScaledX(entity->Radius);
+ int x = entity->X - offsetX;
+ int y = entity->Y - offsetY;
+ int r = entity->Radius;
+ if (resize) {
+ resize->LogicalToPhysical(&x, &y);
+ int temp_r = r;
+ resize->LogicalToPhysical(&temp_r, nullptr);
+ r = temp_r;
+ }
circleRGBA(target,
x, y, r,
255, 255, 0, 255);
- textCache.getLabel(entity->id)->Draw(target, x + r + 4, y, 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, resize);
}
}
-void DrawOuterBorder(SDL_Renderer* renderer, SDL_Texture* texture, const sago::tiled::TileMap& tm, int topx, int topy, uint32 outerTile) {
+void DrawOuterBorder(SDL_Renderer* renderer, SDL_Texture* texture, const sago::tiled::TileMap& tm, int topx, int topy, uint32 outerTile, sago::SagoLogicalResize* resize) {
for (int i = -1; i < tm.width + 1; ++i) {
if (i >= tm.width/2-5 && i < tm.width/2+5) {
continue;
}
SDL_Rect part{};
getTextureLocationFromGid(tm, outerTile, nullptr, &part.x, &part.y, &part.w, &part.h);
- Draw(renderer, texture, 32 * i - topx, -32 - topy, part);
- Draw(renderer, texture, 32 * i - topx, 32 * tm.height - topy, part);
+ Draw(renderer, texture, 32 * i - topx, -32 - topy, part, resize);
+ Draw(renderer, texture, 32 * i - topx, 32 * tm.height - topy, part, resize);
}
for (int i = 0; i < tm.height; ++i) {
if (i >= tm.height/2-5 && i < tm.height/2+5) {
@@ -96,22 +97,22 @@ void DrawOuterBorder(SDL_Renderer* renderer, SDL_Texture* texture, const sago::t
}
SDL_Rect part{};
getTextureLocationFromGid(tm, outerTile, nullptr, &part.x, &part.y, &part.w, &part.h);
- Draw(renderer, texture, 32 * tm.width - topx, 32*i - topy, part);
- Draw(renderer, texture, -32 - topx, 32*i - topy, part);
+ Draw(renderer, texture, 32 * tm.width - topx, 32*i - topy, part, resize);
+ Draw(renderer, texture, -32 - topx, 32*i - topy, part, resize);
}
}
-void DrawTile(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, uint32_t gid, int x, int y) {
+void DrawTile(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, uint32_t gid, int x, int y, sago::SagoLogicalResize* resize) {
SDL_Rect part{};
std::string imageFile;
getTextureLocationFromGid(tm, gid, &imageFile, &part.x, &part.y, &part.w, &part.h);
imageFile = imageFile.substr(12);
imageFile = imageFile.substr(0, imageFile.length()-4);
SDL_Texture* texture = sHolder->GetDataHolder().getTexturePtr(imageFile);
- Draw(renderer, texture, x, y, part);
+ Draw(renderer, texture, x, y, part, resize);
}
-void DrawLayer(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, size_t layer, int topx, int topy) {
+void DrawLayer(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, size_t layer, int topx, int topy, sago::SagoLogicalResize* resize) {
int startX = topx/32;
int startY = topy/32;
if (startX < 0) {
@@ -120,51 +121,80 @@ void DrawLayer(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sa
if (startY < 0) {
startY = 0;
}
- for (int i = startX; i < tm.width && i < (topx+globalData.xsize)/32+1; ++i) {
- for (int j = startY; j < tm.height && j < (topy+globalData.ysize)/32+1; ++j) {
+ // Use logical size for drawing range
+ int viewWidth = resize ? 1920 : globalData.xsize;
+ int viewHeight = resize ? 1080 : globalData.ysize;
+ for (int i = startX; i < tm.width && i < (topx+viewWidth)/32+1; ++i) {
+ for (int j = startY; j < tm.height && j < (topy+viewHeight)/32+1; ++j) {
uint32_t gid = sago::tiled::getTileFromLayer(tm, tm.layers.at(layer), i, j);
if (gid == 0) {
continue;
}
- DrawTile(renderer, sHolder, tm, gid, 32 * i - topx, 32 * j - topy);
+ DrawTile(renderer, sHolder, tm, gid, 32 * i - topx, 32 * j - topy, resize);
}
}
}
-void DrawOjbectGroup(SDL_Renderer* renderer, const sago::tiled::TileMap& tm, size_t object_group, int topx, int topy) {
+void DrawOjbectGroup(SDL_Renderer* renderer, const sago::tiled::TileMap& tm, size_t object_group, int topx, int topy, sago::SagoLogicalResize* resize) {
const sago::tiled::TileObjectGroup& group = tm.object_groups.at(object_group);
for (const sago::tiled::TileObject& o : group.objects) {
if (o.isEllipse) {
- ellipseRGBA(renderer, (o.x + o.width / 2) - topx, (o.y + o.height / 2) - topy, o.width / 2, o.height / 2, 255, 255, 0, 255);
+ int cx = (o.x + o.width / 2) - topx;
+ int cy = (o.y + o.height / 2) - topy;
+ int rx = o.width / 2;
+ int ry = o.height / 2;
+ if (resize) {
+ resize->LogicalToPhysical(&cx, &cy);
+ int temp_rx = rx, temp_ry = ry;
+ resize->LogicalToPhysical(&temp_rx, &temp_ry);
+ rx = temp_rx;
+ ry = temp_ry;
+ }
+ ellipseRGBA(renderer, cx, cy, rx, ry, 255, 255, 0, 255);
}
else if (o.polygon_points.size() > 0) {
for (size_t i = 0; i < o.polygon_points.size(); ++i) {
std::pair<int, int> first = o.polygon_points.at(i);
std::pair<int, int> second = (i + 1 < o.polygon_points.size()) ? o.polygon_points.at(i + 1) : o.polygon_points.at(0);
- lineRGBA(renderer, first.first + o.x - topx, first.second + o.y - topy, second.first + o.x - topx, second.second + o.y - topy, 255, 255, 0, 255);
+ int x1 = first.first + o.x - topx;
+ int y1 = first.second + o.y - topy;
+ int x2 = second.first + o.x - topx;
+ int y2 = second.second + o.y - topy;
+ if (resize) {
+ resize->LogicalToPhysical(&x1, &y1);
+ resize->LogicalToPhysical(&x2, &y2);
+ }
+ lineRGBA(renderer, x1, y1, x2, y2, 255, 255, 0, 255);
}
}
else {
if (globalData.debugDrawProtectedAreas) {
- rectangleRGBA(renderer, o.x - topx, o.y - topy,
- o.x + o.width - topx, o.y + o.height - topy, 255, 255, 0, 255);
+ int x1 = o.x - topx;
+ int y1 = o.y - topy;
+ int x2 = o.x + o.width - topx;
+ int y2 = o.y + o.height - topy;
+ if (resize) {
+ resize->LogicalToPhysical(&x1, &y1);
+ resize->LogicalToPhysical(&x2, &y2);
+ }
+ rectangleRGBA(renderer, x1, y1, x2, y2, 255, 255, 0, 255);
}
}
}
}
void DrawMiscEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const MiscItem* entity, float time,
- int offsetX, int offsetY, bool drawCollision) {
- DrawCollision(target, entity, offsetX, offsetY, drawCollision);
+ int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize) {
+ DrawCollision(target, entity, offsetX, offsetY, drawCollision, resize);
const sago::SagoSprite& mySprite = sHolder->GetSprite(entity->sprite);
- mySprite.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ mySprite.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY, resize);
if (entity->sprite2[0]) {
const sago::SagoSprite& mySprite2 = sHolder->GetSprite(entity->sprite2);
- mySprite2.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ mySprite2.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY, resize);
}
}
-void DrawHumanEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Human* entity, float time, int offsetX, int offsetY, bool drawCollision) {
+void DrawHumanEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Human* entity, float time, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize) {
std::string animation = "standing";
bool relativeAnimation = false;
float relativeAnimationState = 0.0f;
@@ -181,32 +211,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);
+ int x = std::round(entity->X) - offsetX;
+ int y = std::round(entity->Y) - offsetY;
+ DrawCollision(target, entity, offsetX, offsetY, drawCollision, resize);
const sago::SagoSprite& mySprite = sHolder->GetSprite(entity->race + "_" + animation + "_" + std::string(1, entity->direction));
if (relativeAnimation) {
- mySprite.DrawProgressive(target, relativeAnimationState, x, y);
+ mySprite.DrawProgressive(target, relativeAnimationState, x, y, resize);
}
else {
- mySprite.Draw(target, time, x, y);
+ mySprite.Draw(target, time, x, y, resize);
}
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, x, y);
+ myPants.DrawProgressive(target, relativeAnimationState, x, y, resize);
}
else {
- myPants.Draw(target, time, x, y);
+ myPants.Draw(target, time, x, y, resize);
}
}
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, x, y);
+ myTop.DrawProgressive(target, relativeAnimationState, x, y, resize);
}
else {
- myTop.Draw(target, time, x, y);
+ myTop.Draw(target, time, x, y, resize);
}
}
if (entity->hair.length() > 0) {
@@ -216,31 +246,31 @@ 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, x, y);
+ myHair.DrawProgressive(target, relativeAnimationState, x, y, resize);
}
else {
- myHair.Draw(target, time, x, y);
+ myHair.Draw(target, time, x, y, resize);
}
}
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, x, y);
+ myWeapon.DrawProgressive(target, relativeAnimationState, x, y, resize);
}
else {
- myWeapon.Draw(target, time, x, y);
+ myWeapon.Draw(target, time, x, y, resize);
}
}
}
-void DrawMonster(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Monster* entity, float time, int offsetX, int offsetY, bool drawCollision) {
- DrawCollision(target, entity, offsetX, offsetY, drawCollision);
+void DrawMonster(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Monster* entity, float time, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize) {
+ DrawCollision(target, entity, offsetX, offsetY, drawCollision, resize);
const sago::SagoSprite& mySprite = sHolder->GetSprite(entity->race + "_" + std::string(1, entity->direction));
- mySprite.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY);
+ mySprite.Draw(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY, resize);
}
-void DrawProjectile(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Projectile* entity, float time, int offsetX, int offsetY, bool drawCollision) {
+void DrawProjectile(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Projectile* entity, float time, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize) {
(void)sHolder;
(void)time;
if (entity->sprite.length()) {
@@ -250,9 +280,9 @@ void DrawProjectile(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const
//atan2 is defined if either of directionY or directionX is not zero
angleRadian = atan2(entity->directionY, entity->directionX)-M_PI/2.0;
}
- mySprite.DrawRotated(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY, angleRadian);
+ mySprite.DrawRotated(target, time, std::round(entity->X) - offsetX, std::round(entity->Y) - offsetY, angleRadian, resize);
}
- DrawCollision(target, entity, offsetX, offsetY, drawCollision);
+ DrawCollision(target, entity, offsetX, offsetY, drawCollision, resize);
}
static void DrawRect(SDL_Renderer* target, int topx, int topy, int height, int width, const std::string& name) {
diff --git a/src/saland/GameDraw.hpp b/src/saland/GameDraw.hpp index d42f92f..3567c1b 100644 --- a/src/saland/GameDraw.hpp +++ b/src/saland/GameDraw.hpp
@@ -29,18 +29,18 @@ https://github.com/sago007/saland
#include "model/World.hpp"
#include "SDL.h"
-void DrawOuterBorder(SDL_Renderer* renderer, SDL_Texture* texture, const sago::tiled::TileMap& tm, int topx, int topy, uint32 outerTile);
-void DrawLayer(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, size_t layer, int topx, int topy);
-void DrawOjbectGroup(SDL_Renderer* renderer, const sago::tiled::TileMap& tm, size_t object_group, int topx, int topy);
+void DrawOuterBorder(SDL_Renderer* renderer, SDL_Texture* texture, const sago::tiled::TileMap& tm, int topx, int topy, uint32 outerTile, sago::SagoLogicalResize* resize = nullptr);
+void DrawLayer(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, size_t layer, int topx, int topy, sago::SagoLogicalResize* resize = nullptr);
+void DrawOjbectGroup(SDL_Renderer* renderer, const sago::tiled::TileMap& tm, size_t object_group, int topx, int topy, sago::SagoLogicalResize* resize = nullptr);
void DrawMiscEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const MiscItem* entity, float time,
- int offsetX, int offsetY, bool drawCollision);
-void DrawHumanEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Human* entity, float time, int offsetX, int offsetY, bool drawCollision);
-void DrawMonster(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Monster* entity, float time, int offsetX, int offsetY, bool drawCollision);
-void DrawProjectile(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Projectile* entity, float time, int offsetX, int offsetY, bool drawCollision);
+ int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize = nullptr);
+void DrawHumanEntity(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Human* entity, float time, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize = nullptr);
+void DrawMonster(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Monster* entity, float time, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize = nullptr);
+void DrawProjectile(SDL_Renderer* target, sago::SagoSpriteHolder* sHolder, const Projectile* entity, float time, int offsetX, int offsetY, bool drawCollision, sago::SagoLogicalResize* resize = nullptr);
void DrawRectWhite(SDL_Renderer* target, int topx, int topy, int height, int width);
void DrawRectYellow(SDL_Renderer* target, int topx, int topy, int height, int width);
-void DrawTile(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, uint32_t gid, int x, int y);
+void DrawTile(SDL_Renderer* renderer, sago::SagoSpriteHolder* sHolder, const sago::tiled::TileMap& tm, uint32_t gid, int x, int y, sago::SagoLogicalResize* resize = nullptr);
#endif /* GAMEDRAW_HPP */
diff --git a/src/saland/globals.hpp b/src/saland/globals.hpp index 0d4f27c..d7f8772 100644 --- a/src/saland/globals.hpp +++ b/src/saland/globals.hpp
@@ -25,6 +25,7 @@ https://github.com/sago007/saland
#define GLOBALS_HPP
#include "../sago/SagoSpriteHolder.hpp"
+#include "../sago/SagoLogicalResize.hpp"
#include <memory>
#include "model/Player.hpp"
@@ -59,6 +60,7 @@ struct GlobalData {
bool debugDrawProtectedAreas = false;
bool editor = false;
+ sago::SagoLogicalResize logicalResize;
};
extern GlobalData globalData;