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

summaryrefslogtreecommitdiff
path: root/source/game/items/StarMaterialItem.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/items/StarMaterialItem.hpp')
-rw-r--r--source/game/items/StarMaterialItem.hpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/source/game/items/StarMaterialItem.hpp b/source/game/items/StarMaterialItem.hpp
index ca345eb..e5b1f01 100644
--- a/source/game/items/StarMaterialItem.hpp
+++ b/source/game/items/StarMaterialItem.hpp
@@ -5,12 +5,15 @@
#include "StarFireableItem.hpp"
#include "StarBeamItem.hpp"
#include "StarEntityRendering.hpp"
+#include "StarPreviewTileTool.hpp"
+#include "StarRenderableItem.hpp"
+#include "StarCollisionBlock.hpp"
namespace Star {
STAR_CLASS(MaterialItem);
-class MaterialItem : public Item, public FireableItem, public BeamItem {
+class MaterialItem : public Item, public FireableItem, public PreviewTileTool, public RenderableItem, public BeamItem {
public:
MaterialItem(Json const& config, String const& directory, Json const& settings);
virtual ~MaterialItem() {}
@@ -20,6 +23,7 @@ public:
void init(ToolUserEntity* owner, ToolHand hand) override;
void uninit() override;
void update(float dt, FireMode fireMode, bool shifting, HashSet<MoveControlType> const& moves) override;
+ void render(RenderCallback* renderCallback, EntityRenderLayer renderLayer) override;
List<Drawable> nonRotatedDrawables() const override;
@@ -32,10 +36,14 @@ public:
bool canPlace(bool shifting) const;
bool multiplaceEnabled() const;
- // FIXME: Why isn't this a PreviewTileTool then??
- List<PreviewTile> preview(bool shifting) const;
+ float& blockRadius();
+ float& altBlockRadius();
+ TileCollisionOverride& collisionOverride();
+ List<PreviewTile> preview(bool shifting) const override;
private:
+ float calcRadius(bool shifting) const;
+ List<Vec2I>& tileArea(float radius) const;
MaterialHue placementHueShift(Vec2I const& position) const;
MaterialId m_material;
@@ -47,6 +55,10 @@ private:
bool m_multiplace;
StringList m_placeSounds;
Maybe<Vec2F> m_lastAimPosition;
+ TileCollisionOverride m_collisionOverride;
+
+ mutable float m_lastTileAreaRadiusCache;
+ mutable List<Vec2I> m_tileAreasCache;
};
}