1#ifndef YAZE_CORE_LYRA_TERRAIN_DOCUMENT_H_
2#define YAZE_CORE_LYRA_TERRAIN_DOCUMENT_H_
10#include <unordered_map>
13#include "absl/status/status.h"
14#include "absl/status/statusor.h"
20 0x47, 0x48, 0x3E, 0x5B};
28 std::array<uint8_t, 4>
music = {0, 0, 0, 0};
66 std::vector<LyraDoorPlacement>
doors;
67 std::vector<LyraExitPlacement>
exits;
129 std::array<LyraMapAuthoring, 32>
maps;
142 0x47, 0x48, 0x3E, 0x5B};
183 using Map = std::array<uint16_t, kMapSize * kMapSize>;
184 using Maps = std::array<Map, kMapCount>;
186 static absl::StatusOr<LyraTerrainDocument>
Create(
188 static absl::StatusOr<LyraTerrainDocument>
Parse(
199 absl::StatusOr<uint16_t>
tile(
int global_x,
int global_y)
const;
200 absl::StatusOr<uint16_t>
MapTile(
int map_id,
int x,
int y)
const;
203 absl::Status
Paint(
int global_x,
int global_y, uint16_t tile_id);
204 absl::StatusOr<LyraTerrainStroke>
EndStroke();
static constexpr int kFirstMap
static constexpr int kRows
std::array< Map, kMapCount > Maps
std::string Serialize() const
bool stroke_active() const
const LyraAuthoringState & authoring() const
absl::StatusOr< uint16_t > tile(int global_x, int global_y) const
std::array< uint16_t, kMapSize *kMapSize > Map
static constexpr int kSchemaVersion
const LyraTerrainProfile & profile() const
static constexpr int kWidth
absl::StatusOr< LyraTerrainStroke > EndStroke()
static absl::StatusOr< LyraTerrainDocument > Parse(std::string_view text, const LyraTerrainProfile &expected_profile)
const Maps & maps() const
LyraTerrainProfile profile_
absl::Status ApplyStroke(const LyraTerrainStroke &stroke, bool undo)
absl::Status Paint(int global_x, int global_y, uint16_t tile_id)
static constexpr int kMaxEdgeConnections
std::unordered_map< size_t, size_t > active_cells_
absl::StatusOr< uint16_t > MapTile(int map_id, int x, int y) const
LyraTerrainDocument()=default
static constexpr int kColumns
static constexpr int kMapCount
const LyraGameplayArea * GameplayAreaForMap(int map_id) const
LyraAuthoringState authoring_
LyraTerrainStroke active_stroke_
absl::Status BeginStroke()
LyraAuthoringState saved_authoring_
static constexpr int kTilePixels
static absl::StatusOr< LyraTerrainDocument > Create(const LyraTerrainProfile &profile, uint16_t fill_tile=0)
static constexpr int kMapSize
static constexpr int kHeight
absl::Status SetAuthoring(const LyraAuthoringState &before, const LyraAuthoringState &after)
absl::StatusOr< std::vector< int > > LyraGameplayAreaFootprint(int parent_map_id, LyraGameplayAreaSize size)
bool LyraEdgeMapsAdjacent(int map_a, int map_b)
std::vector< LyraGameplayArea > gameplay_areas
bool operator==(const LyraAuthoringState &) const =default
std::array< LyraMapAuthoring, 32 > maps
std::vector< LyraFlightPoint > flight_points
std::vector< LyraEdgeConnection > edge_connections
std::optional< int > entrance_id
bool operator==(const LyraDoorPlacement &) const =default
bool operator==(const LyraEdgeConnection &) const =default
std::optional< LyraEdgePassage > passage
bool operator==(const LyraEdgePassage &) const =default
std::optional< int > exit_row
bool operator==(const LyraExitPlacement &) const =default
std::optional< int > runtime_slot
bool operator==(const LyraFlightPoint &) const =default
bool operator==(const LyraGameplayArea &) const =default
LyraGameplayAreaSize size
std::array< std::string, 3 > asset_bindings
bool operator==(const LyraMapAuthoring &) const =default
std::vector< LyraExitPlacement > exits
std::vector< LyraSpritePlacement > sprites
LyraMapProperties properties
std::vector< LyraDoorPlacement > doors
std::optional< std::array< uint16_t, 128 > > background_palette
std::array< uint8_t, 8 > graphics_sheets
std::array< int, 3 > sprite_palettes
std::array< int, 3 > sprite_graphics
bool operator==(const LyraMapProperties &) const =default
std::array< uint8_t, 4 > music
bool operator==(const LyraSpritePlacement &) const =default
std::string animation_fingerprint
absl::Status Validate() const
bool operator==(const LyraTerrainProfile &) const =default
std::string palette_fingerprint
std::array< uint8_t, 8 > graphics_sheets
std::string graphics_fingerprint
std::string tile16_definition_fingerprint
std::vector< LyraTerrainCellChange > changes