diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/interfaces/StarTileEntity.cpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/game/interfaces/StarTileEntity.cpp')
-rw-r--r-- | source/game/interfaces/StarTileEntity.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/source/game/interfaces/StarTileEntity.cpp b/source/game/interfaces/StarTileEntity.cpp new file mode 100644 index 0000000..7e80b7b --- /dev/null +++ b/source/game/interfaces/StarTileEntity.cpp @@ -0,0 +1,101 @@ +#include "StarTileEntity.hpp" +#include "StarWorld.hpp" +#include "StarRoot.hpp" +#include "StarLiquidsDatabase.hpp" +#include "StarDataStreamExtra.hpp" + +namespace Star { + +DataStream& operator<<(DataStream& ds, MaterialSpace const& materialSpace) { + ds.write(materialSpace.space); + ds.write(materialSpace.material); + return ds; +} + +DataStream& operator>>(DataStream& ds, MaterialSpace& materialSpace) { + ds.read(materialSpace.space); + ds.read(materialSpace.material); + return ds; +} + +TileEntity::TileEntity() { + setPersistent(true); +} + +Vec2F TileEntity::position() const { + return Vec2F(tilePosition()); +} + +List<Vec2I> TileEntity::spaces() const { + return {}; +} + +List<Vec2I> TileEntity::roots() const { + return {}; +} + +List<MaterialSpace> TileEntity::materialSpaces() const { + return {}; +} + +bool TileEntity::damageTiles(List<Vec2I> const&, Vec2F const&, TileDamage const&) { + return false; +} + +bool TileEntity::isInteractive() const { + return false; +} + +List<Vec2I> TileEntity::interactiveSpaces() const { + return spaces(); +} + +InteractAction TileEntity::interact(InteractRequest const& request) { + _unused(request); + return InteractAction(); +} + +List<QuestArcDescriptor> TileEntity::offeredQuests() const { + return {}; +} + +StringSet TileEntity::turnInQuests() const { + return StringSet(); +} + +Vec2F TileEntity::questIndicatorPosition() const { + return position(); +} + +bool TileEntity::anySpacesOccupied(List<Vec2I> const& spaces) const { + Vec2I tp = tilePosition(); + for (auto pos : spaces) { + pos += tp; + if (isConnectableMaterial(world()->material(pos, TileLayer::Foreground))) + return true; + } + + return false; +} + +bool TileEntity::allSpacesOccupied(List<Vec2I> const& spaces) const { + Vec2I tp = tilePosition(); + for (auto pos : spaces) { + pos += tp; + if (!isConnectableMaterial(world()->material(pos, TileLayer::Foreground))) + return false; + } + + return true; +} + +float TileEntity::spacesLiquidFillLevel(List<Vec2I> const& relativeSpaces) const { + float total = 0.0f; + for (auto pos : relativeSpaces) { + pos += tilePosition(); + total += world()->liquidLevel(pos).level; + } + return total / relativeSpaces.size(); +} + +} |