Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. public class StarlightWeaponBeam implements BeamEffectPlugin {
  2.  
  3. private IntervalUtil fireInterval = new IntervalUtil(0.2f, 0.3f);
  4. private boolean wasZero = true;
  5.  
  6. public void advance(float amount, CombatEngineAPI engine, BeamAPI beam) {
  7. CombatEntityAPI target = beam.getDamageTarget();
  8. if (target instanceof ShipAPI && beam.getBrightness() >= 1f) {
  9. float dur = beam.getDamage().getDpsDuration();
  10. if (!wasZero) dur = 0;
  11. wasZero = beam.getDamage().getDpsDuration() <= 0;
  12. fireInterval.advance(dur);
  13. if (fireInterval.intervalElapsed()) {
  14. ShipAPI ship = (ShipAPI) target;
  15. boolean hitShield = target.getShield() != null && target.getShield().isWithinArc(beam.getTo());
  16. float pierceChance = ((ShipAPI) target).getHardFluxLevel() - 0.1f;
  17. pierceChance *= ship.getMutableStats().getDynamic().getValue(Stats.SHIELD_PIERCED_MULT);
  18.  
  19. boolean piercedShield = hitShield && (float) Math.random() < pierceChance;
  20.  
  21. if (!hitShield || piercedShield) {
  22. Vector2f dir = Vector2f.sub(beam.getTo(), beam.getFrom(), new Vector2f());
  23. if (dir.lengthSquared() > 0) dir.normalise();
  24. dir.scale(50f);
  25. Vector2f point = Vector2f.sub(beam.getTo(), dir, new Vector2f());
  26. float emp = beam.getWeapon().getDamage().getFluxComponent() * 0.5f;
  27. float dam = beam.getWeapon().getDamage().getDamage() * 0.25f;
  28. engine.spawnEmpArcPierceShields(
  29. beam.getSource(), point, beam.getDamageTarget(), beam.getDamageTarget(),
  30. DamageType.ENERGY,
  31. dam, // damage
  32. emp, // emp
  33. 100000f, // max range
  34. "tachyon_lance_emp_impact",
  35. beam.getWidth() + 5f,
  36. beam.getFringeColor(),
  37. beam.getCoreColor()
  38. );
  39. }
  40. }
  41. }
  42. }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement