Pārlūkot izejas kodu

implement takeDamage method on entities

Kolja Strohm 1 mēnesi atpakaļ
vecāks
revīzija
20aa5c2656
4 mainītis faili ar 18 papildinājumiem un 7 dzēšanām
  1. 4 3
      FactoryCraft/Animal.cpp
  2. 4 1
      FactoryCraft/Animal.h
  3. 8 2
      FactoryCraft/Entity.cpp
  4. 2 1
      FactoryCraft/Entity.h

+ 4 - 3
FactoryCraft/Animal.cpp

@@ -31,13 +31,14 @@ bool Animal::interact(Item* zItem, Entity* zActor)
     return false;
 }
 
-void Animal::takeDamage(Entity* zSource, float damage)
+void Animal::takeDamage(
+    Entity* zSource, Item* zUsedItem, ItemSkill* zUsedSkill, float damage)
 {
     if (damage > 0)
     {
         ai->onDamage(zSource, damage);
     }
-    Entity::takeDamage(zSource, damage);
+    Entity::takeDamage(zSource, zUsedItem, zUsedSkill, damage);
 }
 
 void Animal::tick(const Dimension* zDimension)
@@ -73,7 +74,7 @@ Entity* AnimalEntityType::createEntity(
     Framework::Vec3<float> position, int dimensionId, int entityId) const
 {
     Animal* result = new Animal(getId(), position, dimensionId, entityId);
-    //result->setAI(Game::INSTANCE->zTypeRegistry()->fromJson<AnimalAI>(ai));
+    // result->setAI(Game::INSTANCE->zTypeRegistry()->fromJson<AnimalAI>(ai));
     return result;
 }
 

+ 4 - 1
FactoryCraft/Animal.h

@@ -17,7 +17,10 @@ public:
     ~Animal();
     void setAI(AnimalAI* ai);
     bool interact(Item* zItem, Entity* zActor) override;
-    void takeDamage(Entity* zSource, float damage) override;
+    void takeDamage(Entity* zSource,
+        Item* zUsedItem,
+        ItemSkill* zUsedSkill,
+        float damage) override;
     void tick(const Dimension* zDimension) override;
 };
 

+ 8 - 2
FactoryCraft/Entity.cpp

@@ -788,9 +788,15 @@ void Entity::setPosition(Framework::Vec3<float> pos)
     location = pos;
 }
 
-void Entity::takeDamage(Entity* zSource, float damage)
+void Entity::takeDamage(
+    Entity* zSource, Item* zUsedItem, ItemSkill* zUsedSkill, float damage)
 {
-    // TODO: implement this
+    currentHP -= damage;
+    if (currentHP <= 0)
+    {
+        currentHP = 0;
+        onDeath(zSource, zUsedItem, zUsedSkill);
+    }
 }
 
 void Entity::setHP(

+ 2 - 1
FactoryCraft/Entity.h

@@ -113,7 +113,8 @@ public:
     virtual Framework::XML::Element* getTargetUIML() const;
     void setChatSecurityLevel(int level);
     void setPosition(Framework::Vec3<float> pos);
-    virtual void takeDamage(Entity* zSource, float damage);
+    virtual void takeDamage(
+        Entity* zSource, Item* zUsedItem, ItemSkill* zUsedSkill, float damage);
     void setHP(
         Entity* zActor, Item* zUsedItem, ItemSkill* zUsedSkill, float hp);
     void setStamina(float stamina);