TBool CWeaponsTutorialLoseIfAllAmericanSoldiersDied::TutorialEventLogic() //checks if the Event Condition has been met { CGameObjectManager* lObjectManager = CFighterPilotThePacificWar::FighterGame->iGameData->GetMap()->GetObjectManager(); CPointerArray<CGameObject>*& lObjects = lObjectManager->GetAllGameObjects(); for(TInt lIndex = 0; lIndex < lObjects->GetCount(); lIndex++) { CGameObject* lCurrentGameObject = lObjects->Get(lIndex); if(lCurrentGameObject->GetConflictSide() == EConflictSideAmerican && lCurrentGameObject->GetGameObjectType() == EObjectTypesGroundUnit) { if(lCurrentGameObject->IsAlive()) return false; } } return true; //all American soldiers on the map died }
void CStandardRocket::PossibleCollision(CInterval*& aInterval) { //go through all objects and check if care to collide with them CPointerArray<CGameObject>* lGameObjects = aInterval->GetGameObjectsByType(EObjectTypesBuilding | EObjectTypesGroundUnit | EObjectTypesArmouredGroundUnit | EObjectTypesPlane | EObjectTypesShip | EObjectTypesFloor); if(iAlive) { for(TInt lCurrentObjectIndex = 0; lCurrentObjectIndex < lGameObjects->GetCount(); lCurrentObjectIndex++) { CGameObject* lCurrentGameObject = lGameObjects->Get(lCurrentObjectIndex); //only collide with alive objects if(lCurrentGameObject->IsAlive() && lCurrentGameObject != this) { //make sure the rocket doesn't collide with the object that created it if(lCurrentGameObject != iCreatorObject) { if(lCurrentGameObject->GetGameObjectType() & (EObjectTypesBuilding | EObjectTypesGroundUnit | EObjectTypesArmouredGroundUnit | EObjectTypesPlane | EObjectTypesShip)) { //special case, don't collide with Airport or Hangar buildings if(lCurrentGameObject->GetGameObjectIdentifier() != EGameObjectIdentifierAirport && lCurrentGameObject->GetGameObjectIdentifier() != EGameObjectIdentifierHangar) { TPointIntFloat* lCollisionPoint = iHitBox->IntersectionWithCollisionPointL(lCurrentGameObject->GetHitBox()); //collide if(lCollisionPoint) { //need to create an explosion here Destruct(lCollisionPoint);//alread centers the explosion relative to the collision point delete lCollisionPoint; break; } } }else if(lCurrentGameObject->GetGameObjectType() & (EObjectTypesFloor)) { TPointIntFloat* lCollisionPoint = iHitBox->IntersectionWithCollisionPointL(lCurrentGameObject->GetHitBox()); //collide if(lCollisionPoint) { //check if explosion happens on water if(lCurrentGameObject->GetGameObjectIdentifier() == EGameObjectIdentifierWater) { //need to adjust explosion since the explosion should be centered relative to the collision point lCollisionPoint->iX -= TIntFloat::Convert(EXPLOSION_100KG_IN_WATER_WIDTH) / 2;//since the collision point is at the left end of the explosion, we center it by moving the collision point left CFighterPilotThePacificWar::FighterGame->iGameData->GetMap()->AddGameObject(CExplosion100KgInWater::New(*lCollisionPoint)); }else { //need to adjust explosion since the explosion should be centered relative to the collision point lCollisionPoint->iX -= TIntFloat::Convert(EXPLOSION_100KG_WIDTH) / 2;//since the collision point is at the left end of the explosion, we center it by moving the collision point left //create explosion on Ground CFighterPilotThePacificWar::FighterGame->iGameData->GetMap()->AddGameObject(CExplosion100Kg::New(*lCollisionPoint)); } //rocket is used Up DestructWithoutExplosion(); delete lCollisionPoint; break;//only one explosion possible per bomb :) } } } } } } //clean up delete lGameObjects; }