Beispiel #1
0
	bool PhysicsSystem::AddRigidBody(CollisionBody* collision_body) {
		eid entity_id = collision_body->entity_id;
		
		RemoveRigidBody(entity_id);

		if (!collision_body->shape) {
			return false;
		}

		btVector3 fallInertia(0, 0, 0);
		if (collision_body->mass > 0.0) {
			if (collision_body->shape) {
				collision_body->shape->calculateLocalInertia(collision_body->mass, fallInertia);
			}
		}

		btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(collision_body->mass,
			&collision_body->motion_state, collision_body->shape.get(), fallInertia);
		auto body = new btRigidBody(fallRigidBodyCI);

		if (!body) {
			return false;
		}

		this->bodies[entity_id] = body;

		body->setUserPointer(collision_body);
		return true;
	}
Beispiel #2
0
    void DynamicsWorld::AddRigidBody(RigidBody &body, short group, short mask)
    {
        auto prevWorld = body.GetWorld();
        if (prevWorld != nullptr)
        {
            prevWorld->RemoveRigidBody(body);
        }

        body.SetWorld(this);
        this->world.addRigidBody(&body, group, mask);
    }
Beispiel #3
0
	void PhysicsSystem::On(std::shared_ptr<EntityDestroyed> data) {
		RemoveRigidBody(data->entity_id);
		this->bodies.erase(data->entity_id); // There isn't a chance it will be re-added.
	}