summaryrefslogtreecommitdiffstats
path: root/src/Items/ItemFishingRod.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Items/ItemFishingRod.h')
-rw-r--r--src/Items/ItemFishingRod.h52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/Items/ItemFishingRod.h b/src/Items/ItemFishingRod.h
index 0720cb3e1..012f13a6c 100644
--- a/src/Items/ItemFishingRod.h
+++ b/src/Items/ItemFishingRod.h
@@ -20,7 +20,8 @@
////////////////////////////////////////////////////////////////////////////////
// cFloaterCallback
-class cFloaterCallback
+class cFloaterCallback :
+ public cEntityCallback
{
public:
cFloaterCallback(void) :
@@ -29,14 +30,13 @@ public:
{
}
- bool operator () (cEntity & a_Entity)
+ virtual bool Item(cEntity * a_Entity) override
{
- auto & Floater = static_cast<cFloater &>(a_Entity);
- m_CanPickup = Floater.CanPickup();
- m_Pos = Floater.GetPosition();
- m_BitePos = Floater.GetBitePos();
- m_AttachedMobID = Floater.GetAttachedMobID();
- Floater.Destroy(true);
+ m_CanPickup = reinterpret_cast<cFloater *>(a_Entity)->CanPickup();
+ m_Pos = Vector3d(a_Entity->GetPosX(), a_Entity->GetPosY(), a_Entity->GetPosZ());
+ m_BitePos = reinterpret_cast<cFloater *>(a_Entity)->GetBitePos();
+ m_AttachedMobID = reinterpret_cast<cFloater *>(a_Entity)->GetAttachedMobID();
+ a_Entity->Destroy(true);
return true;
}
@@ -57,6 +57,33 @@ protected:
+////////////////////////////////////////////////////////////////////////////////
+// cSweepEntityCallback:
+
+class cSweepEntityCallback :
+ public cEntityCallback
+{
+public:
+ cSweepEntityCallback(Vector3d a_PlayerPos) :
+ m_PlayerPos(a_PlayerPos)
+ {
+ }
+
+ virtual bool Item(cEntity * a_Entity) override
+ {
+ Vector3d Speed = m_PlayerPos - a_Entity->GetPosition();
+ a_Entity->AddSpeed(Speed);
+ return true;
+ }
+
+protected:
+ Vector3d m_PlayerPos;
+} ;
+
+
+
+
+
class cItemFishingRodHandler :
public cItemHandler
{
@@ -90,13 +117,8 @@ public:
if (FloaterInfo.IsAttached())
{
- a_World->DoWithEntityByID(FloaterInfo.GetAttachedMobID(), [=](cEntity & a_Entity)
- {
- Vector3d Speed = a_Player->GetPosition() - a_Entity.GetPosition();
- a_Entity.AddSpeed(Speed);
- return true;
- }
- );
+ cSweepEntityCallback SweepEntity(a_Player->GetPosition());
+ a_World->DoWithEntityByID(FloaterInfo.GetAttachedMobID(), SweepEntity);
}
else if (FloaterInfo.CanPickup())
{