Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,110 @@
|
||||
#pragma once
|
||||
|
||||
#include <dtEntity/component.h>
|
||||
#include <dtEntity/entity.h>
|
||||
#include <dtEntity/defaultentitysystem.h>
|
||||
#include <dtEntity/dynamicproperty.h>
|
||||
#include <dtEntity/scriptaccessor.h>
|
||||
#include <osg/Referenced>
|
||||
#include <osg/PositionAttitudeTransform>
|
||||
#include <dtEntityOSG/layercomponent.h>
|
||||
#include <dtEntityOSG/osgdebugdrawinterface.h>
|
||||
#include "buildingmanager.h"
|
||||
#include <set>
|
||||
|
||||
namespace dtEntityOSG
|
||||
{
|
||||
class TransformComponent;
|
||||
}
|
||||
|
||||
namespace VCtrl
|
||||
{
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
class PlayerComponent final : public dtEntity::Component
|
||||
{
|
||||
public:
|
||||
static const dtEntity::StringId TYPE;
|
||||
|
||||
PlayerComponent() = default;
|
||||
|
||||
virtual dtEntity::ComponentType GetType() const override { return TYPE; }
|
||||
|
||||
virtual bool IsInstanceOf(dtEntity::ComponentType id) const
|
||||
{
|
||||
return ((id == TYPE));
|
||||
}
|
||||
|
||||
void OnAddedToEntity(dtEntity::Entity &entity) override;
|
||||
|
||||
void OnRemovedFromEntity(dtEntity::Entity &entity) override;
|
||||
|
||||
dtEntity::Entity *GetEntity() const { return mEntity; }
|
||||
|
||||
void PlaceAt(const osg::Vec3d& _goal, const VCtrl::OBB& obb, int roomNumber, const std::string& roomname);
|
||||
|
||||
struct Command : public osg::Referenced
|
||||
{
|
||||
double mStartTime = 0;
|
||||
Command(double startTime) : mStartTime(startTime) {}
|
||||
virtual ~Command() = default;
|
||||
virtual void Execute(PlayerComponent *component) = 0;
|
||||
};
|
||||
|
||||
void AddCommand(Command *c) { mCommands.insert(c); }
|
||||
size_t GetNumCommands() const { return mCommands.size(); }
|
||||
void ExecuteCommands(double timenow);
|
||||
void DeleteQueuedCommands();
|
||||
|
||||
dtEntityOSG::TransformComponent *GetTransform();
|
||||
|
||||
osg::Vec4 GetColor() const;
|
||||
void SetColor(const osg::Vec4 &);
|
||||
|
||||
dtEntity::StringId GetCurrentCellGroup() const { return mCurrentCellGroup; }
|
||||
dtEntity::StringId GetCurrentRoom() const { return mCurrentRoom; }
|
||||
dtEntity::StringId GetPreviousRoom() const { return mPreviousRoom; }
|
||||
|
||||
private:
|
||||
void PositionOnMesh(const VCtrl::OBB&, osg::Vec3d& pos, const std::string& roomname);
|
||||
dtEntity::Entity *mEntity = nullptr;
|
||||
|
||||
using Commands = std::set<osg::ref_ptr<Command>>;
|
||||
Commands mCommands;
|
||||
|
||||
dtEntityOSG::TransformComponent *mTransform = nullptr;
|
||||
osg::Vec4f mColor;
|
||||
dtEntity::StringId mCurrentCellGroup = dtEntity::StringId();
|
||||
dtEntity::StringId mCurrentRoom = dtEntity::StringId();
|
||||
dtEntity::StringId mPreviousRoom = dtEntity::StringId();
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
class PlayerSystem final
|
||||
: public dtEntity::DefaultEntitySystem<PlayerComponent>
|
||||
, public dtEntity::ScriptAccessor
|
||||
{
|
||||
|
||||
public:
|
||||
static const dtEntity::StringId TYPE;
|
||||
|
||||
explicit PlayerSystem(dtEntity::EntityManager &em);
|
||||
|
||||
void OnTick(const dtEntity::Message &m);
|
||||
|
||||
void ShowHidePlayer(dtEntity::EntityId eid, bool show, double when);
|
||||
void TeleportToTarget(dtEntity::EntityId id, double when, const osg::Vec3d &goal, const VCtrl::OBB &obb, int roomNumber, const std::string &roomname);
|
||||
void PlayerShoot(int32_t id, dtEntity::EntityId shooterid, dtEntity::EntityId targetid,
|
||||
const Vec3d &shooterPos, const Vec3d &targetPos,
|
||||
int buildingIdSrc, int roomNumberSrc, int buildingIdDst, int roomNumberDst, int lineType,
|
||||
double when, double duration);
|
||||
void RemovePlayerShoot(int32_t id, double when);
|
||||
|
||||
// delete commands from all players
|
||||
void DeleteQueuedCommands();
|
||||
|
||||
private:
|
||||
dtEntity::MessageFunctor mTickFunctor;
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user