refactor Entities
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#define VC_ENABLE_REFLECTION
|
||||
|
||||
#include "Rigidbody.hpp"
|
||||
|
||||
#include "EntityDef.hpp"
|
||||
#include "Entities.hpp"
|
||||
#include "Entity.hpp"
|
||||
#include "data/dv_util.hpp"
|
||||
#include "logic/scripting/scripting.hpp"
|
||||
|
||||
dv::value Rigidbody::serialize(bool saveVelocity, bool saveBodySettings) const {
|
||||
auto bodymap = dv::object();
|
||||
if (!enabled) {
|
||||
bodymap["enabled"] = false;
|
||||
}
|
||||
if (saveVelocity) {
|
||||
bodymap["vel"] = dv::to_value(hitbox.velocity);
|
||||
}
|
||||
if (saveBodySettings) {
|
||||
bodymap["damping"] = hitbox.linearDamping;
|
||||
bodymap["type"] = BodyTypeMeta.getNameString(hitbox.type);
|
||||
if (hitbox.crouching) {
|
||||
bodymap["crouch"] = hitbox.crouching;
|
||||
}
|
||||
}
|
||||
return bodymap;
|
||||
}
|
||||
|
||||
template <void (*callback)(const Entity&, size_t, entityid_t)>
|
||||
static sensorcallback create_sensor_callback(Entities& entities) {
|
||||
return [&entities](auto entityid, auto index, auto otherid) {
|
||||
if (auto entity = entities.get(entityid)) {
|
||||
if (entity->isValid()) {
|
||||
callback(*entity, index, otherid);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void Rigidbody::initialize(
|
||||
const EntityDef& def, entityid_t id, Entities& entities
|
||||
) {
|
||||
sensors.resize(def.radialSensors.size() + def.boxSensors.size());
|
||||
for (auto& [i, box] : def.boxSensors) {
|
||||
SensorParams params {};
|
||||
params.aabb = box;
|
||||
sensors[i] = Sensor {
|
||||
true,
|
||||
SensorType::AABB,
|
||||
i,
|
||||
id,
|
||||
params,
|
||||
params,
|
||||
{},
|
||||
{},
|
||||
create_sensor_callback<scripting::on_sensor_enter>(entities),
|
||||
create_sensor_callback<scripting::on_sensor_exit>(entities)};
|
||||
}
|
||||
for (auto& [i, radius] : def.radialSensors) {
|
||||
SensorParams params {};
|
||||
params.radial = glm::vec4(radius);
|
||||
sensors[i] = Sensor {
|
||||
true,
|
||||
SensorType::RADIUS,
|
||||
i,
|
||||
id,
|
||||
params,
|
||||
params,
|
||||
{},
|
||||
{},
|
||||
create_sensor_callback<scripting::on_sensor_enter>(entities),
|
||||
create_sensor_callback<scripting::on_sensor_exit>(entities)};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user