Advertisement
Originem

AL_LightsCohesionEveryFrameEffect

Aug 6th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.91 KB | None | 0 0
  1. package data.scripts.weapons;
  2.  
  3. import com.fs.starfarer.api.Global;
  4. import com.fs.starfarer.api.combat.CombatEngineAPI;
  5. import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
  6. import com.fs.starfarer.api.combat.ShipAPI;
  7. import com.fs.starfarer.api.combat.WeaponAPI;
  8. import data.scripts.utils.AL.OriMisc;
  9. import org.dark.shaders.distortion.DistortionShader;
  10. import org.dark.shaders.distortion.RippleDistortion;
  11. import org.lazywizard.lazylib.FastTrig;
  12. import org.lazywizard.lazylib.MathUtils;
  13. import org.lazywizard.lazylib.VectorUtils;
  14. import org.lwjgl.util.vector.Vector2f;
  15.  
  16. public class AL_LightsCohesionEveryFrameEffect implements EveryFrameWeaponEffectPlugin {
  17.     private boolean init = false;
  18.     private float lastChargeLevel;
  19.     private boolean fireSoundPlayed = false;
  20.     private AL_BrainGlowEveryFrameEffect glowWeaponEffect;
  21.     private Vector2f up;
  22.     private Vector2f down;
  23.     private Vector2f left;
  24.     private Vector2f right;
  25.  
  26.     @Override
  27.     public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon) {
  28.         if (!init) {
  29.             weapon.ensureClonedSpec();
  30.             up = weapon.getSpec().getTurretFireOffsets().get(0);
  31.             down = weapon.getSpec().getTurretFireOffsets().get(1);
  32.             left = weapon.getSpec().getTurretFireOffsets().get(2);
  33.             right = weapon.getSpec().getTurretFireOffsets().get(3);
  34.             for (WeaponAPI otherWeapon : weapon.getShip().getAllWeapons()) {
  35.                 if (otherWeapon.getId().equals("AL_Decorative_brainattacker")) {
  36.                     glowWeaponEffect = (AL_BrainGlowEveryFrameEffect) otherWeapon.getEffectPlugin();
  37.                     break;
  38.                 }
  39.             }
  40.             init = true;
  41.         }
  42.         float chargeLevel = weapon.getChargeLevel();
  43.         if (weapon.isFiring()) {
  44.             float invertLevel = (float) FastTrig.cos(Math.PI * chargeLevel * 0.5f);
  45.             ShipAPI ship = weapon.getShip();
  46.             if (glowWeaponEffect != null)
  47.                 glowWeaponEffect.lockLevel(chargeLevel);
  48.             if (lastChargeLevel >= chargeLevel) {
  49.                 invertLevel = 0f;
  50.                 Global.getSoundPlayer().playLoop("AL_lightscohesion_loop", weapon, 1f, 1f, weapon.getLocation(), OriMisc.ZERO);
  51.             }
  52.  
  53.  
  54.             Vector2f supposedUp = new Vector2f(30f * invertLevel, 0f);
  55.             Vector2f supposedDown = new Vector2f(-30f * invertLevel, 0f);
  56.             Vector2f supposedLeft = new Vector2f(0, 60f * invertLevel);
  57.             Vector2f supposedRight = new Vector2f(0, -60f * invertLevel);
  58.  
  59.             float angleToRotate = MathUtils.getShortestRotation(weapon.getCurrAngle(), weapon.getArcFacing() + ship.getFacing() + 90f);
  60.             VectorUtils.rotate(supposedUp, angleToRotate);
  61.             VectorUtils.rotate(supposedDown, angleToRotate);
  62.             VectorUtils.rotate(supposedLeft, angleToRotate);
  63.             VectorUtils.rotate(supposedRight, angleToRotate);
  64.  
  65.             up.set(supposedUp);
  66.             down.set(supposedDown);
  67.             left.set(supposedLeft);
  68.             right.set(supposedRight);
  69.             if (chargeLevel == 1f && !fireSoundPlayed) {
  70.                 RippleDistortion distortion = new RippleDistortion(weapon.getLocation(), OriMisc.ZERO);
  71.                 distortion.setFrameRate(60f / 0.2f);
  72.                 distortion.setSize(200f);
  73.                 distortion.setIntensity(10f);
  74.                 distortion.fadeInSize(0.2f);
  75.                 distortion.fadeOutIntensity(0.2f);
  76.                 DistortionShader.addDistortion(distortion);
  77.                 Global.getSoundPlayer().playSound("AL_lightscohesion_fire", 1f, 1f, weapon.getLocation(), OriMisc.ZERO);
  78.                 fireSoundPlayed = true;
  79.             }
  80.         } else {
  81.             fireSoundPlayed = false;
  82.             if (glowWeaponEffect != null)
  83.                 glowWeaponEffect.unlockLevel();
  84.         }
  85.         lastChargeLevel = chargeLevel;
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement