23 Map<ShipAPI, Float> dissipation =
new LinkedHashMap<ShipAPI, Float>();
29 super.advanceInCombat(ship, amount);
31 if (!ship.isAlive())
return;
36 FluxSinkData data = (FluxSinkData) engine.getCustomData().get(key);
38 data =
new FluxSinkData();
39 engine.getCustomData().put(key, data);
41 for (ShipAPI module : ship.getChildModulesCopy()) {
42 if (module.getStationSlot() ==
null || !module.isAlive() || !Misc.isActiveModule(module))
continue;
43 float d = module.getMutableStats().getFluxDissipation().getModifiedValue();
45 data.dissipation.put(module, d);
50 List<ShipAPI> losses =
new ArrayList<ShipAPI>(data.dissipation.keySet());
51 List<ShipAPI> remaining =
new ArrayList<ShipAPI>();
52 float totalLiveDissipation = 0f;
53 for (ShipAPI module : ship.getChildModulesCopy()) {
54 if (module.getStationSlot() ==
null || !module.isAlive() || !Misc.isActiveModule(module))
continue;
55 losses.remove(module);
56 remaining.add(module);
57 if (data.dissipation.containsKey(module)) {
58 totalLiveDissipation += data.dissipation.get(module);
62 float extraDissipation = 0f;
63 for (ShipAPI lost : losses) {
64 if (data.dissipation.containsKey(lost)) {
65 extraDissipation += data.dissipation.get(lost);
69 for (ShipAPI module : remaining) {
70 if (!data.dissipation.containsKey(module))
continue;
73 if (totalLiveDissipation > 0) {
74 currBonus = data.dissipation.get(module) / totalLiveDissipation * extraDissipation;
77 module.getMutableStats().getFluxDissipation().modifyFlat(
"shared_flux_sink", currBonus);
79 float hardFluxFraction = 0f;
80 float totalDissipation = module.getMutableStats().getFluxDissipation().getModifiedValue();
81 if (totalDissipation > 0) {
85 module.getMutableStats().getHardFluxDissipationFraction().modifyFlat(
"shared_flux_sink", hardFluxFraction);