fix: editor no aplicava a memoria, soles a fitxer
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 353 B |
Binary file not shown.
|
Before Width: | Height: | Size: 198 B After Width: | Height: | Size: 435 B |
@@ -338,6 +338,7 @@ void MapEditor::update(float delta_time) {
|
|||||||
if (tile_index >= 0 && tile_index < static_cast<int>(room_data_.collision_tile_map.size())) {
|
if (tile_index >= 0 && tile_index < static_cast<int>(room_data_.collision_tile_map.size())) {
|
||||||
if (room_data_.collision_tile_map[tile_index] != brush_tile_) {
|
if (room_data_.collision_tile_map[tile_index] != brush_tile_) {
|
||||||
room_data_.collision_tile_map[tile_index] = brush_tile_;
|
room_data_.collision_tile_map[tile_index] = brush_tile_;
|
||||||
|
room_->setCollisionTile(tile_index, brush_tile_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -551,6 +552,7 @@ void MapEditor::handleEvent(const SDL_Event& event) { // NOLINT(readability-fun
|
|||||||
if (editing_collision_) {
|
if (editing_collision_) {
|
||||||
if (tile_index >= 0 && tile_index < static_cast<int>(room_data_.collision_tile_map.size())) {
|
if (tile_index >= 0 && tile_index < static_cast<int>(room_data_.collision_tile_map.size())) {
|
||||||
room_data_.collision_tile_map[tile_index] = brush_tile_;
|
room_data_.collision_tile_map[tile_index] = brush_tile_;
|
||||||
|
room_->setCollisionTile(tile_index, brush_tile_);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tile_index >= 0 && tile_index < static_cast<int>(room_data_.tile_map.size())) {
|
if (tile_index >= 0 && tile_index < static_cast<int>(room_data_.tile_map.size())) {
|
||||||
@@ -684,6 +686,7 @@ void MapEditor::handleMouseUp() { // NOLINT(readability-function-cognitive-comp
|
|||||||
if (IDX >= 0 && IDX < static_cast<int>(room_data_.enemies.size())) {
|
if (IDX >= 0 && IDX < static_cast<int>(room_data_.enemies.size())) {
|
||||||
room_data_.enemies[IDX].x1 = SNAP_X;
|
room_data_.enemies[IDX].x1 = SNAP_X;
|
||||||
room_data_.enemies[IDX].y1 = SNAP_Y;
|
room_data_.enemies[IDX].y1 = SNAP_Y;
|
||||||
|
room_->getEnemyManager()->getEnemy(IDX)->resetToInitialPosition(room_data_.enemies[IDX]);
|
||||||
selected_enemy_ = IDX;
|
selected_enemy_ = IDX;
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
@@ -693,6 +696,7 @@ void MapEditor::handleMouseUp() { // NOLINT(readability-function-cognitive-comp
|
|||||||
if (IDX >= 0 && IDX < static_cast<int>(room_data_.enemies.size())) {
|
if (IDX >= 0 && IDX < static_cast<int>(room_data_.enemies.size())) {
|
||||||
room_data_.enemies[IDX].x2 = SNAP_X;
|
room_data_.enemies[IDX].x2 = SNAP_X;
|
||||||
room_data_.enemies[IDX].y2 = SNAP_Y;
|
room_data_.enemies[IDX].y2 = SNAP_Y;
|
||||||
|
room_->getEnemyManager()->getEnemy(IDX)->resetToInitialPosition(room_data_.enemies[IDX]);
|
||||||
selected_enemy_ = IDX;
|
selected_enemy_ = IDX;
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
@@ -1229,6 +1233,7 @@ auto MapEditor::setRoomProperty(const std::string& property, const std::string&
|
|||||||
room_data_.conveyor_belt_direction = 0;
|
room_data_.conveyor_belt_direction = 0;
|
||||||
val = "none";
|
val = "none";
|
||||||
}
|
}
|
||||||
|
room_->setConveyorBeltDirection(room_data_.conveyor_belt_direction);
|
||||||
autosave();
|
autosave();
|
||||||
return "conveyor: " + val;
|
return "conveyor: " + val;
|
||||||
}
|
}
|
||||||
@@ -1237,6 +1242,7 @@ auto MapEditor::setRoomProperty(const std::string& property, const std::string&
|
|||||||
std::string tileset = val;
|
std::string tileset = val;
|
||||||
if (tileset.find('.') == std::string::npos) { tileset += ".gif"; }
|
if (tileset.find('.') == std::string::npos) { tileset += ".gif"; }
|
||||||
room_data_.tile_set_file = tileset;
|
room_data_.tile_set_file = tileset;
|
||||||
|
room_->setTileSet(tileset);
|
||||||
autosave();
|
autosave();
|
||||||
return "tileset: " + tileset;
|
return "tileset: " + tileset;
|
||||||
}
|
}
|
||||||
@@ -1301,6 +1307,19 @@ auto MapEditor::setRoomProperty(const std::string& property, const std::string&
|
|||||||
// Aplicar la nueva conexión
|
// Aplicar la nueva conexión
|
||||||
if (our_field != nullptr) { *our_field = connection; }
|
if (our_field != nullptr) { *our_field = connection; }
|
||||||
|
|
||||||
|
// Sincronizar la conexión al Room vivo
|
||||||
|
Room::Border border = Room::Border::NONE;
|
||||||
|
if (property == "UP") {
|
||||||
|
border = Room::Border::TOP;
|
||||||
|
} else if (property == "DOWN") {
|
||||||
|
border = Room::Border::BOTTOM;
|
||||||
|
} else if (property == "LEFT") {
|
||||||
|
border = Room::Border::LEFT;
|
||||||
|
} else if (property == "RIGHT") {
|
||||||
|
border = Room::Border::RIGHT;
|
||||||
|
}
|
||||||
|
room_->setConnection(border, connection);
|
||||||
|
|
||||||
// Crear la conexión recíproca en la otra room
|
// Crear la conexión recíproca en la otra room
|
||||||
if (connection != "0") {
|
if (connection != "0") {
|
||||||
auto other = Resource::Cache::get()->getRoom(connection);
|
auto other = Resource::Cache::get()->getRoom(connection);
|
||||||
|
|||||||
@@ -56,6 +56,11 @@ void Enemy::resetToInitialPosition(const Data& data) {
|
|||||||
sprite_->setVelX(data.vx);
|
sprite_->setVelX(data.vx);
|
||||||
sprite_->setVelY(data.vy);
|
sprite_->setVelY(data.vy);
|
||||||
|
|
||||||
|
x1_ = data.x1;
|
||||||
|
x2_ = data.x2;
|
||||||
|
y1_ = data.y1;
|
||||||
|
y2_ = data.y2;
|
||||||
|
|
||||||
applyFlipMirror(data.vx);
|
applyFlipMirror(data.vx);
|
||||||
|
|
||||||
collider_ = getRect();
|
collider_ = getRect();
|
||||||
|
|||||||
@@ -24,6 +24,15 @@ class CollisionMap {
|
|||||||
[[nodiscard]] auto getConveyorBeltDirection() const -> int { return conveyor_belt_direction_; }
|
[[nodiscard]] auto getConveyorBeltDirection() const -> int { return conveyor_belt_direction_; }
|
||||||
[[nodiscard]] auto getCollisionTileMap() const -> const std::vector<int>& { return collision_tile_map_; }
|
[[nodiscard]] auto getCollisionTileMap() const -> const std::vector<int>& { return collision_tile_map_; }
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
void setCollisionTile(int index, int value) {
|
||||||
|
if (index >= 0 && index < static_cast<int>(collision_tile_map_.size())) {
|
||||||
|
collision_tile_map_[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void setConveyorBeltDirection(int direction) { conveyor_belt_direction_ = direction; }
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<int> collision_tile_map_;
|
std::vector<int> collision_tile_map_;
|
||||||
int conveyor_belt_direction_;
|
int conveyor_belt_direction_;
|
||||||
|
|||||||
@@ -124,6 +124,51 @@ void Room::setItemColors(Uint8 color1, Uint8 color2) {
|
|||||||
item_mgr->getItem(i)->setColors(color1, color2);
|
item_mgr->getItem(i)->setColors(color1, color2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cambia un collision tile en vivo (para editor)
|
||||||
|
void Room::setCollisionTile(int index, int value) {
|
||||||
|
collision_map_->setCollisionTile(index, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cambia una conexión de habitación en vivo (para editor)
|
||||||
|
void Room::setConnection(Border border, const std::string& room_name) {
|
||||||
|
switch (border) {
|
||||||
|
case Border::TOP:
|
||||||
|
upper_room_ = room_name;
|
||||||
|
break;
|
||||||
|
case Border::BOTTOM:
|
||||||
|
lower_room_ = room_name;
|
||||||
|
break;
|
||||||
|
case Border::LEFT:
|
||||||
|
left_room_ = room_name;
|
||||||
|
break;
|
||||||
|
case Border::RIGHT:
|
||||||
|
right_room_ = room_name;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cambia el tileset en vivo (para editor)
|
||||||
|
void Room::setTileSet(const std::string& tile_set_file) {
|
||||||
|
tile_set_file_ = tile_set_file;
|
||||||
|
surface_ = Resource::Cache::get()->getSurface(tile_set_file);
|
||||||
|
tile_set_width_ = surface_->getWidth() / TILE_SIZE;
|
||||||
|
tilemap_renderer_ = std::make_unique<TilemapRenderer>(
|
||||||
|
tile_map_,
|
||||||
|
tile_set_width_,
|
||||||
|
surface_,
|
||||||
|
bg_color_,
|
||||||
|
conveyor_belt_direction_);
|
||||||
|
tilemap_renderer_->initialize(collision_map_->getCollisionTileMap());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cambia la dirección del conveyor belt en vivo (para editor)
|
||||||
|
void Room::setConveyorBeltDirection(int direction) {
|
||||||
|
conveyor_belt_direction_ = direction;
|
||||||
|
collision_map_->setConveyorBeltDirection(direction);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Actualiza las variables y objetos de la habitación
|
// Actualiza las variables y objetos de la habitación
|
||||||
|
|||||||
@@ -64,6 +64,10 @@ class Room {
|
|||||||
auto getItemManager() -> ItemManager* { return item_manager_.get(); }
|
auto getItemManager() -> ItemManager* { return item_manager_.get(); }
|
||||||
void setItemColors(Uint8 color1, Uint8 color2);
|
void setItemColors(Uint8 color1, Uint8 color2);
|
||||||
void setTile(int index, int tile_value);
|
void setTile(int index, int tile_value);
|
||||||
|
void setCollisionTile(int index, int value);
|
||||||
|
void setConnection(Border border, const std::string& room_name);
|
||||||
|
void setTileSet(const std::string& tile_set_file);
|
||||||
|
void setConveyorBeltDirection(int direction);
|
||||||
[[nodiscard]] auto getTileSetFile() const -> const std::string& { return tile_set_file_; }
|
[[nodiscard]] auto getTileSetFile() const -> const std::string& { return tile_set_file_; }
|
||||||
[[nodiscard]] auto getTileSetWidth() const -> int { return tile_set_width_; }
|
[[nodiscard]] auto getTileSetWidth() const -> int { return tile_set_width_; }
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user