diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-05-28 21:12:47 +0200 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-05-28 21:12:47 +0200 |
commit | 9be27992e211631cb4e72619c78c5c23397b2a9c (patch) | |
tree | d981f1123709c10db9cf3432ccbb793285226f2e /source/BlockEntities/BlockEntityWithItems.h | |
parent | Block entities now receive the cChunk param in their Tick() function (diff) | |
download | cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.tar cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.tar.gz cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.tar.bz2 cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.tar.lz cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.tar.xz cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.tar.zst cuberite-9be27992e211631cb4e72619c78c5c23397b2a9c.zip |
Diffstat (limited to 'source/BlockEntities/BlockEntityWithItems.h')
-rw-r--r-- | source/BlockEntities/BlockEntityWithItems.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/source/BlockEntities/BlockEntityWithItems.h b/source/BlockEntities/BlockEntityWithItems.h new file mode 100644 index 000000000..77f4ebe2e --- /dev/null +++ b/source/BlockEntities/BlockEntityWithItems.h @@ -0,0 +1,84 @@ +
+// BlockEntityWithItems.h
+
+// Declares the cBlockEntityWithItems class representing a common ancestor for all block entities that have an ItemGrid
+
+
+
+
+
+#pragma once
+
+#include "BlockEntity.h"
+#include "../ItemGrid.h"
+
+
+
+
+
+// tolua_begin
+class cBlockEntityWithItems :
+ public cBlockEntity
+ // tolua_end
+ // tolua doesn't seem to support multiple inheritance?
+ , public cItemGrid::cListener
+ // tolua_begin
+{
+ typedef cBlockEntity super;
+
+public:
+ // tolua_end
+
+ cBlockEntityWithItems(
+ BLOCKTYPE a_BlockType, // Type of the block that the entity represents
+ int a_BlockX, int a_BlockY, int a_BlockZ, // Position of the block entity
+ int a_ItemGridWidth, int a_ItemGridHeight, // Dimensions of the ItemGrid
+ cWorld * a_World // Optional world to assign to the entity
+ ) :
+ super(a_BlockType, a_BlockX, a_BlockY, a_BlockZ, a_World),
+ m_Contents(a_ItemGridWidth, a_ItemGridHeight)
+ {
+ m_Contents.AddListener(*this);
+ }
+
+ virtual void Destroy(void) override
+ {
+ // Drop the contents as pickups:
+ ASSERT(m_World != NULL);
+ cItems Pickups;
+ m_Contents.CopyToItems(Pickups);
+ m_Contents.Clear();
+ m_World->SpawnItemPickups(Pickups, m_PosX, m_PosY, m_PosZ);
+ }
+
+ // tolua_begin
+
+ const cItem & GetSlot(int a_SlotNum) const { return m_Contents.GetSlot(a_SlotNum); }
+ const cItem & GetSlot(int a_X, int a_Y) const { return m_Contents.GetSlot(a_X, a_Y); }
+
+ void SetSlot(int a_SlotNum, const cItem & a_Item) { m_Contents.SetSlot(a_SlotNum, a_Item); }
+ void SetSlot(int a_X, int a_Y, const cItem & a_Item) { m_Contents.SetSlot(a_X, a_Y, a_Item); }
+
+ /// Returns the ItemGrid used for storing the contents
+ cItemGrid & GetContents(void) { return m_Contents; }
+
+ // tolua_end
+
+ /// Const version of the GetContents() function for C++ type-safety
+ const cItemGrid & GetContents(void) const { return m_Contents; }
+
+protected:
+ cItemGrid m_Contents;
+
+ // cItemGrid::cListener overrides:
+ virtual void OnSlotChanged(cItemGrid * a_Grid, int a_SlotNum)
+ {
+ ASSERT(a_Grid == &m_Contents);
+ ASSERT(m_World != NULL);
+ m_World->MarkChunkDirty(GetChunkX(), GetChunkZ());
+ }
+} ; // tolua_export
+
+
+
+
|