summaryrefslogtreecommitdiffstats
path: root/src/Entities/Pawn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities/Pawn.cpp')
-rw-r--r--src/Entities/Pawn.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/Entities/Pawn.cpp b/src/Entities/Pawn.cpp
index 95d1b113e..1d2542d58 100644
--- a/src/Entities/Pawn.cpp
+++ b/src/Entities/Pawn.cpp
@@ -24,6 +24,9 @@ void cPawn::Tick(float a_Dt, cChunk & a_Chunk)
iter != m_EntityEffects.end();
++iter)
{
+ // Apply entity effect
+ HandleEntityEffects(iter->first, iter->second);
+
// Reduce the effect's duration
iter->second.m_Ticks--;
@@ -58,3 +61,95 @@ void cPawn::RemoveEntityEffect(cEntityEffect::eType a_EffectType)
m_EntityEffects.erase(a_EffectType);
//m_World->BroadcastRemoveEntityEffect(*this, a_EffectType);
}
+
+
+
+
+
+void cPawn::HandleEntityEffects(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect)
+{
+ switch (a_EffectType)
+ {
+ // Default effect behaviors
+ case cEntityEffect::efInstantHealth:
+ {
+ // Base heal = 6, doubles for every increase in intensity
+ Heal(6 * std::pow(2, a_Effect.GetIntensity()));
+
+ // TODO: Harms undead
+ return;
+ }
+ case cEntityEffect::efInstantDamage:
+ {
+ // Base damage = 6, doubles for every increase in intensity
+ int damage = 6 * std::pow(2, a_Effect.GetIntensity());
+ TakeDamage(dtPotionOfHarming, a_Effect.GetUser(), damage, 0);
+
+ // TODO: Heals undead
+ return;
+ }
+ case cEntityEffect::efStrength:
+ {
+ // TODO: Implement me!
+ return;
+ }
+ case cEntityEffect::efWeakness:
+ {
+ // Damage reduction = 0.5 damage, multiplied by potion level (Weakness II = 1 damage)
+ //double dmg_reduc = 0.5 * (a_Effect.GetIntensity() + 1);
+
+ // TODO: Implement me!
+ // TODO: Weakened villager zombies can be turned back to villagers with the god apple
+ return;
+ }
+ case cEntityEffect::efRegeneration:
+ {
+ // Regen frequency = 50 ticks, divided by potion level (Regen II = 25 ticks)
+ int frequency = std::floor(50.0 / (double)(a_Effect.GetIntensity() + 1));
+
+ static short counter = 0;
+ if (++counter >= frequency)
+ {
+ Heal(1);
+ counter = 0;
+ }
+
+ // TODO: Doesn't effect undead
+ return;
+ }
+ case cEntityEffect::efPoison:
+ {
+ // Poison frequency = 25 ticks, divided by potion level (Poison II = 25 ticks)
+ int frequency = std::floor(25.0 / (double)(a_Effect.GetIntensity() + 1));
+
+ static short counter = 0;
+ if (++counter >= frequency)
+ {
+ // Cannot take poison damage when health is at 1
+ if (GetHealth() > 1)
+ {
+ TakeDamage(dtPoisoning, a_Effect.GetUser(), 1, 0);
+ }
+ counter = 0;
+ }
+
+ // TODO: Doesn't effect undead or spiders
+ return;
+ }
+ case cEntityEffect::efFireResistance:
+ {
+ // TODO: Implement me!
+ return;
+ }
+ case cEntityEffect::efSpeed:
+ {
+ // TODO: Implement me!
+ return;
+ }
+ case cEntityEffect::efSlowness:
+ {
+ // TODO: Implement me!
+ return;
+ }
+ }
+}