#pragma once #include #include #include #include "common.h" namespace Swan { struct Tile { public: using ID = uint16_t; struct Builder { std::string name; std::string image; bool isSolid = true; bool isOpaque = isSolid; float lightLevel = 0; std::optional droppedItem = std::nullopt; void (*onSpawn)(const Context &ctx, TilePos pos) = nullptr; }; const ID id; const std::string name; const bool isSolid; const bool isOpaque; const float lightLevel; const std::optional droppedItem; void (*const onSpawn)(const Context &ctx, TilePos pos); Tile(ID id, std::string name, const Builder &builder): id(id), name(name), isSolid(builder.isSolid), isOpaque(builder.isOpaque), lightLevel(builder.lightLevel), droppedItem(builder.droppedItem), onSpawn(builder.onSpawn) {} }; }