void render_playing_state() { // Render the background. al_clear_to_color( al_map_rgb( 105, 230, 255 ) ); for( int i = 0; i < block_map->getLength(); ++i ) { for( int j = 0; j < block_map->getHeight(); ++j ) { if( block_map->getBlock( i, j ).getBlockType() ) { al_draw_bitmap( tiles[ block_map->getBlock( i, j ).getBlockType() - 1 ], i * 32 + GLOBAL_RENDER_OFFSET, j * 32, 0 ); } } } // Rendering code goes here BOOST_FOREACH( m_element tmp, objs ) { ((GameObject*)(tmp.second))->render(); } BOOST_FOREACH( m_element tmp, enemies ) { EnemyObject* enemy = ((EnemyObject*)(tmp.second)); std::cerr << (int)enemy->getID() << " " <<(int)enemy->getX() << std::endl; enemy->render(); }
bool Ned3DObjectManager::interactEnemyTerrain(EnemyObject &enemy, TerrainObject &terrain) { Terrain *terr = terrain.getTerrain(); if(terr == NULL) return false; //test for enemy collision with terrain Vector3 enemyPos = enemy.getPosition(); float terrainHeight = terr->getHeight(enemyPos.x,enemyPos.z); if (enemyPos.y < terrainHeight) { enemyPos.y = terrainHeight; //enemy.setPPosition(enemyPos); int tmpHndl = gParticle.createSystem("enemyfeatherssplat"); gParticle.setSystemPos(tmpHndl, enemyPos); int thumpSound = gSoundManager.requestSoundHandle("Thump.wav"); int instance = gSoundManager.requestInstance(thumpSound); if(thumpSound != SoundManager::NOINSTANCE) { gSoundManager.setPosition(thumpSound,instance,enemyPos); gSoundManager.play(thumpSound,instance); gSoundManager.releaseInstance(thumpSound,instance); } enemy.killObject(); return true; } return false; }
// The main loop itself void GameLogicCtrlr::LoopGame() { if(!launchEnemies) { launchEnemies = true; // Mark time stamp this->launchTimeStamp = (long int) std::time(NULL) + this->launchTimeInterval; EnemyObject* enemy; float randSpawnPos; float randScale; // Make some enemies for(int i = 1; i < 6; i++) { randSpawnPos = GameLogicCtrlr::GetRandomNumber((int) EDGE_BORDER); enemy = NULL; enemy = new EnemyObject(glm::vec3(0.0f, randSpawnPos, ENEMY_SPAWN_HEIGHT)); randScale = ((GameLogicCtrlr::GetRandomNumber(2) + 2) / 2.0f) + 0.5f; enemy->SetScale(randScale, randScale, randScale); GameObjectCtrlr::GetInstance()->Add(enemy); } } if( ((long int) std::time(NULL) > this->launchTimeStamp) && launchEnemies) { launchEnemies = false; } }
void EnemySpawner::spawnCountOfEnemy(const SpawnerInfo& enemyToSpawnNow, GameData * _gameData ) { for(int i = enemyToSpawnNow.amount; i > 0; i --) { //EnemyCollection& enemysColl = _gameData->getEnemys(); BaseCollection<ShipPrefab, EnemyObject>& enemiesCollection = _gameData->getEnemies(); EnemyObject * tmpEnemy = _gameData->instantiateEnemy(enemyToSpawnNow.prefabID, AI_TYPE::fighter); Vector3 newPosition = myPosition + Vector3(200.0*(i-1), 0.0, 0.0); tmpEnemy->setPosition(newPosition); EffectObject * spawnEffect = _gameData->instantiateEffect(enemyToSpawnNow.spawnEffectID); spawnEffect->setPosition(newPosition); } }
void Ned3DObjectManager::shootEnemy(EnemyObject &enemy) { int tmpHndl = gParticle.createSystem("enemyfeathers"); Vector3 enemyPos = enemy.getPosition(); gParticle.setSystemPos(tmpHndl, enemyPos); int deathSound = gSoundManager.requestSoundHandle("enemydeath.wav"); int deathInstance = gSoundManager.requestInstance(deathSound); if(deathInstance != SoundManager::NOINSTANCE) { gSoundManager.setPosition(deathSound,deathInstance,enemyPos); gSoundManager.play(deathSound,deathInstance); gSoundManager.releaseInstance(deathSound,deathInstance); } enemy.setDying(); }
bool Ned3DObjectManager::interactPlaneEnemy(PlaneObject &plane, EnemyObject &enemy) { bool collided = enforcePositions(plane, enemy); if(collided && !enemy.isDying()) { shootEnemy(enemy); plane.damage(1); } return collided; }
unsigned int Ned3DObjectManager::spawnEnemy(const Vector3 &position, const Vector3 &circleCenter, float speed, bool flyLeft) { if(m_enemyModel == NULL) m_enemyModel = m_models->getModelPointer("Enemy"); // Cache enemy model if(m_enemyModel == NULL) return 0; // Still NULL? No such model EnemyObject *enemy = new EnemyObject(m_enemyModel); enemy->setSpeed(speed); enemy->setPosition(position); enemy->setCirclingParameters(circleCenter, flyLeft); enemy->setMovementPattern(EnemyObject::MP_CIRCLING); unsigned int id = addObject(enemy); addPhysics(enemy,true); enemy->setPPosition(position.x,position.y,position.z); m_enemys.insert(enemy); m_startingEnemies++; return id; }
unsigned int Ned3DObjectManager::spawnEnemy(const Vector3 &position, const EulerAngles &orientation, float speed) { if(m_enemyModel == NULL) m_enemyModel = m_models->getModelPointer("Enemy"); // Cache enemy model if(m_enemyModel == NULL) return 0; // Still NULL? No such model EnemyObject *enemy = new EnemyObject(m_enemyModel); enemy->setSpeed(speed); enemy->setPosition(position); enemy->setOrientation(orientation); enemy->setMovementPattern(EnemyObject::MP_STRAIGHT); unsigned int id = addObject(enemy); addPhysics(enemy,true); enemy->setPPosition(position.x,position.y,position.z); m_enemys.insert(enemy); m_startingEnemies++; return id; }