예제 #1
0
	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);
		}
	}
예제 #2
0
	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;
			}
		}
	}
예제 #3
0
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);
    }
}