Added a few basic fields to cProjectileEntity and cArrowEntity.
This commit is contained in:
parent
9b987598bb
commit
d622267515
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
cProjectileEntity::cProjectileEntity(eKind a_Kind, cEntity * a_Creator, double a_X, double a_Y, double a_Z, double a_Width, double a_Height) :
|
cProjectileEntity::cProjectileEntity(eKind a_Kind, cEntity * a_Creator, double a_X, double a_Y, double a_Z, double a_Width, double a_Height) :
|
||||||
super(etProjectile, a_X, a_Y, a_Z, a_Width, a_Height),
|
super(etProjectile, a_X, a_Y, a_Z, a_Width, a_Height),
|
||||||
|
m_ProjectileKind(a_Kind),
|
||||||
m_Creator(a_Creator)
|
m_Creator(a_Creator)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -26,6 +27,7 @@ cProjectileEntity::cProjectileEntity(eKind a_Kind, cEntity * a_Creator, double a
|
|||||||
|
|
||||||
cProjectileEntity::cProjectileEntity(eKind a_Kind, cEntity * a_Creator, const Vector3d & a_Pos, const Vector3d & a_Speed, double a_Width, double a_Height) :
|
cProjectileEntity::cProjectileEntity(eKind a_Kind, cEntity * a_Creator, const Vector3d & a_Pos, const Vector3d & a_Speed, double a_Width, double a_Height) :
|
||||||
super(etProjectile, a_Pos.x, a_Pos.y, a_Pos.z, a_Width, a_Height),
|
super(etProjectile, a_Pos.x, a_Pos.y, a_Pos.z, a_Width, a_Height),
|
||||||
|
m_ProjectileKind(a_Kind),
|
||||||
m_Creator(a_Creator)
|
m_Creator(a_Creator)
|
||||||
{
|
{
|
||||||
SetSpeed(a_Speed);
|
SetSpeed(a_Speed);
|
||||||
@ -57,13 +59,39 @@ cProjectileEntity * cProjectileEntity::Create(eKind a_Kind, cEntity * a_Creator,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString cProjectileEntity::GetMCAClassName(void) const
|
||||||
|
{
|
||||||
|
switch (m_ProjectileKind)
|
||||||
|
{
|
||||||
|
case pkArrow: return "Arrow";
|
||||||
|
case pkSnowball: return "Snowball";
|
||||||
|
case pkEgg: return "Egg";
|
||||||
|
case pkGhastFireball: return "Fireball";
|
||||||
|
case pkFireCharge: return "SmallFireball";
|
||||||
|
case pkEnderPearl: return "ThrownEnderPearl";
|
||||||
|
case pkExpBottle: return "ThrownExpBottle";
|
||||||
|
case pkSplashPotion: return "ThrownPotion";
|
||||||
|
case pkWitherSkull: return "WitherSkull";
|
||||||
|
case pkFishingFloat: return ""; // Unknown, perhaps MC doesn't save this?
|
||||||
|
}
|
||||||
|
ASSERT(!"Unhandled projectile entity kind!");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// cArrowEntity:
|
// cArrowEntity:
|
||||||
|
|
||||||
cArrowEntity::cArrowEntity(cEntity * a_Creator, double a_X, double a_Y, double a_Z, const Vector3d a_Speed) :
|
cArrowEntity::cArrowEntity(cEntity * a_Creator, double a_X, double a_Y, double a_Z, const Vector3d a_Speed) :
|
||||||
super(pkArrow, a_Creator, a_X, a_Y, a_Z, 0.5, 0.5)
|
super(pkArrow, a_Creator, a_X, a_Y, a_Z, 0.5, 0.5),
|
||||||
|
m_PickupState(psNoPickup),
|
||||||
|
m_DamageCoeff(2)
|
||||||
{
|
{
|
||||||
SetSpeed(a_Speed);
|
SetSpeed(a_Speed);
|
||||||
|
SetMass(0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ public:
|
|||||||
pkArrow = 60,
|
pkArrow = 60,
|
||||||
pkSnowball = 61,
|
pkSnowball = 61,
|
||||||
pkEgg = 62,
|
pkEgg = 62,
|
||||||
pkGhastFireball = 63, // TODO: Unverified TypeID, check this in ProtoProxy
|
pkGhastFireball = 63,
|
||||||
pkFireCharge = 64, // TODO: Unverified TypeID, check this in ProtoProxy
|
pkFireCharge = 64,
|
||||||
pkEnderPearl = 65,
|
pkEnderPearl = 65,
|
||||||
pkExpBottle = 75,
|
pkExpBottle = 75,
|
||||||
pkSplashPotion = 73,
|
pkSplashPotion = 73,
|
||||||
@ -50,14 +50,26 @@ public:
|
|||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
|
/// Returns the kind of the projectile (fast class identification)
|
||||||
|
eKind GetProjectileKind(void) const { return m_ProjectileKind; }
|
||||||
|
|
||||||
/// Returns the entity who created this projectile; may be NULL
|
/// Returns the entity who created this projectile; may be NULL
|
||||||
cEntity * GetCreator(void) { return m_Creator; }
|
cEntity * GetCreator(void) { return m_Creator; }
|
||||||
|
|
||||||
|
/// Returns the string that is used as the entity type (class name) in MCA files
|
||||||
|
AString GetMCAClassName(void) const;
|
||||||
|
|
||||||
|
/// Returns true if the projectile has hit the ground and is stuck there
|
||||||
|
bool IsInGround(void) const { return m_IsInGround; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
eKind m_Kind;
|
eKind m_ProjectileKind;
|
||||||
|
|
||||||
/// The entity who has created this projectile; may be NULL (e. g. for dispensers)
|
/// The entity who has created this projectile; may be NULL (e. g. for dispensers)
|
||||||
cEntity * m_Creator;
|
cEntity * m_Creator;
|
||||||
|
|
||||||
|
/// True if the projectile has hit the ground and is stuck there
|
||||||
|
bool m_IsInGround;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
@ -70,13 +82,42 @@ class cArrowEntity :
|
|||||||
typedef cProjectileEntity super;
|
typedef cProjectileEntity super;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/// Determines when the arrow can be picked up (depending on player gamemode). Corresponds to the MCA file "pickup" field
|
||||||
|
enum ePickupState
|
||||||
|
{
|
||||||
|
psNoPickup = 0,
|
||||||
|
psInSurvivalOrCreative = 1,
|
||||||
|
psInCreative = 2,
|
||||||
|
} ;
|
||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
|
/// Creates a new arrow with psNoPickup state and default damage modifier coeff
|
||||||
cArrowEntity(cEntity * a_Creator, double a_X, double a_Y, double a_Z, const Vector3d a_Speed);
|
cArrowEntity(cEntity * a_Creator, double a_X, double a_Y, double a_Z, const Vector3d a_Speed);
|
||||||
|
|
||||||
|
/// Returns whether the arrow can be picked up by players
|
||||||
|
ePickupState GetPickupState(void) const { return m_PickupState; }
|
||||||
|
|
||||||
|
/// Sets a new pickup state
|
||||||
|
void SetPickupState(ePickupState a_PickupState) { m_PickupState = a_PickupState; }
|
||||||
|
|
||||||
|
/// Returns the damage modifier coeff.
|
||||||
|
double GetDamageCoeff(void) const { return m_DamageCoeff; }
|
||||||
|
|
||||||
|
/// Sets the damage modifier coeff
|
||||||
|
void SetDamageCoeff(double a_DamageCoeff) { m_DamageCoeff = a_DamageCoeff; }
|
||||||
|
|
||||||
|
/// Returns true if the specified player can pick the arrow up
|
||||||
|
bool CanPickup(const cPlayer & a_Player) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
/// Determines when the arrow can be picked up by players
|
||||||
|
ePickupState m_PickupState;
|
||||||
|
|
||||||
|
/// The coefficient applied to the damage that the arrow will deal, based on the bow enchantment. 2.0 for normal arrow
|
||||||
|
double m_DamageCoeff;
|
||||||
|
|
||||||
// cEntity overrides:
|
// cEntity overrides:
|
||||||
virtual void SpawnOn(cClientHandle & a_Client) override;
|
virtual void SpawnOn(cClientHandle & a_Client) override;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user