- Fixed an issue where dispensers would only shoot arrows (appearantly
some commits didn't come through) - Cleaned up the code according to suggestions.
This commit is contained in:
parent
e5fd782524
commit
4bc02781af
@ -198,13 +198,13 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
|||||||
|
|
||||||
void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind)
|
void cDispenserEntity::SpawnProjectileFromDispenser(cChunk & a_Chunk, int & DispX, int & DispY, int & DispZ, cProjectileEntity::eKind kind)
|
||||||
{
|
{
|
||||||
Vector3d Speed = GetProjectileLookVector(a_Chunk);
|
Vector3d Angle = GetProjectileLookVector(a_Chunk);
|
||||||
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(DispX, DispZ);
|
cChunk * DispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(DispX, DispZ);
|
||||||
|
|
||||||
double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
|
double EntityX = 0.5 + (DispX + DispChunk->GetPosX() * cChunkDef::Width);
|
||||||
double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
|
double EntityZ = 0.5 + (DispZ + DispChunk->GetPosZ() * cChunkDef::Width);
|
||||||
|
|
||||||
m_World->CreateProjectile((double) EntityX, (double) DispY + 0.5, (double) EntityZ, cProjectileEntity::pkArrow, NULL, NULL, &Speed);
|
m_World->CreateProjectile((double) EntityX, (double) DispY + 0.5, (double) EntityZ, kind, NULL, NULL, &Angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,47 +213,38 @@ Vector3d cDispenserEntity::GetProjectileLookVector(cChunk & a_Chunk)
|
|||||||
{
|
{
|
||||||
NIBBLETYPE Meta = a_Chunk.GetMeta(m_RelX, m_PosY, m_RelZ);
|
NIBBLETYPE Meta = a_Chunk.GetMeta(m_RelX, m_PosY, m_RelZ);
|
||||||
int Direction = 0;
|
int Direction = 0;
|
||||||
|
Matrix4d m;
|
||||||
|
Vector3d Look;
|
||||||
|
|
||||||
switch (Meta)
|
switch (Meta)
|
||||||
{
|
{
|
||||||
case E_META_DROPSPENSER_FACING_YP: Direction = -1; break; // UP
|
case E_META_DROPSPENSER_FACING_YP:
|
||||||
case E_META_DROPSPENSER_FACING_YM: Direction = -2; break; // DOWN
|
m.Init(Vector3d(), 0, 180, 0);
|
||||||
|
Look = m.Transform(Vector3d(0, 1, 0));
|
||||||
|
|
||||||
|
return Look * 20; // UP
|
||||||
|
break;
|
||||||
|
|
||||||
|
case E_META_DROPSPENSER_FACING_YM:
|
||||||
|
m.Init(Vector3d(), 0, -360, 0);
|
||||||
|
Look = m.Transform(Vector3d(0, -1, 0));
|
||||||
|
|
||||||
|
return Look * 20;; // DOWN
|
||||||
|
break;
|
||||||
|
|
||||||
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
|
case E_META_DROPSPENSER_FACING_XM: Direction = 90; break; // WEST
|
||||||
case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
|
case E_META_DROPSPENSER_FACING_XP: Direction = 270; break; // EAST
|
||||||
case E_META_DROPSPENSER_FACING_ZM: Direction = 180; break;
|
case E_META_DROPSPENSER_FACING_ZM: Direction = 180; break;
|
||||||
case E_META_DROPSPENSER_FACING_ZP: Direction = 0; break;
|
case E_META_DROPSPENSER_FACING_ZP: Direction = 0; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Direction >= 0)
|
m.Init(Vector3d(), 0, Direction, 0);
|
||||||
{
|
Look = m.Transform(Vector3d(0, 0, 1));
|
||||||
Matrix4d m;
|
|
||||||
m.Init(Vector3d(), 0, Direction, 0);
|
|
||||||
Vector3d Look = m.Transform(Vector3d(0, 0, 1));
|
|
||||||
|
|
||||||
Vector3d Speed = Look * 20;
|
Vector3d Angle = Look * 20;
|
||||||
Speed.y = Speed.y + 1;
|
Angle.y = Angle.y + 1;
|
||||||
|
|
||||||
return Speed;
|
return Angle;
|
||||||
|
|
||||||
} else if(Direction == -1)
|
|
||||||
{
|
|
||||||
Matrix4d m;
|
|
||||||
m.Init(Vector3d(), 0, 180, 0);
|
|
||||||
Vector3d Look = m.Transform(Vector3d(0, 1, 0));
|
|
||||||
|
|
||||||
Vector3d Speed = Look * 20;
|
|
||||||
|
|
||||||
return Speed;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
Matrix4d m;
|
|
||||||
m.Init(Vector3d(), 0, -360, 0);
|
|
||||||
Vector3d Look = m.Transform(Vector3d(0, -1, 0));
|
|
||||||
|
|
||||||
Vector3d Speed = Look * 20;
|
|
||||||
|
|
||||||
return Speed;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user