Advertisement
DarkRevenant

Untitled

May 17th, 2014
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.31 KB | None | 0 0
  1. package data.scripts.plugins;
  2.  
  3. import com.fs.starfarer.api.Global;
  4. import com.fs.starfarer.api.combat.CombatEngineAPI;
  5. import com.fs.starfarer.api.combat.CombatEntityAPI;
  6. import com.fs.starfarer.api.combat.DamageType;
  7. import com.fs.starfarer.api.combat.DamagingProjectileAPI;
  8. import com.fs.starfarer.api.combat.EveryFrameCombatPlugin;
  9. import com.fs.starfarer.api.combat.ShipAPI;
  10. import com.fs.starfarer.api.input.InputEventAPI;
  11.  
  12. import java.util.*;
  13. import org.lwjgl.util.vector.Vector2f;
  14.  
  15. import org.dark.shaders.distortion.DistortionShader;
  16. import org.dark.shaders.distortion.RippleDistortion;
  17.  
  18. public class ShieldRipple implements EveryFrameCombatPlugin {
  19.  
  20.     public CombatEngineAPI engine;
  21.     public static final Set<DamagingProjectileAPI> projectiles = new LinkedHashSet<>();
  22.  
  23.     @Override
  24.     public void init(CombatEngineAPI engine) {
  25.     }
  26.  
  27.     @Override
  28.     public void advance(float amount, List<InputEventAPI> events) {
  29.         if (engine != Global.getCombatEngine()) {
  30.             projectiles.clear();
  31.             this.engine = Global.getCombatEngine();
  32.         }
  33.  
  34.         if (engine.isPaused()) {
  35.             return;
  36.         }
  37.  
  38.         List<DamagingProjectileAPI> activeProjectiles = engine.getProjectiles();
  39.         for (DamagingProjectileAPI projectile : activeProjectiles) {
  40.             if (projectile.didDamage() || projectile.isFading()) {
  41.                 continue;
  42.             }
  43.  
  44.             if (!projectiles.contains(projectile)) {
  45.                 projectiles.add(projectile);
  46.             }
  47.         }
  48.  
  49.         Iterator<DamagingProjectileAPI> iter = projectiles.iterator();
  50.         while (iter.hasNext()) {
  51.             DamagingProjectileAPI projectile = iter.next();
  52.             if (projectile.didDamage()) {
  53.                 CombatEntityAPI target = projectile.getDamageTarget();
  54.  
  55.                 if (target instanceof ShipAPI) {
  56.                     if (target.getShield() != null && target.getShield().isOn() && target.getShield().isWithinArc(Vector2f.add(projectile.getLocation(), (Vector2f) projectile.getVelocity().scale(amount), null))) {
  57.                         onHit(projectile.getLocation(), projectile.getDamageAmount(), projectile.getDamageType());
  58.                     }
  59.                 }
  60.  
  61.                 iter.remove();
  62.             } else if (!engine.isEntityInPlay(projectile)) {
  63.                 iter.remove();
  64.             }
  65.         }
  66.     }
  67.  
  68.     private void onHit(Vector2f location, float damage, DamageType type) {
  69.         if (type == DamageType.FRAGMENTATION) {
  70.             damage *= 0.25f;
  71.         }
  72.         if (type == DamageType.HIGH_EXPLOSIVE) {
  73.             damage *= 0.5f;
  74.         }
  75.         if (type == DamageType.KINETIC) {
  76.             damage *= 2f;
  77.         }
  78.  
  79.         if (damage < 100f) {
  80.             return;
  81.         }
  82.  
  83.         RippleDistortion ripple = new RippleDistortion();
  84.         float fadeTime = (float) Math.sqrt(Math.sqrt(damage)) * 0.1f;
  85.         float intensity = (float) Math.sqrt(damage) * 5f;
  86.         ripple.setSize(intensity);
  87.         ripple.setIntensity(intensity * 0.2f);
  88.         ripple.setLocation(location);
  89.         ripple.setFrameRate(60f / fadeTime);
  90.         ripple.fadeInSize(fadeTime * 1.2f);
  91.         ripple.fadeOutIntensity(fadeTime);
  92.         ripple.setSize(intensity * 0.2f);
  93.         DistortionShader.addDistortion(ripple);
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement