void Charmander::fireAtEnemies() { int enemyCount = 0; for( int i = 0; i < m_Level->getEnemies().size(); i++) { Enemy* enemy = m_Level->getEnemies().at(i); if(enemy != NULL && enemy->getIsActive() == true) { if(MathUtils::withinRange(enemy->getX(),getX(),450.0f) == true || MathUtils::withinRange(enemy->getY(),getY(),450.0f == true)) { enemyCount++; Tile* targetTile = m_Level->getTileForPlayer(enemy); float centerX = targetTile->getX() + (targetTile->getWidth() / 2.0f); float centerY = targetTile->getY() + (targetTile->getHeight() / 2.0f); if(enemyCount == 1) { if(enemy->getIsActive() == true && getIsActive() == true) { fireProjectile(centerX, centerY,"FireBall",500.0f,3); } } else { break; } } } } }
void Hero::handlePlayerCollision(Projectile *projectile) { Tile* tile = m_Level->getTileForPosition(projectile->getX(), projectile->getY()); //Cycle through all the enemies and check for Collision with the projectile for(int i = 0; i < m_Level->getEnemies().size(); i++) { Enemy* enemy = m_Level->getEnemies().at(i); if(enemy != NULL && enemy->getIsActive() == true) { //Get the Tile the enemy is on Tile* enemyTile = m_Level->getTileForPlayer(enemy); //Is the projectile on the same tile as the enemy? if(tile == enemyTile) { Log::debug("Hero projectile hit an enemy"); //Apply damage to the enemy AND set The projectile to inactive enemy->applyDamage(projectile->getDamage()); projectile->setIsActive(false); } } } }
void Charmander::handlePlayerCollision(Projectile* projectile) { Tile* tile = m_Level->getTileForPosition(projectile->getX(), projectile->getY()); //cycle through all the enemesn and ceck for the collision with the projectile for(int i = 0; i < m_Level->getEnemies().size(); i ++) { Enemy* enemy = m_Level->getEnemies().at(i); if(enemy != NULL && enemy->getIsActive() == true) { //get the tile the enemy is on Tile* enemyTile = m_Level->getTileForPlayer(enemy); //is the projectile on the same tile as the emnemy? if(tile == enemyTile) { // Log::debug("Hero projectile hit an enemy"); // apply damage tot he enemt and set the projectile enemy->applyDamage(projectile->getDamage()); projectile->setIsActive(false); } } } }
void Tower::update(double delta) { // Increment the shooting timer m_ShootingTimer += delta; Player::update(delta); if(m_Level != NULL) { if(m_Target != NULL && m_Target->getIsActive()) { // Shoot a projectile if enough time has passed if(m_ShootingTimer >= m_Speed) { Tile* targetTile = m_Level->getTileForIndex( m_Level->getTileIndexForPlayer(m_Target) ); float centerX = targetTile->getX() + (targetTile->getWidth() / 2.0f); float centerY = targetTile->getY() + (targetTile->getHeight() / 2.0f); // Fire the projectile fireProjectile(centerX, centerY); // Reset the shooting timer m_ShootingTimer = 0.0; } // Rotate the tower to follow enemies float angle = atan2(getY() - m_Target->getY(), getX() - m_Target->getX()); m_Angle = angle * 180 / 3.141592; // Check to see if the target is still within range checkTargetRange(m_Target); } else { // Find a targe twithin range findTarget(); } // Set the tile's walkable state (the tower's tile location) Tile* tile = m_Level->getTileForIndex(m_Level->getTileIndexForPosition(getX(), getY())); if(tile != NULL && tile->isWalkableTile()) { tile->setHasTower(true); // Go through all the active enemies for(int i = 0; i < m_Level->m_Enemies.size(); i++) { Enemy* enemy = m_Level->m_Enemies.at(i); if(enemy != NULL && enemy->getIsActive()) { if(m_Level->getTileForChest() != NULL) { // Update their pathfinding enemy->setDestinationTile(m_Level->getTileForChest()); } } } } } }