summaryrefslogtreecommitdiffstats
path: root/src/BlockEntities/DispenserEntity.cpp
diff options
context:
space:
mode:
authormadmaxoft <github@xoft.cz>2014-06-11 19:46:24 +0200
committermadmaxoft <github@xoft.cz>2014-06-11 19:46:24 +0200
commit220e6f5880354c9984e18718f723331bb904df45 (patch)
tree6b3183c7ee930fffe6c6dc3cedaa86e73ebf5a72 /src/BlockEntities/DispenserEntity.cpp
parentMerge remote-tracking branch 'joannis/master' (diff)
downloadcuberite-220e6f5880354c9984e18718f723331bb904df45.tar
cuberite-220e6f5880354c9984e18718f723331bb904df45.tar.gz
cuberite-220e6f5880354c9984e18718f723331bb904df45.tar.bz2
cuberite-220e6f5880354c9984e18718f723331bb904df45.tar.lz
cuberite-220e6f5880354c9984e18718f723331bb904df45.tar.xz
cuberite-220e6f5880354c9984e18718f723331bb904df45.tar.zst
cuberite-220e6f5880354c9984e18718f723331bb904df45.zip
Diffstat (limited to '')
-rw-r--r--src/BlockEntities/DispenserEntity.cpp41
1 files changed, 18 insertions, 23 deletions
diff --git a/src/BlockEntities/DispenserEntity.cpp b/src/BlockEntities/DispenserEntity.cpp
index 97e25ca6d..c02c68afa 100644
--- a/src/BlockEntities/DispenserEntity.cpp
+++ b/src/BlockEntities/DispenserEntity.cpp
@@ -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)
-{
- 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
+
+Vector3d cDispenserEntity::GetShootVector(NIBBLETYPE a_Meta)
+{
+ switch (a_Meta)
+ {
+ 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);
}