• AlienMechs.cpp
  • #include "../Game.h"
    
    void Game::AlienSpeedUp(int delta) {
        if(AlienVariables::next_speed_up <= delta) {
            AlienVariables::next_speed_up += 10000 - delta; 
            AlienVariables::speed = std::min(AlienVariables::speed_up_factor * AlienVariables::speed, 400.f); 
            AlienVariables::speed_up_factor = std::min(AlienVariables::speed_up_factor + 0.25, 1.75);
            AlienVariables::laser_speed = std::min(AlienVariables::laser_speed + 3, 20); 
        } else {
            AlienVariables::next_speed_up -= delta; 
        }
    }
    
    void Game::AlienCountUp(int delta) {
        if(AlienVariables::next_maximum_up <= delta) {
            AlienVariables::max += AlienVariables::maximum_up; 
            AlienVariables::next_maximum_up += 10000 - delta; 
            AlienVariables::next_check_original = std::max(300, AlienVariables::next_check - 200);
        } else {
            AlienVariables::next_maximum_up -= delta; 
        }
    }
    
    void Game::AddAlien(int delta) {
        if(AlienVariables::next_check <= delta) {
            if(float(rand()) / RAND_MAX < (1.f - aliens.GetSize() / AlienVariables::max)) {
                aliens.AddNew(Point {rand() % 800 + 100, 0}, alien.CreateAnimation()); 
            }
            AlienVariables::next_check += AlienVariables::next_check_original - delta;
            return;
        }
        AlienVariables::next_check -= delta;
    }
    
    void Game::AlienMovement(int delta) {
        for(auto& a : aliens) {
            Gorgon::Geometry::Pointf vector = (a.target - a.location); 
            if(vector.Distance() > 10) {
                vector = vector.Normalize() * AlienVariables::speed * delta / 1000; 
            } else {
                aliens.Remove(a); 
            }
            a.location += vector; 
        }
    }
    
    void Game::AlienFireLaser(int delta) {
        for(auto& alien : aliens) {
            if(alien.next_laser <= delta) {
                alien_lasers.AddNew(Point {alien.location.X + alien.image.GetWidth() / 2, alien.location.Y + alien.image.GetHeight()}, alien_laser.CreateAnimation());
                alien.next_laser += AlienDefaults::next_laser - delta;
            } else {
                alien.next_laser -= delta;
            }
        }
    }