mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-15 00:08:07 -04:00
175 lines
5.0 KiB
C++
Executable File
175 lines
5.0 KiB
C++
Executable File
// ======================================================================
|
|
//
|
|
// ServerController.h
|
|
// copyright (c) 2001 Sony Online Entertainment
|
|
//
|
|
// ======================================================================
|
|
|
|
#ifndef INCLUDED_ServerController_H
|
|
#define INCLUDED_ServerController_H
|
|
|
|
// ======================================================================
|
|
|
|
#include "serverGame/ServerObject.h"
|
|
#include "sharedFoundation/Watcher.h"
|
|
#include "sharedObject/NetworkController.h"
|
|
#include "sharedMath/Transform.h"
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
class CellProperty;
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
/**
|
|
* The base class for server-side controllers.
|
|
*
|
|
*/
|
|
class ServerController : public NetworkController
|
|
{
|
|
public:
|
|
explicit ServerController (Object * newOwner);
|
|
virtual ~ServerController (void);
|
|
|
|
virtual void conclude ();
|
|
virtual void onClientReady ();
|
|
virtual void onClientLost ();
|
|
|
|
virtual void sendControllerMessage(const ObjControllerMessage& msg);
|
|
|
|
virtual const Vector & getCurrentVelocity() const;
|
|
virtual void setAuthoritative (bool newAuthoritative);
|
|
virtual void setOwner(Object *newOwner);
|
|
|
|
virtual void endBaselines();
|
|
|
|
virtual int elevatorMove (int nFloors);
|
|
virtual void teleport(Transform const &goal, ServerObject *goalObj);
|
|
|
|
|
|
/** object modification functions that should only be called on authoritative
|
|
* objects
|
|
*/
|
|
void setObjectName(const Unicode::String &name);
|
|
ServerObject * getServerOwner();
|
|
const ServerObject * getServerOwner() const;
|
|
|
|
virtual void onAppendMessage();
|
|
virtual void handleMessage (int message, float value, const MessageQueue::Data* data, uint32 flags);
|
|
virtual ServerObject const * getGoalCellObject () const;
|
|
|
|
int getMoveSequenceNumber() const;
|
|
|
|
protected:
|
|
|
|
virtual float realAlter (float time);
|
|
virtual void onMoveFailed ();
|
|
virtual void handleNetUpdateTransform (const MessageQueueDataTransform& message);
|
|
virtual void handleNetUpdateTransformWithParent (const MessageQueueDataTransformWithParent& message);
|
|
|
|
virtual void setCurrentVelocity (const Vector & newVelocity);
|
|
virtual void setGoal (Transform const & newGoal, ServerObject * goalCellObject, bool teleport = false );
|
|
virtual void moveToGoal ();
|
|
|
|
virtual bool setObjectCell (ServerObject * newCellObject);
|
|
|
|
virtual Transform const & getGoalTransform () const;
|
|
|
|
virtual void synchronizeTransform();
|
|
|
|
protected:
|
|
bool m_sendReliableTransformThisFrame;
|
|
int m_moveSequenceNumber;
|
|
|
|
private:
|
|
ServerController ();
|
|
ServerController (const ServerController & other);
|
|
ServerController& operator= (const ServerController & rhs);
|
|
|
|
void updateTransform();
|
|
|
|
private:
|
|
|
|
class MessageQueueNotification: public MessageQueue::Notification
|
|
{
|
|
public:
|
|
MessageQueueNotification();
|
|
virtual ~MessageQueueNotification();
|
|
|
|
void setController(ServerController *serverController);
|
|
virtual void onChanged() const;
|
|
|
|
private:
|
|
MessageQueueNotification(MessageQueueNotification const &);
|
|
MessageQueueNotification& operator=(MessageQueueNotification const &);
|
|
|
|
private:
|
|
ServerController *m_serverController;
|
|
};
|
|
|
|
Vector m_currentVelocity;
|
|
Vector m_oldVelocity;
|
|
|
|
|
|
Transform m_goalTransform; // where the client wants to move the server object to
|
|
Watcher<ServerObject> m_goalCellObject;
|
|
bool m_bProcessingMessages; // true while the controller is processing its message queue
|
|
bool m_bHasGoal;
|
|
bool m_bAtGoal;
|
|
bool m_bTeleport;
|
|
bool m_alteredSinceConclude;
|
|
|
|
MessageQueueNotification m_notification;
|
|
};
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
inline const Vector & ServerController::getCurrentVelocity() const
|
|
{
|
|
return m_currentVelocity;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
inline void ServerController::setCurrentVelocity(const Vector& v)
|
|
{
|
|
m_currentVelocity = v;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
inline const ServerObject * ServerController::getServerOwner() const
|
|
{
|
|
return safe_cast<const ServerObject *>(getOwner());
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
inline ServerObject * ServerController::getServerOwner()
|
|
{
|
|
return safe_cast<ServerObject *>(getOwner());
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
inline Transform const & ServerController::getGoalTransform() const
|
|
{
|
|
return m_goalTransform;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
inline ServerObject const * ServerController::getGoalCellObject() const
|
|
{
|
|
return m_goalCellObject;
|
|
}
|
|
|
|
|
|
// ======================================================================
|
|
|
|
|
|
#endif //_ServerController_H
|
|
|
|
|