DispenserEntity code cleanup after PR merge.
This commit is contained in:
parent
d6b2660f36
commit
220e6f5880
@ -150,31 +150,27 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||
{
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkFireCharge, GetShootVector(Meta) * 20);
|
||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case E_ITEM_ARROW:
|
||||
{
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkArrow, GetShootVector(Meta) * 20);
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkArrow, GetShootVector(Meta) * 20 + Vector3d(0, 1, 0));
|
||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case E_ITEM_SNOWBALL:
|
||||
{
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkSnowball, GetShootVector(Meta) * 20);
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkSnowball, GetShootVector(Meta) * 20 + Vector3d(0, 1, 0));
|
||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case E_ITEM_EGG:
|
||||
{
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkEgg, GetShootVector(Meta) * 20);
|
||||
SpawnProjectileFromDispenser(BlockX, DispY, BlockZ, cProjectileEntity::pkEgg, GetShootVector(Meta) * 20 + Vector3d(0, 1, 0));
|
||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -194,31 +190,30 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||
|
||||
|
||||
|
||||
void cDispenserEntity::SpawnProjectileFromDispenser(int & a_BlockX, int & a_BlockY, int & a_BlockZ, cProjectileEntity::eKind a_Kind, Vector3d a_ShootVector)
|
||||
{
|
||||
if (a_Kind != cProjectileEntity::pkFireCharge)
|
||||
{
|
||||
a_ShootVector.y = a_ShootVector.y + 1;
|
||||
}
|
||||
|
||||
m_World->CreateProjectile((double) a_BlockX + 0.5, (double) a_BlockY + 0.5, (double) a_BlockZ + 0.5, a_Kind, NULL, NULL, &a_ShootVector);
|
||||
|
||||
void cDispenserEntity::SpawnProjectileFromDispenser(int a_BlockX, int a_BlockY, int a_BlockZ, cProjectileEntity::eKind a_Kind, const Vector3d & a_ShootVector)
|
||||
{
|
||||
m_World->CreateProjectile((double)a_BlockX + 0.5, (double)a_BlockY + 0.5, (double)a_BlockZ + 0.5, a_Kind, NULL, NULL, &a_ShootVector);
|
||||
}
|
||||
|
||||
|
||||
Vector3d cDispenserEntity::GetShootVector(NIBBLETYPE & a_Meta)
|
||||
|
||||
|
||||
|
||||
Vector3d cDispenserEntity::GetShootVector(NIBBLETYPE a_Meta)
|
||||
{
|
||||
switch(a_Meta)
|
||||
switch (a_Meta)
|
||||
{
|
||||
case E_META_DROPSPENSER_FACING_YP: return Vector3d( 0, 1, 0); // UP
|
||||
case E_META_DROPSPENSER_FACING_YM: return Vector3d( 0, -1, 0); // DOWN
|
||||
|
||||
case E_META_DROPSPENSER_FACING_XM: return Vector3d(-1, 0, 0); // WEST
|
||||
case E_META_DROPSPENSER_FACING_XP: return Vector3d( 1, 0, 0); // EAST
|
||||
|
||||
case E_META_DROPSPENSER_FACING_YP: return Vector3d( 0, 1, 0);
|
||||
case E_META_DROPSPENSER_FACING_YM: return Vector3d( 0, -1, 0);
|
||||
case E_META_DROPSPENSER_FACING_XM: return Vector3d(-1, 0, 0);
|
||||
case E_META_DROPSPENSER_FACING_XP: return Vector3d( 1, 0, 0);
|
||||
case E_META_DROPSPENSER_FACING_ZM: return Vector3d( 0, 0, -1);
|
||||
case E_META_DROPSPENSER_FACING_ZP: return Vector3d( 0, 0, 1);
|
||||
}
|
||||
|
||||
LOGWARNING("Unhandled dispenser meta: %d", a_Meta);
|
||||
ASSERT(!"Unhandled dispenser facing");
|
||||
return Vector3d(0, 1, 0);
|
||||
}
|
||||
|
||||
|
@ -17,25 +17,30 @@ public:
|
||||
|
||||
// tolua_end
|
||||
|
||||
/// Constructor used for normal operation
|
||||
/** Constructor used for normal operation */
|
||||
cDispenserEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
|
||||
|
||||
static const char * GetClassStatic(void) { return "cDispenserEntity"; }
|
||||
|
||||
/** Spawns a projectile of the given kind in front of the dispenser */
|
||||
void SpawnProjectileFromDispenser(int & a_BlockX, int & a_BlockY, int & a_BlockZ, cProjectileEntity::eKind a_Kind, Vector3d a_ShootVector);
|
||||
// tolua_begin
|
||||
|
||||
/** Returns how to aim the projectile */
|
||||
Vector3d GetShootVector(NIBBLETYPE & a_Meta);
|
||||
/** Spawns a projectile of the given kind in front of the dispenser with the specified speed. */
|
||||
void SpawnProjectileFromDispenser(int a_BlockX, int a_BlockY, int a_BlockZ, cProjectileEntity::eKind a_Kind, const Vector3d & a_Speed);
|
||||
|
||||
/** Returns a unit vector in the cardinal direction of where the dispenser is facing. */
|
||||
Vector3d GetShootVector(NIBBLETYPE a_Meta);
|
||||
|
||||
// tolua_end
|
||||
|
||||
private:
|
||||
// cDropSpenser overrides:
|
||||
virtual void DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum) override;
|
||||
|
||||
/// If such a bucket can fit, adds it to m_Contents and returns true
|
||||
/** If such a bucket can fit, adds it to m_Contents and returns true */
|
||||
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
|
||||
|
||||
/// If the a_BlockInFront is liquidable and the empty bucket can fit, does the m_Contents processing and returns true
|
||||
/** If the a_BlockInFront can be washed away by liquid and the empty bucket can fit,
|
||||
does the m_Contents processing and returns true. Returns false otherwise. */
|
||||
bool EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum);
|
||||
} ; // tolua_export
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user