• Alien.h
  • #pragma once 
    #include <Gorgon/Geometry/Point.h>
    #include <Gorgon/Graphics/Animations.h>
    
    using Gorgon::Geometry::Point; 
    
    namespace AlienDefaults {
        // Default speed
        const int speed = 100;
        // Default speed up check
        const int next_speed_up = 10000;
        // Default speed up factor
        const float speed_up_factor = 1.25; 
        // Default creation check
        const int next_alien_create = 1000;
        // Default max alien count
        const float max = 10.f;
        // Default max alien up value
        const float max_up = 3.f; 
        // Default max up check
        const int next_max_up = 10000; 
        const int next_laser = 1800; 
        const int next_laser_update = 20000;
        const int laser_speed = 5; // px
    }
    
    namespace AlienVariables {
        inline int speed = AlienDefaults::speed; 
        inline int next_speed_up = AlienDefaults::next_speed_up; 
        inline float speed_up_factor = AlienDefaults::speed_up_factor; 
        inline int next_check = AlienDefaults::next_alien_create;
        inline int next_check_original = AlienDefaults::next_alien_create;
        inline float max = AlienDefaults::max; 
        inline float maximum_up = AlienDefaults::max_up; 
        inline int next_maximum_up = AlienDefaults::next_max_up;
        inline int laser_speed = AlienDefaults::laser_speed;
    
        
        inline void ResetToDefaults() {
            speed = AlienDefaults::speed; 
            next_speed_up = AlienDefaults::next_speed_up; 
            speed_up_factor = AlienDefaults::speed_up_factor; 
            next_check = AlienDefaults::next_alien_create;
            next_check_original = AlienDefaults::next_alien_create;
            max = AlienDefaults::max; 
            maximum_up = AlienDefaults::max_up; 
            next_maximum_up = AlienDefaults::next_max_up;
            laser_speed = AlienDefaults::laser_speed;
        }
    }
    
    class Alien {
        public: 
        Alien(Point location_, Gorgon::Graphics::RectangularAnimation& image_) : location(location_), image(image_), target(location_.X, 640) {}
        Gorgon::Graphics::Instance image;
        Point location, target;
        
        int next_laser = AlienDefaults::next_laser;  
        int next_laser_update = AlienDefaults::next_laser_update;
    };