bool Rectangle::collision(std::vector<Object*> objects){ if(canCollide()){ for(int i=0; i<objects.size(); i++){ if(objects[i] != this){ if(objects[i]->canCollide()){ if(collis(objects[i])){ setCollided(true); objects[i]->setCollided(true); return true; } } } } setCollided(false); } return false; }
void Shot::update(){ if (++mLife > 180){ setCollided(true); } if (touchesDangerousTile()){ setCollided(true); } if(hasCollided()){ if (--mCollidedTimer < 0){ remove(); //remove } return; } // move int cur_x = getPosition().x; int cur_y = getPosition().y; int floor_y, edge_x; int bumps; /* floor_y= cur_y+getHalfSize().y+5; if (mFacingDirection == Direction_Left){ edge_x=cur_x-getHalfSize().x; } else { edge_x=cur_x+getHalfSize().x; } */ if(mGravity[mShotType] == ShotType_Bullet){ setVelocity(float2(mInitialVelocity[mShotType].x*getDirection(),mInitialVelocity[mShotType].y)); } else { setVelocity(float2(mInitialVelocity[mShotType].x*getDirection(),mInitialVelocity[mShotType].y+GRAVITY*mLife)); } //setVelocity(float2(12.0f,.0f)); bumps=moveWithCollision(); if((bumps & Direction_Left) != 0 || (bumps & Direction_Right) != 0 || (bumps & Direction_Up) != 0|| (bumps & Direction_Down) != 0 ){ setCollided(true); if (mShotType == ShotType_GravityGrenade || mShotType == ShotType_Fireball) { Sound::playSample("data/sounds/grenadeexplode.wav"); } } if(!mHurtPlayer){ std::vector<Entity*> collidedEntity = mRoom->checkEntitiesForCollision(this); if(collidedEntity.size() > 0){ setCollided(true); if (mShotType == ShotType_GravityGrenade || mShotType == ShotType_Fireball) { Sound::playSample("data/sounds/grenadeexplode.wav"); } for(int i=0;i<collidedEntity.size();i++){ attack(collidedEntity[i]); } } } else { Hero* h = mRoom->getHero(); Entity::CollisionRect cr= h->getCollisionRect(); if(Collides(getCollisionRect(),cr)){ setCollided(true); if (mShotType == ShotType_GravityGrenade || mShotType == ShotType_Fireball) { Sound::playSample("data/sounds/grenadeexplode.wav"); } if(mShotType == ShotType_Fireball || mShotType == ShotType_Bullet){ h->die(); return; } if(mShotType == ShotType_GravityGrenade){ attack(h); return; } } } mFrame++; }