1
0

Suggestions

This commit is contained in:
Tiger Wang 2014-09-27 19:19:28 +01:00
parent d1814d2d67
commit 7ce09a9113
6 changed files with 69 additions and 23 deletions

View File

@ -20,12 +20,9 @@
// tolua_begin
class cBlockEntityWithItems :
public cBlockEntity
// tolua_end
// tolua doesn't seem to support multiple inheritance?
, public cItemGrid::cListener
, public cWindowOwner
// tolua_begin
public cBlockEntity,
public cItemGrid::cListener,
public cBlockEntityWindowOwner
{
typedef cBlockEntity super;
@ -39,7 +36,8 @@ public:
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(a_ItemGridWidth, a_ItemGridHeight),
cBlockEntityWindowOwner(this)
{
m_Contents.AddListener(*this);
}

View File

@ -11,7 +11,8 @@
cEnderChestEntity::cEnderChestEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) :
super(E_BLOCK_ENDER_CHEST, a_BlockX, a_BlockY, a_BlockZ, a_World)
super(E_BLOCK_ENDER_CHEST, a_BlockX, a_BlockY, a_BlockZ, a_World),
cBlockEntityWindowOwner(this)
{
}

View File

@ -11,7 +11,7 @@
// tolua_begin
class cEnderChestEntity :
public cBlockEntity,
public cWindowOwner
public cBlockEntityWindowOwner
{
typedef cBlockEntity super;

View File

@ -7,7 +7,6 @@
#include "Globals.h"
#include "Minecart.h"
#include "../World.h"
#include "../ClientHandle.h"
#include "../Chunk.h"
#include "Player.h"
@ -1107,7 +1106,8 @@ void cRideableMinecart::OnRightClicked(cPlayer & a_Player)
cMinecartWithChest::cMinecartWithChest(double a_X, double a_Y, double a_Z) :
super(mpChest, a_X, a_Y, a_Z),
m_Contents(ContentsWidth, ContentsHeight)
m_Contents(ContentsWidth, ContentsHeight),
cEntityWindowOwner(this)
{
m_Contents.AddListener(*this);
}

View File

@ -10,6 +10,7 @@
#pragma once
#include "Entity.h"
#include "World.h"
#include "../UI/WindowOwner.h"
@ -111,7 +112,7 @@ protected:
class cMinecartWithChest :
public cMinecart,
public cItemGrid::cListener,
public cWindowOwner
public cEntityWindowOwner
{
typedef cMinecart super;

View File

@ -1,4 +1,3 @@
#pragma once
#include "../BlockEntities/BlockEntity.h"
@ -16,12 +15,6 @@ for entities / players in motion to close their windows when they get too far aw
// class cWindow;
/**
Base class for the window owning
*/
@ -32,16 +25,16 @@ public:
m_Window(NULL)
{
}
virtual ~cWindowOwner()
{
}
void CloseWindow(void)
{
m_Window = NULL;
}
void OpenWindow(cWindow * a_Window)
{
m_Window = a_Window;
@ -52,7 +45,10 @@ public:
{
return m_Window;
}
/// Returns the block position at which the element owning the window is
virtual Vector3i GetBlockPos(void) = 0;
private:
cWindow * m_Window;
};
@ -60,3 +56,53 @@ private:
/**
Window owner that is associated with a block entity (chest, furnace, ...)
*/
class cBlockEntityWindowOwner :
public cWindowOwner
{
public:
cBlockEntityWindowOwner(cBlockEntity * a_BlockEntity) :
m_BlockEntity(a_BlockEntity)
{
}
virtual Vector3i GetBlockPos(void) override
{
return Vector3i(m_BlockEntity->GetPosX(), m_BlockEntity->GetPosY(), m_BlockEntity->GetPosZ());
}
private:
cBlockEntity * m_BlockEntity;
};
/**
Window owner that is associated with an entity (chest minecart)
*/
class cEntityWindowOwner :
public cWindowOwner
{
public:
cEntityWindowOwner(cEntity * a_Entity) :
m_Entity(a_Entity)
{
}
virtual Vector3i GetBlockPos(void) override
{
return m_Entity->GetPosition().Floor();
}
private:
cEntity * m_Entity;
};