#include "Skill.h" ActiveSkill::ActiveSkill( Bild *bild ) : ReferenceCounter() { current.active = 0; current.time = 0; maxTime = 0; reloadTimeFactor = 1; this->bild = bild; beschleunigungBonus = 0; reparaturBonus = 0; laserIntensitätBonus = 0; laserEffizienzBonus = 0; akkuLeistungBonus = 0; maxEnergieBonus = 0; maxStabilitätBonus = 0; laserTempoBonus = 0; wendigkeitBonus = 0; antriebEffizienzBonus = 0; energieSchildBonus = 0; energieSchildEffizienzBonus = 0; beschleunigungFactor = 1; reparaturFactor = 1; laserIntensitätFactor = 1; laserEffizienzFactor = 1; akkuLeistungFactor = 1; maxEnergieFactor = 1; maxStabilitätFactor = 1; laserTempoFactor = 1; wendigkeitFactor = 1; antriebEffizienzFactor = 1; energieSchildFactor = 1; energieSchildEffizienzFactor = 1; save(); } ActiveSkill::~ActiveSkill() { if( bild ) bild->release(); } void ActiveSkill::save() { last = current; } void ActiveSkill::load() { current = last; } void ActiveSkill::tick( double time ) { if( current.active ) { if( current.time < time ) current.active = 0; else current.time -= time; } if( !current.active ) { current.time += time * reloadTimeFactor; if( current.time > maxTime ) current.time = maxTime; } } void ActiveSkill::render( int x, int y, Bild &zRObj ) { zRObj.drawBildSkall( x, y, 50, 50, *bild ); int length = (int)( ( current.time / maxTime ) * 50 ); zRObj.fillRegion( x + length, y + 50, 50 - length, 4, 0xFF000000 ); zRObj.fillRegion( x, y + 50, length, 4, 0xFFFFFFFF ); } bool ActiveSkill::isActive() const { return current.active; } void ActiveSkill::activate() { current.active = 1; } void ActiveSkill::reset() { current.time = 0; current.active = 0; } double ActiveSkill::getBeschleunigungBonus() { return current.active ? beschleunigungBonus : 0; } double ActiveSkill::getReparaturBonus() { return current.active ? reparaturBonus : 0; } double ActiveSkill::getLaserIntensitätBonus() { return current.active ? laserIntensitätBonus : 0; } double ActiveSkill::getLaserEffizienzBonus() { return current.active ? laserEffizienzBonus : 0; } double ActiveSkill::getAkkuLeistungBonus() { return current.active ? akkuLeistungBonus : 0; } double ActiveSkill::getMaxEnergieBonus() { return current.active ? maxEnergieBonus : 0; } double ActiveSkill::getMaxStabilitätBonus() { return current.active ? maxStabilitätBonus : 0; } double ActiveSkill::getLaserTempoBonus() { return current.active ? laserTempoBonus : 0; } double ActiveSkill::getWendigkeitBonus() { return current.active ? wendigkeitBonus : 0; } double ActiveSkill::getAntriebEffizienzBonus() { return current.active ? antriebEffizienzBonus : 0; } double ActiveSkill::getEnergieSchildBonus() { return current.active ? energieSchildBonus : 0; } double ActiveSkill::getEnergieSchildEffizienzBonus() { return current.active ? energieSchildEffizienzBonus : 0; } double ActiveSkill::getBeschleunigungFactor() { return current.active ? beschleunigungFactor : 1; } double ActiveSkill::getReparaturFactor() { return current.active ? reparaturFactor : 1; } double ActiveSkill::getLaserIntensitätFactor() { return current.active ? laserIntensitätFactor : 1; } double ActiveSkill::getLaserEffizienzFactor() { return current.active ? laserEffizienzFactor : 1; } double ActiveSkill::getAkkuLeistungFactor() { return current.active ? akkuLeistungFactor : 1; } double ActiveSkill::getMaxEnergieFactor() { return current.active ? maxEnergieFactor : 1; } double ActiveSkill::getMaxStabilitätFactor() { return current.active ? maxStabilitätFactor : 1; } double ActiveSkill::getLaserTempoFactor() { return current.active ? laserTempoFactor : 1; } double ActiveSkill::getWendigkeitFactor() { return current.active ? wendigkeitFactor : 1; } double ActiveSkill::getAntriebEffizienzFactor() { return current.active ? antriebEffizienzFactor : 1; } double ActiveSkill::getEnergieSchildFactor() { return current.active ? energieSchildFactor : 1; } double ActiveSkill::getEnergieSchildEffizienzFactor() { return current.active ? energieSchildEffizienzFactor : 1; } SpeedBoost::SpeedBoost( Bild *bild ) : ActiveSkill( bild ) { beschleunigungFactor = 2; wendigkeitFactor = 2; antriebEffizienzFactor = 2; reloadTimeFactor = 0.02; maxTime = 2; } ShieldBoost::ShieldBoost( Bild *bild ) : ActiveSkill( bild ) { energieSchildFactor = 2; energieSchildEffizienzFactor = 2; reloadTimeFactor = 0.01; maxTime = 1; }