Refactor OverworldMap constructor to remove unnecessary tiles16 parameter
This commit is contained in:
@@ -86,8 +86,7 @@ absl::Status Overworld::Load(Rom &rom) {
|
||||
|
||||
const bool load_custom_overworld = flags()->overworld.kLoadCustomOverworld;
|
||||
for (int map_index = 0; map_index < kNumOverworldMaps; ++map_index)
|
||||
overworld_maps_.emplace_back(map_index, rom_, tiles16_,
|
||||
load_custom_overworld);
|
||||
overworld_maps_.emplace_back(map_index, rom_, load_custom_overworld);
|
||||
|
||||
FetchLargeMaps();
|
||||
LoadEntrances();
|
||||
@@ -314,7 +313,7 @@ absl::Status Overworld::LoadOverworldMaps() {
|
||||
}
|
||||
auto task_function = [this, i, size, world_type]() {
|
||||
return overworld_maps_[i].BuildMap(size, game_state_, world_type,
|
||||
GetMapTiles(world_type));
|
||||
tiles16_, GetMapTiles(world_type));
|
||||
};
|
||||
futures.emplace_back(std::async(std::launch::async, task_function));
|
||||
}
|
||||
@@ -1517,28 +1516,27 @@ absl::Status Overworld::LoadPrototype(Rom &rom,
|
||||
|
||||
const bool load_custom_overworld = flags()->overworld.kLoadCustomOverworld;
|
||||
for (int map_index = 0; map_index < kNumOverworldMaps; ++map_index)
|
||||
overworld_maps_.emplace_back(map_index, rom_, tiles16_,
|
||||
load_custom_overworld);
|
||||
overworld_maps_.emplace_back(map_index, rom_, load_custom_overworld);
|
||||
|
||||
FetchLargeMaps();
|
||||
LoadEntrances();
|
||||
|
||||
auto size = tiles16_.size();
|
||||
std::vector<std::future<absl::Status>> futures;
|
||||
for (int i = 0; i < kNumOverworldMaps; ++i) {
|
||||
futures.emplace_back(std::async(std::launch::async, [this, i, size]() {
|
||||
if (i < 64) {
|
||||
return overworld_maps_[i].BuildMap(size, game_state_, 0,
|
||||
map_tiles_.light_world);
|
||||
} else if (i < 0x80 && i >= 0x40) {
|
||||
return overworld_maps_[i].BuildMap(size, game_state_, 1,
|
||||
map_tiles_.dark_world);
|
||||
} else {
|
||||
return overworld_maps_[i].BuildMap(size, game_state_, 2,
|
||||
map_tiles_.special_world);
|
||||
}
|
||||
}));
|
||||
}
|
||||
// for (int i = 0; i < kNumOverworldMaps; ++i) {
|
||||
// futures.emplace_back(std::async(std::launch::async, [this, i, size]() {
|
||||
// if (i < 64) {
|
||||
// return overworld_maps_[i].BuildMap(size, game_state_, 0,
|
||||
// map_tiles_.light_world);
|
||||
// } else if (i < 0x80 && i >= 0x40) {
|
||||
// return overworld_maps_[i].BuildMap(size, game_state_, 1,
|
||||
// map_tiles_.dark_world);
|
||||
// } else {
|
||||
// return overworld_maps_[i].BuildMap(size, game_state_, 2,
|
||||
// map_tiles_.special_world);
|
||||
// }
|
||||
// }));
|
||||
// }
|
||||
|
||||
// Wait for all tasks to complete and check their results
|
||||
for (auto &future : futures) {
|
||||
|
||||
@@ -514,6 +514,7 @@ class Overworld : public SharedRom, public core::ExperimentFlags {
|
||||
auto exits() const { return &all_exits_; }
|
||||
auto mutable_exits() { return &all_exits_; }
|
||||
std::vector<gfx::Tile16> tiles16() const { return tiles16_; }
|
||||
auto mutable_tiles16() { return &tiles16_; }
|
||||
|
||||
auto Sprites(int state) const { return all_sprites_[state]; }
|
||||
auto mutable_sprites(int state) { return &all_sprites_[state]; }
|
||||
|
||||
@@ -18,10 +18,8 @@ namespace app {
|
||||
namespace zelda3 {
|
||||
namespace overworld {
|
||||
|
||||
OverworldMap::OverworldMap(int index, Rom& rom,
|
||||
std::vector<gfx::Tile16>& tiles16,
|
||||
bool load_custom_data)
|
||||
: index_(index), parent_(index), rom_(rom), tiles16_(tiles16) {
|
||||
OverworldMap::OverworldMap(int index, Rom& rom, bool load_custom_data)
|
||||
: index_(index), parent_(index), rom_(rom) {
|
||||
LoadAreaInfo();
|
||||
|
||||
if (load_custom_data) {
|
||||
@@ -37,6 +35,7 @@ OverworldMap::OverworldMap(int index, Rom& rom,
|
||||
}
|
||||
|
||||
absl::Status OverworldMap::BuildMap(int count, int game_state, int world,
|
||||
std::vector<gfx::Tile16>& tiles16,
|
||||
OWBlockset& world_blockset) {
|
||||
game_state_ = game_state;
|
||||
world_ = world;
|
||||
@@ -59,7 +58,7 @@ absl::Status OverworldMap::BuildMap(int count, int game_state, int world,
|
||||
|
||||
LoadAreaGraphics();
|
||||
RETURN_IF_ERROR(BuildTileset())
|
||||
RETURN_IF_ERROR(BuildTiles16Gfx(count))
|
||||
RETURN_IF_ERROR(BuildTiles16Gfx(tiles16, count))
|
||||
RETURN_IF_ERROR(LoadPalette());
|
||||
RETURN_IF_ERROR(BuildBitmap(world_blockset))
|
||||
built_ = true;
|
||||
@@ -678,7 +677,8 @@ absl::Status OverworldMap::BuildTileset() {
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
absl::Status OverworldMap::BuildTiles16Gfx(int count) {
|
||||
absl::Status OverworldMap::BuildTiles16Gfx(std::vector<gfx::Tile16>& tiles16,
|
||||
int count) {
|
||||
if (current_blockset_.size() == 0) current_blockset_.resize(0x100000, 0x00);
|
||||
|
||||
const int offsets[] = {0x00, 0x08, 0x400, 0x408};
|
||||
@@ -687,7 +687,7 @@ absl::Status OverworldMap::BuildTiles16Gfx(int count) {
|
||||
|
||||
for (auto i = 0; i < count; i++) {
|
||||
for (auto tile = 0; tile < 0x04; tile++) {
|
||||
gfx::TileInfo info = tiles16_[i].tiles_info[tile];
|
||||
gfx::TileInfo info = tiles16[i].tiles_info[tile];
|
||||
int offset = offsets[tile];
|
||||
for (auto y = 0; y < 0x08; ++y) {
|
||||
for (auto x = 0; x < 0x08; ++x) {
|
||||
|
||||
@@ -67,16 +67,16 @@ constexpr int OverworldCustomTileGFXGroupEnabled = 0x140148;
|
||||
class OverworldMap : public editor::context::GfxContext {
|
||||
public:
|
||||
OverworldMap() = default;
|
||||
OverworldMap(int index, Rom& rom, std::vector<gfx::Tile16>& tiles16,
|
||||
bool load_custom_data = false);
|
||||
OverworldMap(int index, Rom& rom, bool load_custom_data = false);
|
||||
|
||||
absl::Status BuildMap(int count, int game_state, int world,
|
||||
std::vector<gfx::Tile16>& tiles16,
|
||||
OWBlockset& world_blockset);
|
||||
|
||||
void LoadAreaGraphics();
|
||||
absl::Status LoadPalette();
|
||||
absl::Status BuildTileset();
|
||||
absl::Status BuildTiles16Gfx(int count);
|
||||
absl::Status BuildTiles16Gfx(std::vector<gfx::Tile16>& tiles16, int count);
|
||||
absl::Status BuildBitmap(OWBlockset& world_blockset);
|
||||
|
||||
void DrawAnimatedTiles();
|
||||
@@ -118,9 +118,7 @@ class OverworldMap : public editor::context::GfxContext {
|
||||
auto set_sprite_palette(int i, uint8_t value) { sprite_palette_[i] = value; }
|
||||
auto set_message_id(uint16_t value) { message_id_ = value; }
|
||||
|
||||
uint8_t* mutable_custom_tileset(int index) {
|
||||
return &custom_gfx_ids_[index];
|
||||
}
|
||||
uint8_t* mutable_custom_tileset(int index) { return &custom_gfx_ids_[index]; }
|
||||
|
||||
void SetAsLargeMap(int parent_index, int quadrant) {
|
||||
parent_ = parent_index;
|
||||
@@ -141,7 +139,6 @@ class OverworldMap : public editor::context::GfxContext {
|
||||
current_blockset_.clear();
|
||||
current_gfx_.clear();
|
||||
bitmap_data_.clear();
|
||||
tiles16_.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -193,7 +190,6 @@ class OverworldMap : public editor::context::GfxContext {
|
||||
OWMapTiles map_tiles_;
|
||||
|
||||
gfx::SnesPalette current_palette_;
|
||||
std::vector<gfx::Tile16> tiles16_;
|
||||
};
|
||||
|
||||
} // namespace overworld
|
||||
|
||||
Reference in New Issue
Block a user