68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "assets/map.hpp"
|
|
#include "collision/dynamicsworld.hpp"
|
|
#include "net/defs.hpp"
|
|
#include "collision/object_info.hpp"
|
|
|
|
namespace game
|
|
{
|
|
|
|
using MapObjectCollisionFlags = uint32_t;
|
|
|
|
enum MapObjectCollisionFlag : MapObjectCollisionFlags
|
|
{
|
|
MAPOBJ_DESTRUCTIBLE = 0x01,
|
|
};
|
|
|
|
class MapObjectCollision : public collision::ObjectCallback
|
|
{
|
|
public:
|
|
MapObjectCollision(collision::DynamicsWorld& world, std::shared_ptr<const assets::Model> model,
|
|
net::ObjNum num, const Transform& trans, MapObjectCollisionFlags flags);
|
|
DELETE_COPY_MOVE(MapObjectCollision)
|
|
|
|
void Break();
|
|
|
|
void GetModelTransform(Transform& trans) const;
|
|
|
|
const std::shared_ptr<const assets::Model>& GetModel() const { return model_; }
|
|
btRigidBody& GetBtBody() { return *body_; }
|
|
net::ObjNum GetNum() const { return num_; }
|
|
float GetDestroyThreshold() const { return destr_th_; }
|
|
|
|
virtual ~MapObjectCollision() override;
|
|
|
|
private:
|
|
collision::DynamicsWorld& world_;
|
|
std::shared_ptr<const assets::Model> model_;
|
|
net::ObjNum num_;
|
|
std::unique_ptr<btRigidBody> body_;
|
|
float destr_th_ = 10.0f;
|
|
};
|
|
|
|
class MapInstance
|
|
{
|
|
public:
|
|
MapInstance(collision::DynamicsWorld& world, std::string mapname);
|
|
|
|
const assets::Map& GetMap() const { return *map_; }
|
|
const std::string& GetName() const { return mapname_; }
|
|
|
|
void SpawnObj(net::ObjNum objnum);
|
|
std::unique_ptr<MapObjectCollision> DestroyObj(net::ObjNum objnum);
|
|
|
|
private:
|
|
|
|
private:
|
|
collision::DynamicsWorld& world_;
|
|
std::string mapname_;
|
|
std::shared_ptr<const assets::Map> map_;
|
|
|
|
std::unique_ptr<MapObjectCollision> basemodel_col_;
|
|
std::vector<std::unique_ptr<MapObjectCollision>> obj_cols_;
|
|
|
|
};
|
|
|
|
|
|
} |