Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class StarlightWeaponBeam implements BeamEffectPlugin {
- private IntervalUtil fireInterval = new IntervalUtil(0.2f, 0.3f);
- private boolean wasZero = true;
- public void advance(float amount, CombatEngineAPI engine, BeamAPI beam) {
- CombatEntityAPI target = beam.getDamageTarget();
- if (target instanceof ShipAPI && beam.getBrightness() >= 1f) {
- float dur = beam.getDamage().getDpsDuration();
- if (!wasZero) dur = 0;
- wasZero = beam.getDamage().getDpsDuration() <= 0;
- fireInterval.advance(dur);
- if (fireInterval.intervalElapsed()) {
- ShipAPI ship = (ShipAPI) target;
- boolean hitShield = target.getShield() != null && target.getShield().isWithinArc(beam.getTo());
- float pierceChance = ((ShipAPI) target).getHardFluxLevel() - 0.1f;
- pierceChance *= ship.getMutableStats().getDynamic().getValue(Stats.SHIELD_PIERCED_MULT);
- boolean piercedShield = hitShield && (float) Math.random() < pierceChance;
- if (!hitShield || piercedShield) {
- Vector2f dir = Vector2f.sub(beam.getTo(), beam.getFrom(), new Vector2f());
- if (dir.lengthSquared() > 0) dir.normalise();
- dir.scale(50f);
- Vector2f point = Vector2f.sub(beam.getTo(), dir, new Vector2f());
- float emp = beam.getWeapon().getDamage().getFluxComponent() * 0.5f;
- float dam = beam.getWeapon().getDamage().getDamage() * 0.25f;
- engine.spawnEmpArcPierceShields(
- beam.getSource(), point, beam.getDamageTarget(), beam.getDamageTarget(),
- DamageType.ENERGY,
- dam, // damage
- emp, // emp
- 100000f, // max range
- "tachyon_lance_emp_impact",
- beam.getWidth() + 5f,
- beam.getFringeColor(),
- beam.getCoreColor()
- );
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement