Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/interfaces/StarTileEntity.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/interfaces/StarTileEntity.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/game/interfaces/StarTileEntity.cpp')
-rw-r--r--source/game/interfaces/StarTileEntity.cpp101
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();
+}
+
+}