package com.rebelkeithy.ftl;
import com.google.common.eventbus.Subscribe;
import com.rebelkeithy.ftl.event.HitShieldsEvent;
import com.rebelkeithy.ftl.event.GetSystemPowerEvent;
import com.rebelkeithy.ftl.event.RoomDamagedEvent;
import com.rebelkeithy.ftl.event.ShipCreationEvent;
import com.rebelkeithy.ftl.event.ShipUpdateEvent;
import com.rebelkeithy.ftl.properties.Properties;
import com.rebelkeithy.ftl.systems.AbstractShipSystem;
public class IonHandler
{
public static final int ionTime = 5;
public IonHandler()
{
Main.GLOBAL_BUS.register(this);
}
@Subscribe
public void shipCreation(ShipCreationEvent event)
{
event.ship.EVENT_BUS.register(this);
}
@Subscribe
public void getSystemPower(GetSystemPowerEvent event)
{
AbstractShipSystem system = event.ship.getSystem(event.system);
int ionDamage = system.getProperties().getInteger("ionDamage");
event.power -= ionDamage;
if(event.power < 0)
event.power = 0;
}
@Subscribe
public void shipUpdate(ShipUpdateEvent event)
{
for(AbstractShipSystem system : event.ship.getSystems())
{
double ionTimer = system.getProperties().getDouble("ionTimer");
if(ionTimer > 0)
{
ionTimer -= event.dt;
if(ionTimer <= 0)
{
ionTimer = 0;
system.getProperties().setInteger("ionDamage", 0);
}
system.getProperties().setDouble("ionTimer", ionTimer);
}
}
}
@Subscribe
public void roomDamagedEvent(RoomDamagedEvent event)
{
if(event.damages.containsKey("ion"))
{
int damage = event.damages.get("ion");
if(event.room.getSystem() != null)
addIonDamage(event.room.getSystem(), damage);
}
}
@Subscribe
public void shieldHitEvent(HitShieldsEvent event)
{
if(event.projectile.causesDamage("ion"))
{
event.shieldDamage = event.projectile.getDamage("ion");
addIonDamage(event.target.getSystem("shields"), event.projectile.getDamage("ion"));
}
}
public void addIonDamage(AbstractShipSystem system, int damage)
{
Properties prop = system.getProperties();
int currIonDamage = prop.getInteger("ionDamage");
double ionTimer = prop.getDouble("ionTimer");
currIonDamage += damage;
ionTimer += ionTime * damage;
if(ionTimer > 25)
ionTimer = 25;
prop.setInteger("ionDamage", currIonDamage);
prop.setDouble("ionTimer", ionTimer);
system.update(0);
Clock.log(system.getShip().getName() + " " + system.getName() + " ion damage " + currIonDamage + ", timer " + ionTimer);
}
}