#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;
}
}
}