Esempio n. 1
0
	foreach (QGraphicsItem *item, collidingItems()){
		if (item->zValue() == zValue() - 1){
			QString kind = item->data(0).toString();

			if ((kind == "Object") || (kind == "Robot")){
				hide();
				m_bulletTime->stop();

				emit bulletCollision(item);
			}
		}
	}
Esempio n. 2
0
bool Sprite::update()
{
    // Delete colliding bullets
    for (auto i = game.bullets.begin(); i != game.bullets.end();)
    {
        if (bulletCollision(*i))
        {
            delete (*i);
            game.bullets.erase(i++);
        }
        ++i;
    }
    return true;
}
Esempio n. 3
0
void Room::update(float time, glm::vec3 player_pos) {
    /*CREACION DE BALAS*/
    for (Enemy *enemy : enemies){
        if (enemy->type() == 3 and ((Arbok*)enemy)->isShooting()){ // Arbok, puede tener una bala
            glm::vec3 dirBullet = glm::normalize(player_pos - enemy->position());
            glm::vec3 posBullet = enemy->position() + dirBullet * enemy->radius() * 2.0f;
            enemies.push_back(new Bullet(posBullet,dirBullet,0,enemy->getPower()*2,enemy->radius()));
        } // otro enemigo dispara 8 balas
    }

    /*REBOTE EN LAS PAREDES */
    for (Enemy *enemy : enemies) {
        glm::vec3 nextpos = enemy->stepTest(time, player_pos);
        RoomWhere npos = where(nextpos.x, nextpos.z, enemy->radius());
        if (npos == CAN_BE  and !enemiesCollision(enemy,nextpos))
            enemy->step();
        else if(npos == COLLISION and enemy->type() == 4)
            enemy->step();
        else if (npos == E_COLLISION or npos == W_COLLISION)
            enemy->reflectDirection(-1,1);
        else if (npos == N_COLLISION or npos == S_COLLISION)
            enemy->reflectDirection(1,-1);
        else if (npos > CAN_BE and enemy->type() == 4) //bala muere en las puertas
            enemy->receiveImpact(1);
    }

    /*calcular colisiones de las balas*/
    for (Enemy *enemy : enemies) {
        int damage = bulletCollision(enemy);
        if (damage>0)
            enemy->receiveImpact(damage);
    }

    for (ParticleEngine *pe : particles)
        pe->step(time);
    removeDead();
}
//-------------------------------------------------------------------------------------
bool MainApplication::frameRenderingQueued(const Ogre::FrameEvent& evt)
{
    if(mWindow->isClosed())
    return false;

    if(mShutDown)
        return false;

    //Need to capture/update each device
    mKeyboard->capture();
    mMouse->capture();

    Ogre::Vector3 shotsSpeed(500, 0, 0);
    Ogre::Vector3 enemySpeed(-500, rand() % 10 - 5, 0);

    Ogre::Vector3 playerPosition = mSceneMgr -> getSceneNode("NinjaNode")->getPosition();
    Ogre::Vector3 playerDirection = mSceneMgr -> getSceneNode("NinjaNode") -> getOrientation() * Ogre::Vector3(0,0,1);
    //Ogre::Vector3 direction = mSceneMgr -> getSceneNode("NinjaNode") ->_getDerivedOrientation() * Ogre::Vector3::NEGATIVE_UNIT_Z;

    if(playerCollision(playerPosition, playerDirection))
    {
        mSceneMgr -> getSceneNode("NinjaNode") -> setPosition(Ogre::Vector3(0, 0, -500));
    }


    mTrayMgr->frameRenderingQueued(evt);
    mSceneMgr -> getSceneNode("NinjaNode") -> translate(mDirection * evt.timeSinceLastFrame, Ogre::Node::TS_WORLD);
    if(shotCounter)
    {
        //Ogre::String number2 = Ogre::StringConverter::toString(shotCounter); 
        for(int i = 0; i < shots.size(); i++)
        {
            Ogre::Vector3 shotPosition = mSceneMgr -> getSceneNode(shots[i])->getPosition();
            Ogre::Vector3 shotDirection = mSceneMgr -> getSceneNode(shots[i]) -> getOrientation() * Ogre::Vector3(0,0,1);
            if(bulletCollision(shotPosition, shotDirection))
            {
                mSceneMgr -> getSceneNode("NinjaNode") -> setPosition(Ogre::Vector3(0, 0, 0));
                //mDistance = Ogre::Vector3::ZERO;
               //mShutDown = true;
            }
            mSceneMgr -> getSceneNode(shots[i]) -> translate(shotsSpeed * evt.timeSinceLastFrame, Ogre::Node::TS_WORLD);
        }
    }
    if(enemyCounter)
    {
        //Ogre::String number = Ogre::StringConverter::toString(enemyCounter); 
        for(int i = 0; i < enemies.size(); i++)
        {
            mSceneMgr -> getSceneNode(enemies[i]) -> translate(enemySpeed * evt.timeSinceLastFrame, Ogre::Node::TS_WORLD);
        }
    }
    //enemytranslate
    mDistance = mSceneMgr-> getSceneNode("NinjaNode")->getPosition();
    if(mDistance.x >= MAX_RIGHT) 
    {
        mDirection.x = 0;
        mSceneMgr -> getSceneNode("NinjaNode") -> setPosition(Ogre::Vector3(MAX_RIGHT, mDistance.y, mDistance.z));
    }
    if(mDistance.x <= MAX_LEFT)
    {
        mDirection.x = 0;
        mSceneMgr -> getSceneNode("NinjaNode") -> setPosition(Ogre::Vector3(MAX_LEFT, mDistance.y, mDistance.z));
    }
    if(mDistance.y >= MAX_UP) 
    {
        mDirection.y = 0;
        mSceneMgr -> getSceneNode("NinjaNode") -> setPosition(Ogre::Vector3(mDistance.x, MAX_UP, mDistance.z));
    }
    if(mDistance.y <= MAX_DOWN) 
    {
        mDirection.y = 0;
        mSceneMgr -> getSceneNode("NinjaNode") -> setPosition(Ogre::Vector3(mDistance.x, MAX_DOWN, mDistance.z));
    }
    timer++;
    if(timer%20 == 0)
    {
        spawn_enemy();
    }
    return true;
}