#pragma once

class ActiveSkill
{
protected:
    bool active;
    double time;
    double maxTime;
    int ref;
    double reloadTimeFactor;

    // skill bonus added when active
    double beschleunigungBonus;
    double reparaturBonus;
    double laserIntensityBonus;
    double laserEffizienzBonus;
    double akkuLeistungBonus;
    double maxEnergieBonus;
    double maxStabilityBonus;
    double laserTempoBonus;
    double wendigkeitBonus;
    double antriebEffizienzBonus;
    double energieSchildBonus;
    double energieSchildEffizienzBonus;

    // skil multiplier when active
    double beschleunigungFactor;
    double reparaturFactor;
    double laserIntensityFactor;
    double laserEffizienzFactor;
    double akkuLeistungFactor;
    double maxEnergieFactor;
    double maxStabilityFactor;
    double laserTempoFactor;
    double wendigkeitFactor;
    double antriebEffizienzFactor;
    double energieSchildFactor;
    double energieSchildEffizienzFactor;

public:
    ActiveSkill();
    ~ActiveSkill();
    void tick( double time );
    bool isActive() const;
    void activate();
    void reset();

    double getBeschleunigungBonus();
    double getReparaturBonus();
    double getLaserIntensityBonus();
    double getLaserEffizienzBonus();
    double getAkkuLeistungBonus();
    double getMaxEnergieBonus();
    double getMaxStabilityBonus();
    double getLaserTempoBonus();
    double getWendigkeitBonus();
    double getAntriebEffizienzBonus();
    double getEnergieSchildBonus();
    double getEnergieSchildEffizienzBonus();

    double getBeschleunigungFactor();
    double getReparaturFactor();
    double getLaserIntensityFactor();
    double getLaserEffizienzFactor();
    double getAkkuLeistungFactor();
    double getMaxEnergieFactor();
    double getMaxStabilityFactor();
    double getLaserTempoFactor();
    double getWendigkeitFactor();
    double getAntriebEffizienzFactor();
    double getEnergieSchildFactor();
    double getEnergieSchildEffizienzFactor();

    ActiveSkill *getThis();
    ActiveSkill *release();
};

class SpeedBoost : public ActiveSkill
{
public:
    SpeedBoost();
};

class ShieldBoost : public ActiveSkill
{
public:
    ShieldBoost();
};