- [NEW] Càrrega i pintat d'enemics en l'habitació

This commit is contained in:
2025-11-01 11:58:43 +01:00
parent a000c66dd2
commit 94cc7d9242
5 changed files with 237 additions and 74 deletions

View File

@@ -8,6 +8,7 @@
#include <cctype>
#include <map>
#include "images.h"
#include "enemies.h"
namespace fs = std::filesystem;
@@ -29,22 +30,9 @@ namespace rooms
return 0;
}
// Trim from start (in-place)
inline void ltrim(std::string& s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(),
[](unsigned char ch) { return !std::isspace(ch); }));
}
// Trim from end (in-place)
inline void rtrim(std::string& s) {
s.erase(std::find_if(s.rbegin(), s.rend(),
[](unsigned char ch) { return !std::isspace(ch); }).base(), s.end());
}
// Trim both ends (in-place)
inline void trim(std::string& s) {
ltrim(s);
rtrim(s);
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) { return !std::isspace(ch); }));
s.erase(std::find_if(s.rbegin(), s.rend(), [](unsigned char ch) { return !std::isspace(ch); }).base(), s.end());
}
void processKeyValue(const std::string& room_name, const std::string& section, const std::string& key, const std::string& value)
@@ -77,39 +65,39 @@ namespace rooms
}
} else if (section == "enemy") {
if (key == "animation") {
room.enemies[room.enemies.size()-1].animation = value;
room.enemies.back().animation = value.substr(0, value.find_last_of('.'));;
} else if (key == "x") {
room.enemies[room.enemies.size()-1].x = std::stoi(value);
room.enemies.back().x = std::stoi(value);
} else if (key == "y") {
room.enemies[room.enemies.size()-1].y = std::stoi(value);
room.enemies.back().y = std::stoi(value);
} else if (key == "vx") {
room.enemies[room.enemies.size()-1].vx = std::stof(value);
room.enemies.back().vx = std::stof(value);
} else if (key == "vy") {
room.enemies[room.enemies.size()-1].vy = std::stof(value);
room.enemies.back().vy = std::stof(value);
} else if (key == "x1") {
room.enemies[room.enemies.size()-1].x1 = std::stoi(value);
room.enemies.back().x1 = std::stoi(value);
} else if (key == "y1") {
room.enemies[room.enemies.size()-1].y1 = std::stoi(value);
room.enemies.back().y1 = std::stoi(value);
} else if (key == "x2") {
room.enemies[room.enemies.size()-1].x2 = std::stoi(value);
room.enemies.back().x2 = std::stoi(value);
} else if (key == "y2") {
room.enemies[room.enemies.size()-1].y2 = std::stoi(value);
room.enemies.back().y2 = std::stoi(value);
} else if (key == "color") {
room.enemies[room.enemies.size()-1].color = colorToNum(value);
room.enemies.back().color = colorToNum(value);
} else if (key == "flip") {
room.enemies[room.enemies.size()-1].flip = value=="true" ? true : false;
room.enemies.back().flip = value=="true" ? true : false;
} else if (key == "mirror") {
room.enemies[room.enemies.size()-1].mirror = value=="true" ? true : false;
room.enemies.back().mirror = value=="true" ? true : false;
}
} else if (section == "item") {
if (key == "tile") {
room.items[room.items.size()-1].tile = std::stoi(value);
room.items.back().tile = std::stoi(value);
} else if (key == "x") {
room.items[room.items.size()-1].x = std::stoi(value);
room.items.back().x = std::stoi(value);
} else if (key == "y") {
room.items[room.items.size()-1].y = std::stoi(value);
room.items.back().y = std::stoi(value);
} else if (key == "counter") {
room.items[room.items.size()-1].counter = std::stof(value);
room.items.back().counter = std::stof(value);
}
}
}
@@ -135,11 +123,11 @@ namespace rooms
if (line.empty() || line[0] == '#') continue;
// Remove inline comments
std::size_t comment_pos = line.find('#');
/*std::size_t comment_pos = line.find('#');
if (comment_pos != std::string::npos) {
line = line.substr(0, comment_pos);
trim(line);
}
}*/
// Check if entering or exiting a section
if (line[0] == '[')
@@ -261,5 +249,15 @@ namespace rooms
}
}
}
for (auto enemy : room.enemies)
{
enemies::enemy_t &anim = enemies::get(enemy.animation);
draw::setSource(anim.tileSetFile);
const int tile = anim.animations[0].frames[0];
draw::swapcol(1, enemy.color);
draw::draw(enemy.x*8, enemy.y*8, anim.frame_width, anim.frame_height, tile*anim.frame_width, 0);
draw::restorecol(1);
}
}
}