- Added doxy comments and exported to lua
- Manipulation of the ShootVector is not to be done by the function that wants to spawn a projectile.
This commit is contained in:
parent
b436359237
commit
545478802b
|
@ -146,7 +146,18 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||||
|
|
||||||
case E_ITEM_FIRE_CHARGE:
|
case E_ITEM_FIRE_CHARGE:
|
||||||
{
|
{
|
||||||
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge);
|
if(Meta == E_META_DROPSPENSER_FACING_YP || Meta == E_META_DROPSPENSER_FACING_YM)
|
||||||
|
{
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge, GetShootVector(a_Chunk) * 20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vector3d ShootVector = GetShootVector(a_Chunk);
|
||||||
|
ShootVector = ShootVector * 20;
|
||||||
|
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFireCharge, ShootVector);
|
||||||
|
}
|
||||||
|
|
||||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -154,7 +165,19 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||||
|
|
||||||
case E_ITEM_ARROW:
|
case E_ITEM_ARROW:
|
||||||
{
|
{
|
||||||
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow);
|
if(Meta == E_META_DROPSPENSER_FACING_YP || Meta == E_META_DROPSPENSER_FACING_YM)
|
||||||
|
{
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow, GetShootVector(a_Chunk) * 20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vector3d ShootVector = GetShootVector(a_Chunk);
|
||||||
|
ShootVector = ShootVector * 20;
|
||||||
|
ShootVector.y = ShootVector.y + 1;
|
||||||
|
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkArrow, ShootVector);
|
||||||
|
}
|
||||||
|
|
||||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -162,8 +185,19 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||||
|
|
||||||
case E_ITEM_SNOWBALL:
|
case E_ITEM_SNOWBALL:
|
||||||
{
|
{
|
||||||
// Not working as there is no such entity yet?
|
if(Meta == E_META_DROPSPENSER_FACING_YP || Meta == E_META_DROPSPENSER_FACING_YM)
|
||||||
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball);
|
{
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball, GetShootVector(a_Chunk) * 20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vector3d ShootVector = GetShootVector(a_Chunk);
|
||||||
|
ShootVector = ShootVector * 20;
|
||||||
|
ShootVector.y = ShootVector.y + 1;
|
||||||
|
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkSnowball, ShootVector);
|
||||||
|
}
|
||||||
|
|
||||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -171,8 +205,19 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||||
|
|
||||||
case E_ITEM_EGG:
|
case E_ITEM_EGG:
|
||||||
{
|
{
|
||||||
// Not working as there is no such entity yet?
|
if(Meta == E_META_DROPSPENSER_FACING_YP || Meta == E_META_DROPSPENSER_FACING_YM)
|
||||||
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg);
|
{
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg, GetShootVector(a_Chunk) * 20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Vector3d ShootVector = GetShootVector(a_Chunk);
|
||||||
|
ShootVector = ShootVector * 20;
|
||||||
|
ShootVector.y = ShootVector.y + 1;
|
||||||
|
|
||||||
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkEgg, ShootVector);
|
||||||
|
}
|
||||||
|
|
||||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -180,7 +225,8 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||||
|
|
||||||
case E_ITEM_FIREWORK_ROCKET:
|
case E_ITEM_FIREWORK_ROCKET:
|
||||||
{
|
{
|
||||||
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFirework);
|
SpawnProjectileFromDispenser(a_Chunk, DispX, DispY, DispZ, cProjectileEntity::pkFirework, GetShootVector(a_Chunk) * 0);
|
||||||
|
|
||||||
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
m_Contents.ChangeSlotCount(a_SlotNum, -1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -196,15 +242,14 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind)
|
void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind, Vector3d a_ShootVector)
|
||||||
{
|
{
|
||||||
Vector3d Angle = GetShootVector(a_Chunk);
|
|
||||||
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(a_DispX, a_DispZ);
|
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(a_DispX, a_DispZ);
|
||||||
|
|
||||||
double EntityX = 0.5 + (a_DispX + DispChunk->GetPosX() * cChunkDef::Width);
|
double EntityX = 0.5 + (a_DispX + DispChunk->GetPosX() * cChunkDef::Width);
|
||||||
double EntityZ = 0.5 + (a_DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
|
double EntityZ = 0.5 + (a_DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
|
||||||
|
|
||||||
m_World->CreateProjectile((double) EntityX, (double) a_DispY + 0.5, (double) EntityZ, a_kind, NULL, NULL, &Angle);
|
m_World->CreateProjectile((double) EntityX, (double) a_DispY + 0.5, (double) EntityZ, a_kind, NULL, NULL, &a_ShootVector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -223,7 +268,7 @@ Vector3d cDispenserEntity::GetShootVector(cChunk & a_Chunk)
|
||||||
m.Init(Vector3d(), 0, 180, 0);
|
m.Init(Vector3d(), 0, 180, 0);
|
||||||
Look = m.Transform(Vector3d(0, 1, 0));
|
Look = m.Transform(Vector3d(0, 1, 0));
|
||||||
|
|
||||||
return Look * 20; // UP
|
return Look; // UP
|
||||||
}
|
}
|
||||||
|
|
||||||
case E_META_DROPSPENSER_FACING_YM:
|
case E_META_DROPSPENSER_FACING_YM:
|
||||||
|
@ -231,7 +276,7 @@ Vector3d cDispenserEntity::GetShootVector(cChunk & a_Chunk)
|
||||||
m.Init(Vector3d(), 0, -360, 0);
|
m.Init(Vector3d(), 0, -360, 0);
|
||||||
Look = m.Transform(Vector3d(0, -1, 0));
|
Look = m.Transform(Vector3d(0, -1, 0));
|
||||||
|
|
||||||
return Look * 20;; // DOWN
|
return Look; // DOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
|
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
|
||||||
|
@ -243,10 +288,7 @@ Vector3d cDispenserEntity::GetShootVector(cChunk & a_Chunk)
|
||||||
m.Init(Vector3d(), 0, Direction, 0);
|
m.Init(Vector3d(), 0, Direction, 0);
|
||||||
Look = m.Transform(Vector3d(0, 0, 1));
|
Look = m.Transform(Vector3d(0, 0, 1));
|
||||||
|
|
||||||
Vector3d Angle = Look * 20;
|
return Look;
|
||||||
Angle.y = Angle.y + 1;
|
|
||||||
|
|
||||||
return Angle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,12 @@ public:
|
||||||
|
|
||||||
static const char * GetClassStatic(void) { return "cDispenserEntity"; }
|
static const char * GetClassStatic(void) { return "cDispenserEntity"; }
|
||||||
|
|
||||||
|
/** Spawns a projectile of the given kind in front of the dispenser */
|
||||||
|
void SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind, Vector3d a_ShootVector); // tolua_export
|
||||||
|
|
||||||
|
/** Returns how to aim the projectile */
|
||||||
|
Vector3d GetShootVector(cChunk & a_Chunk); // tolua_export
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// cDropSpenser overrides:
|
// cDropSpenser overrides:
|
||||||
virtual void DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum) override;
|
virtual void DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum) override;
|
||||||
|
@ -29,12 +35,6 @@ private:
|
||||||
/// 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);
|
bool ScoopUpLiquid(int a_SlotNum, short a_BucketItemType);
|
||||||
|
|
||||||
// Spawns a projectile of the given kind in front of the dispenser
|
|
||||||
void SpawnProjectileFromDispenser(cChunk & a_Chunk, int & a_DispX, int & a_DispY, int & a_DispZ, cProjectileEntity::eKind a_kind);
|
|
||||||
|
|
||||||
// Returns how to aim the projectile
|
|
||||||
Vector3d GetShootVector(cChunk & a_Chunk);
|
|
||||||
|
|
||||||
/// If the a_BlockInFront is liquidable and the empty bucket can fit, does the m_Contents processing and returns true
|
/// If the a_BlockInFront is liquidable and the empty bucket can fit, does the m_Contents processing and returns true
|
||||||
bool EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum);
|
bool EmptyLiquidBucket(BLOCKTYPE a_BlockInFront, int a_SlotNum);
|
||||||
} ; // tolua_export
|
} ; // tolua_export
|
||||||
|
|
Loading…
Reference in New Issue
Block a user