summaryrefslogtreecommitdiffstats
path: root/src/Mobs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Mobs')
-rw-r--r--src/Mobs/PassiveMonster.cpp36
-rw-r--r--src/Mobs/PathFinder.h2
2 files changed, 26 insertions, 12 deletions
diff --git a/src/Mobs/PassiveMonster.cpp b/src/Mobs/PassiveMonster.cpp
index 30b46500d..53288a54c 100644
--- a/src/Mobs/PassiveMonster.cpp
+++ b/src/Mobs/PassiveMonster.cpp
@@ -157,19 +157,33 @@ void cPassiveMonster::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk)
virtual bool Item(cEntity * a_Entity) override
{
- // if we're the same species as someone around and they don't have a partner, start mating with them
- if ((a_Entity->GetEntityType() == m_Me->GetEntityType()) && (a_Entity != m_Me))
+ // If the entity is not a monster, don't breed with it
+ // Also, do not self-breed
+ if ((a_Entity->GetEntityType() != etMonster) || (a_Entity == m_Me))
{
- cPassiveMonster * Me = static_cast<cPassiveMonster*>(m_Me);
- cPassiveMonster * Partner = static_cast<cPassiveMonster*>(a_Entity);
- if (Partner->IsInLove() && (Partner->GetPartner() == nullptr))
- {
- Partner->EngageLoveMode(Me);
- Me->EngageLoveMode(Partner);
- return true;
- }
+ return false;
}
- return false;
+
+ cPassiveMonster * Me = static_cast<cPassiveMonster*>(m_Me);
+ cPassiveMonster * PotentialPartner = static_cast<cPassiveMonster*>(a_Entity);
+
+ // If the potential partner is not of the same species, don't breed with it
+ if (PotentialPartner->GetMobType() != Me->GetMobType())
+ {
+ return false;
+ }
+
+ // If the potential partner is not in love
+ // Or they already have a mate, do not breed with them
+ if ((!PotentialPartner->IsInLove()) || (PotentialPartner->GetPartner() != nullptr))
+ {
+ return false;
+ }
+
+ // All conditions met, let's breed!
+ PotentialPartner->EngageLoveMode(Me);
+ Me->EngageLoveMode(PotentialPartner);
+ return true;
}
} Callback(this);
diff --git a/src/Mobs/PathFinder.h b/src/Mobs/PathFinder.h
index 1bdc13a32..213530b11 100644
--- a/src/Mobs/PathFinder.h
+++ b/src/Mobs/PathFinder.h
@@ -14,7 +14,7 @@ class cPathFinder
public:
/** Creates a cPathFinder instance. Each mob should have one cPathFinder throughout its lifetime.
@param a_MobWidth The mob width.
- @param a_MobWidth The mob height.
+ @param a_MobHeight The mob height.
*/
cPathFinder(double a_MobWidth, double a_MobHeight);