Esempio n. 1
0
bool Garage::isObjectInsideGarage(GameObject* object) const {
    auto p = object->getPosition();

    // Do basic check first
    if (p.x < min.x) return false;
    if (p.y < min.y) return false;
    if (p.z < min.z) return false;
    if (p.x > max.x) return false;
    if (p.y > max.y) return false;
    if (p.z > max.z) return false;

    // Now check if all collision spheres are inside
    // garage's bounding box
    auto objectModel = object->getModelInfo<BaseModelInfo>();
    auto collision = objectModel->getCollision();
    // Peds don't have collisions currently?
    if (collision) {
        for (auto& sphere : collision->spheres) {
            auto c = p + sphere.center;
            auto r = sphere.radius;
            if (c.x + r < min.x) return false;
            if (c.y + r < min.y) return false;
            if (c.z + r < min.z) return false;
            if (c.x - r > max.x) return false;
            if (c.y - r > max.y) return false;
            if (c.z - r > max.z) return false;
        }
    }

    return true;
}
Esempio n. 2
0
ofxMSAPhysics* ofxMSAPhysics::removeFromCollision(ofxMSAParticle* p) {
	for(int i=0; i<numberOfCollisions(); i++) {
		ofxMSAConstraint *c = getCollision(i);
		if(c->_a == p || c->_b == p) c->kill();
	}
	return this;
}
Esempio n. 3
0
    void iPhysics::destroyCollision(uint64 collisionID)
    {
        iPhysicsCollision* collision = getCollision(collisionID);

        if (collision != nullptr)
        {
            destroyCollision(collision);
        }
    }
void CWorldManager::runPeople()
{
	for(unsigned int i = 0; i < person_manager.size(); i++)
	{
		person_manager[i]->run();
		for(unsigned int n = 0; n < person_manager.size(); n++)
		{
			if(person_manager[n] != person_manager[i])
			{
				//battle it out automatically
				if(getCollision(person_manager[n], person_manager[i]))
				{
					createBattle(player,person_manager[i]);
				}
			}
		}
	}
}
Esempio n. 5
0
Garage::Garage(GameWorld* engine_, size_t id_, const glm::vec3& coord0,
               const glm::vec3& coord1, Type type_)
    : engine(engine_), id(id_), type(type_) {
    min.x = std::min(coord0.x, coord1.x);
    min.y = std::min(coord0.y, coord1.y);
    min.z = std::min(coord0.z, coord1.z);

    max.x = std::max(coord0.x, coord1.x);
    max.y = std::max(coord0.y, coord1.y);
    max.z = std::max(coord0.z, coord1.z);

    glm::vec2 midpoint;
    midpoint.x = (min.x + max.x) / 2;
    midpoint.y = (min.y + max.y) / 2;

    // Find door objects for this garage
    for (const auto& p : engine->instancePool.objects) {
        const auto inst = static_cast<InstanceObject*>(p.second.get());

        if (!inst->getModel()) {
            continue;
        }

        if (!SimpleModelInfo::isDoorModel(
                inst->getModelInfo<BaseModelInfo>()->name)) {
            continue;
        }

        const auto instPos = inst->getPosition();
        const auto xDist = std::abs(instPos.x - midpoint.x);
        const auto yDist = std::abs(instPos.y - midpoint.y);

        if (xDist < 20.f && yDist < 20.f) {
            if (!doorObject) {
                doorObject = inst;
                continue;
            } else {
                secondDoorObject = inst;
            }
        }
    }

    if (doorObject) {
        startPosition = doorObject->getPosition();

        // Setup door height based on model's bounding box
        auto doorModel = doorObject->getModelInfo<BaseModelInfo>();
        auto collision = doorModel->getCollision();
        // Original behavior - game actually subtracts 0.1f
        doorHeight =
            collision->boundingBox.max.z - collision->boundingBox.min.z - 0.1f;
    }

    if (secondDoorObject) {
        startPositionSecondDoor = secondDoorObject->getPosition();
    }

    step /= doorHeight;

    switch (type) {
        case Garage::Type::Mission:
        case Garage::Type::CollectCars1:
        case Garage::Type::CollectCars2:
        case Garage::Type::MissionForCarToComeOut:
        case Garage::Type::MissionKeepCar:
        case Garage::Type::Hideout1:
        case Garage::Type::Hideout2:
        case Garage::Type::Hideout3:
        case Garage::Type::MissionToOpenAndClose:
        case Garage::Type::MissionForSpecificCar:
        case Garage::Type::MissionKeepCarAndRemainClosed: {
            state = State::Closed;
            break;
        }

        case Garage::Type::BombShop1:
        case Garage::Type::BombShop2:
        case Garage::Type::BombShop3:
        case Garage::Type::Respray:
        case Garage::Type::Crusher: {
            state = State::Opened;
            break;
        }
    }

    if (state == State::Closed) {
        fraction = 0.f;
    } else {
        fraction = 1.f;
    }

    if (doorObject) {
        updateDoor();
    }
}
WeaponItem* WeaponManager::getItem(std::string name) {
	return new WeaponItem(getWeapon(name), getCollision(name));
}