mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 17:54:00 +02:00
repair collision info mismatch
This commit is contained in:
parent
36311c3007
commit
27bc394bed
9 changed files with 45 additions and 17 deletions
|
@ -42,7 +42,7 @@ function draw(deltaTime) {
|
|||
var colorGreen = { red: 0, green: 255, blue: 0 };
|
||||
var startPosition = {
|
||||
x: 2,
|
||||
y: 0,
|
||||
y: 1,
|
||||
z: 2 };
|
||||
var largeRadius = 0.5;
|
||||
var verySlow = {
|
||||
|
@ -55,9 +55,10 @@ function draw(deltaTime) {
|
|||
collisionsWillMove: true,
|
||||
position: startPosition,
|
||||
dimensions: {x: largeRadius, y: largeRadius, z: largeRadius},
|
||||
registrationPoint: { x: 0.5, y: 0.5, z: 0.5 },
|
||||
color: colorGreen,
|
||||
velocity: verySlow,
|
||||
gravity: gravity,
|
||||
//velocity: verySlow,
|
||||
//gravity: gravity,
|
||||
damping: damping,
|
||||
lifetime: 20
|
||||
};
|
||||
|
@ -71,7 +72,7 @@ function draw(deltaTime) {
|
|||
|
||||
var center = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
y: 1,
|
||||
z: 0 };
|
||||
|
||||
var entitySize = 0.1;
|
||||
|
@ -97,9 +98,10 @@ function draw(deltaTime) {
|
|||
collisionsWillMove: true,
|
||||
position: center,
|
||||
dimensions: {x: entitySize, y: entitySize, z: entitySize},
|
||||
registrationPoint: { x: 0.5, y: 0.5, z: 0.5 },
|
||||
color: color,
|
||||
velocity: velocity,
|
||||
gravity: gravity,
|
||||
//gravity: gravity,
|
||||
damping: damping,
|
||||
lifetime: 20
|
||||
};
|
||||
|
|
|
@ -2019,6 +2019,13 @@ void Application::init() {
|
|||
connect(&_entityCollisionSystem, &EntityCollisionSystem::entityCollisionWithEntity,
|
||||
ScriptEngine::getEntityScriptingInterface(), &EntityScriptingInterface::entityCollisionWithEntity);
|
||||
|
||||
// connect the _entityCollisionSystem to our EntityTreeRenderer since that's what handles running entity scripts
|
||||
connect(&_entityCollisionSystem, &EntityCollisionSystem::entityCollisionWithVoxel,
|
||||
&_entities, &EntityTreeRenderer::entityCollisionWithVoxel);
|
||||
|
||||
connect(&_entityCollisionSystem, &EntityCollisionSystem::entityCollisionWithEntity,
|
||||
&_entities, &EntityTreeRenderer::entityCollisionWithEntity);
|
||||
|
||||
// connect the _entities (EntityTreeRenderer) to our script engine's EntityScriptingInterface for firing
|
||||
// of events related clicking, hovering over, and entering entities
|
||||
_entities.connectSignalsToSlots(ScriptEngine::getEntityScriptingInterface());
|
||||
|
|
|
@ -884,3 +884,15 @@ void EntityTreeRenderer::changingEntityID(const EntityItemID& oldEntityID, const
|
|||
}
|
||||
}
|
||||
|
||||
void EntityTreeRenderer::entityCollisionWithVoxel(const EntityItemID& entityID, const VoxelDetail& voxel,
|
||||
const Collision& collision) {
|
||||
qDebug() << "EntityTreeRenderer::entityCollisionWithVoxel()... ";
|
||||
}
|
||||
|
||||
void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB,
|
||||
const Collision& collision) {
|
||||
qDebug() << "EntityTreeRenderer::entityCollisionWithEntity()... ";
|
||||
qDebug() << " idA:" << idA;
|
||||
qDebug() << " idB:" << idB;
|
||||
}
|
||||
|
||||
|
|
|
@ -106,6 +106,9 @@ public slots:
|
|||
void deletingEntity(const EntityItemID& entityID);
|
||||
void changingEntityID(const EntityItemID& oldEntityID, const EntityItemID& newEntityID);
|
||||
void entitySciptChanging(const EntityItemID& entityID);
|
||||
void entityCollisionWithVoxel(const EntityItemID& entityID, const VoxelDetail& voxel, const Collision& collision);
|
||||
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);
|
||||
|
||||
|
||||
protected:
|
||||
virtual Octree* createTree() { return new EntityTree(true); }
|
||||
|
|
|
@ -70,13 +70,13 @@ void EntityCollisionSystem::checkEntity(EntityItem* entity) {
|
|||
}
|
||||
|
||||
void EntityCollisionSystem::emitGlobalEntityCollisionWithVoxel(EntityItem* entity,
|
||||
VoxelDetail* voxelDetails, const CollisionInfo& collision) {
|
||||
VoxelDetail* voxelDetails, const Collision& collision) {
|
||||
EntityItemID entityItemID = entity->getEntityItemID();
|
||||
emit entityCollisionWithVoxel(entityItemID, *voxelDetails, collision);
|
||||
}
|
||||
|
||||
void EntityCollisionSystem::emitGlobalEntityCollisionWithEntity(EntityItem* entityA,
|
||||
EntityItem* entityB, const CollisionInfo& collision) {
|
||||
EntityItem* entityB, const Collision& collision) {
|
||||
|
||||
EntityItemID idA = entityA->getEntityItemID();
|
||||
EntityItemID idB = entityB->getEntityItemID();
|
||||
|
@ -104,7 +104,8 @@ void EntityCollisionSystem::updateCollisionWithVoxels(EntityItem* entity) {
|
|||
// the results to systems outside of this octree reference frame.
|
||||
collisionInfo._contactPoint = (float)TREE_SCALE * (entity->getPosition() + entity->getRadius() * glm::normalize(collisionInfo._penetration));
|
||||
// let the global script run their collision scripts for Entities if they have them
|
||||
emitGlobalEntityCollisionWithVoxel(entity, voxelDetails, collisionInfo);
|
||||
Collision collision(collisionInfo._contactPoint, collisionInfo._penetration);
|
||||
emitGlobalEntityCollisionWithVoxel(entity, voxelDetails, collision);
|
||||
|
||||
// we must scale back down to the octree reference frame before updating the Entity properties
|
||||
collisionInfo._penetration /= (float)(TREE_SCALE);
|
||||
|
@ -169,10 +170,10 @@ void EntityCollisionSystem::updateCollisionWithEntities(EntityItem* entityA) {
|
|||
|
||||
quint64 now = usecTimestampNow();
|
||||
|
||||
CollisionInfo collision;
|
||||
collision._penetration = penetration;
|
||||
Collision collision;
|
||||
collision.penetration = penetration;
|
||||
// for now the contactPoint is the average between the the two paricle centers
|
||||
collision._contactPoint = (0.5f * (float)TREE_SCALE) * (entityA->getPosition() + entityB->getPosition());
|
||||
collision.contactPoint = (0.5f * (float)TREE_SCALE) * (entityA->getPosition() + entityB->getPosition());
|
||||
emitGlobalEntityCollisionWithEntity(entityA, entityB, collision);
|
||||
|
||||
glm::vec3 axis = glm::normalize(penetration);
|
||||
|
|
|
@ -53,15 +53,15 @@ public:
|
|||
void updateCollisionSound(EntityItem* Entity, const glm::vec3 &penetration, float frequency);
|
||||
|
||||
signals:
|
||||
void entityCollisionWithVoxel(const EntityItemID& entityItemID, const VoxelDetail& voxel, const CollisionInfo& penetration);
|
||||
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const CollisionInfo& penetration);
|
||||
void entityCollisionWithVoxel(const EntityItemID& entityItemID, const VoxelDetail& voxel, const Collision& collision);
|
||||
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);
|
||||
|
||||
private:
|
||||
void applyHardCollision(EntityItem* entity, const CollisionInfo& collisionInfo);
|
||||
|
||||
static bool updateOperation(OctreeElement* element, void* extraData);
|
||||
void emitGlobalEntityCollisionWithVoxel(EntityItem* Entity, VoxelDetail* voxelDetails, const CollisionInfo& penetration);
|
||||
void emitGlobalEntityCollisionWithEntity(EntityItem* entityA, EntityItem* entityB, const CollisionInfo& penetration);
|
||||
void emitGlobalEntityCollisionWithVoxel(EntityItem* Entity, VoxelDetail* voxelDetails, const Collision& penetration);
|
||||
void emitGlobalEntityCollisionWithEntity(EntityItem* entityA, EntityItem* entityB, const Collision& penetration);
|
||||
|
||||
EntityEditPacketSender* _packetSender;
|
||||
VoxelTree* _voxels;
|
||||
|
|
|
@ -102,8 +102,8 @@ public slots:
|
|||
Q_INVOKABLE void dumpTree() const;
|
||||
|
||||
signals:
|
||||
void entityCollisionWithVoxel(const EntityItemID& entityID, const VoxelDetail& voxel, const CollisionInfo& collision);
|
||||
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const CollisionInfo& collision);
|
||||
void entityCollisionWithVoxel(const EntityItemID& entityID, const VoxelDetail& voxel, const Collision& collision);
|
||||
void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision);
|
||||
|
||||
void mousePressOnEntity(const EntityItemID& entityItemID, const MouseEvent& event);
|
||||
void mouseMoveOnEntity(const EntityItemID& entityItemID, const MouseEvent& event);
|
||||
|
|
|
@ -26,6 +26,7 @@ static int xColorMetaTypeId = qRegisterMetaType<xColor>();
|
|||
static int pickRayMetaTypeId = qRegisterMetaType<PickRay>();
|
||||
static int collisionMetaTypeId = qRegisterMetaType<Collision>();
|
||||
|
||||
|
||||
void registerMetaTypes(QScriptEngine* engine) {
|
||||
qScriptRegisterMetaType(engine, vec4toScriptValue, vec4FromScriptValue);
|
||||
qScriptRegisterMetaType(engine, vec3toScriptValue, vec3FromScriptValue);
|
||||
|
|
|
@ -68,6 +68,8 @@ void pickRayFromScriptValue(const QScriptValue& object, PickRay& pickRay);
|
|||
class Collision {
|
||||
public:
|
||||
Collision() : contactPoint(0.0f), penetration(0.0f) { }
|
||||
Collision(const glm::vec3& contactPoint, const glm::vec3& penetration) :
|
||||
contactPoint(contactPoint), penetration(penetration) { }
|
||||
glm::vec3 contactPoint;
|
||||
glm::vec3 penetration;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue