void PhysicsSystem::On(std::shared_ptr<EntityCreated> data) { if (CollisionBodyMap::Has(data->entity_id)) { CollisionBody* collision_body = CollisionBodyMap::Get(data->entity_id); collision_body->entity_id = data->entity_id; AddRigidBody(collision_body); } }
void PhysicsSystem::On(std::shared_ptr<EntityCreated> data) { eid entity_id = data->entity.id(); for (int i = 0; i < data->entity.components_size(); ++i) { const proto::Component& comp = data->entity.components(i); switch (comp.component_case()) { case proto::Component::kCollisionBody: { CollisionBody* collision_body = new CollisionBody(); collision_body->In(comp); CollisionBodyMap::Set(entity_id, collision_body); collision_body->entity_id = entity_id; AddRigidBody(collision_body); } break; case proto::Component::kRenderable: case proto::Component::kPosition: case proto::Component::kOrientation: case proto::Component::kView: case proto::Component::kAnimation: case proto::Component::kScale: case proto::Component::kVelocity: case proto::Component::kAudioSource: case proto::Component::kPointLight: case proto::Component::kDirectionalLight: case proto::Component::kSpotLight: case proto::Component::kVoxelVolume: case proto::Component::kComputer: case proto::Component::kLuaScript: case proto::Component::COMPONENT_NOT_SET: break; } } }
void Physics::AddStaticModel(std::vector<btCollisionShape *> & collisionShapes, const btTransform & trans, bool debugDraw, const btVector3 & scale) { for (unsigned int i = 0; i < collisionShapes.size(); i++) { btCollisionShape *colShape; if (scale != btVector3(1,1,1)) colShape = new btScaledBvhTriangleMeshShape((btBvhTriangleMeshShape*)collisionShapes[i], scale); else colShape = collisionShapes[i]; btRigidBody *body = AddRigidBody(0, trans, colShape); if (!debugDraw) body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_DISABLE_VISUALIZE_OBJECT); } }