Skip to content

Commit 9b59d92

Browse files
committed
继续完善ghost与跨cellapp传送机制。
1 parent 821fa96 commit 9b59d92

18 files changed

+271
-64
lines changed

kbe/src/server/cellapp/cellapp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1598,7 +1598,7 @@ void Cellapp::reqTeleportOtherCB(Mercury::Channel* pChannel, MemoryStream& s)
15981598
// 传送成功, 我们销毁这个entity。
15991599
if(success)
16001600
{
1601-
destroyEntity(teleportEntityID, false);
1601+
//destroyEntity(teleportEntityID, false);
16021602
return;
16031603
}
16041604

kbe/src/server/cellapp/controller.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ type_(type)
3434
{
3535
}
3636

37+
//-------------------------------------------------------------------------------------
38+
Controller::Controller(Entity* pEntity):
39+
id_(0),
40+
pEntity_(pEntity),
41+
userarg_(0),
42+
pControllers_(0),
43+
type_(CONTROLLER_TYPE_NORMAL)
44+
{
45+
}
46+
3747
//-------------------------------------------------------------------------------------
3848
Controller::~Controller()
3949
{
@@ -53,17 +63,13 @@ void Controller::destroy()
5363
//-------------------------------------------------------------------------------------
5464
void Controller::addToStream(KBEngine::MemoryStream& s)
5565
{
56-
uint8 itype = (uint8)type_;
57-
s << id_ << itype << userarg_;
66+
s << id_ << userarg_;
5867
}
5968

6069
//-------------------------------------------------------------------------------------
6170
void Controller::createFromStream(KBEngine::MemoryStream& s)
6271
{
63-
uint8 itype;
64-
s >> id_ >> itype >> userarg_;
65-
66-
type_ = (ControllerType)itype;
72+
s >> id_ >> userarg_;
6773
}
6874

6975
//-------------------------------------------------------------------------------------

kbe/src/server/cellapp/controller.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class Controller
4646
};
4747

4848
Controller(Controller::ControllerType type, Entity* pEntity, int32 userarg, uint32 id = 0);
49+
Controller(Entity* pEntity);
4950
virtual ~Controller();
5051

5152
uint32 id(){ return id_; }
@@ -60,6 +61,7 @@ class Controller
6061
virtual void destroy();
6162

6263
Controller::ControllerType type(){ return type_; }
64+
void type(Controller::ControllerType t){ type_ = t; }
6365

6466
virtual void addToStream(KBEngine::MemoryStream& s);
6567
virtual void createFromStream(KBEngine::MemoryStream& s);

kbe/src/server/cellapp/controllers.cpp

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,23 @@ along with KBEngine. If not, see <http://www.gnu.org/licenses/>.
1919
*/
2020

2121
#include "controllers.hpp"
22+
#include "cellapp.hpp"
23+
#include "entity.hpp"
2224
#include "helper/profile.hpp"
2325
#include "cstdkbe/memorystream.hpp"
2426

27+
#include "proximity_controller.hpp"
28+
#include "moveto_point_handler.hpp"
29+
#include "moveto_entity_handler.hpp"
30+
#include "navigate_handler.hpp"
31+
2532
namespace KBEngine{
2633

2734

2835
//-------------------------------------------------------------------------------------
29-
Controllers::Controllers():
30-
lastid_(0)
36+
Controllers::Controllers(ENTITY_ID entityID):
37+
lastid_(0),
38+
entityID_(entityID)
3139
{
3240
}
3341

@@ -85,6 +93,8 @@ void Controllers::addToStream(KBEngine::MemoryStream& s)
8593
CONTROLLERS_MAP::iterator iter = objects_.begin();
8694
for(; iter != objects_.end(); iter++)
8795
{
96+
uint8 itype = (uint8)iter->second->type();
97+
s << itype;
8898
iter->second->addToStream(s);
8999
}
90100
}
@@ -95,8 +105,31 @@ void Controllers::createFromStream(KBEngine::MemoryStream& s)
95105
uint32 size = 0;
96106
s >> lastid_ >> size;
97107

108+
Entity* pEntity = Cellapp::getSingleton().findEntity(entityID_);
109+
KBE_ASSERT(pEntity);
110+
98111
for(uint32 i=0; i<size; i++)
99112
{
113+
uint8 itype;
114+
s >> itype;
115+
116+
Controller::ControllerType type = (Controller::ControllerType)itype;
117+
118+
Controller* pController = NULL;
119+
120+
switch(type)
121+
{
122+
case Controller::CONTROLLER_TYPE_PROXIMITY:
123+
pController = new ProximityController(pEntity);
124+
break;
125+
case Controller::CONTROLLER_TYPE_MOVE:
126+
default:
127+
KBE_ASSERT(false);
128+
break;
129+
};
130+
131+
pController->type(type);
132+
objects_[pController->id()].reset(pController);
100133
}
101134
}
102135

kbe/src/server/cellapp/controllers.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace KBEngine{
2828
class Controllers
2929
{
3030
public:
31-
Controllers();
31+
Controllers(ENTITY_ID entityID);
3232
~Controllers();
3333

3434
bool add(Controller* pController);
@@ -44,10 +44,13 @@ class Controllers
4444

4545
void addToStream(KBEngine::MemoryStream& s);
4646
void createFromStream(KBEngine::MemoryStream& s);
47+
4748
private:
4849
CONTROLLERS_MAP objects_;
4950

5051
uint32 lastid_;
52+
53+
ENTITY_ID entityID_;
5154
};
5255

5356
}

0 commit comments

Comments
 (0)