1
0

Added a few basic fields to cProjectileEntity and cArrowEntity.

This commit is contained in:
madmaxoft 2013-08-22 22:31:15 +02:00
parent 9b987598bb
commit d622267515
2 changed files with 73 additions and 4 deletions

View File

@ -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);
} }

View File

@ -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;