Advertisement
LJLim

Weapon mirroring script

Aug 9th, 2020
1,853
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.21 KB | None | 0 0
  1. package data.scripts.weapons;
  2.  
  3. import com.fs.starfarer.api.combat.CombatEngineAPI;
  4. import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
  5. import com.fs.starfarer.api.combat.WeaponAPI;
  6. import com.fs.starfarer.api.graphics.SpriteAPI;
  7. import com.fs.starfarer.api.loading.WeaponSlotAPI;
  8. import java.awt.Color;
  9. import java.util.List;
  10. import org.lazywizard.lazylib.VectorUtils;
  11. import org.lwjgl.util.vector.Vector2f;
  12.  
  13. public class WeaponMirror implements EveryFrameWeaponEffectPlugin {
  14.  
  15.     boolean done = false;
  16.    
  17.     @Override
  18.     public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon)
  19.     {
  20.         if (!done)
  21.         {
  22.             if (isOnLeft(weapon))
  23.             {
  24.                 mirror(weapon);
  25.             }
  26.             done = true;
  27.         }
  28.            
  29.         drawFireOffsetPoints(weapon, engine);
  30.     }
  31.    
  32.     public boolean isOnLeft(WeaponAPI weapon) {
  33.         WeaponSlotAPI slot = weapon.getSlot();
  34.         if (slot != null) {
  35.             return slot.getLocation().getY() > 0f;
  36.         }
  37.         return false;
  38.     }
  39.    
  40.     public void drawFireOffsetPoints(WeaponAPI weapon, CombatEngineAPI engine) {
  41.         List<Vector2f> fireOffsets = null;
  42.         weapon.ensureClonedSpec();
  43.        
  44.         if (weapon.getSlot().isHardpoint())
  45.         {
  46.             fireOffsets = weapon.getSpec().getHardpointFireOffsets();
  47.         }
  48.         else if (weapon.getSlot().isTurret())
  49.         {
  50.             fireOffsets = weapon.getSpec().getTurretFireOffsets();
  51.         }
  52.         else if (weapon.getSlot().isHidden())
  53.         {
  54.             fireOffsets = weapon.getSpec().getHiddenFireOffsets();
  55.         }
  56.         Vector2f weaponPos = weapon.getLocation();
  57.         for (Vector2f offset : fireOffsets) {
  58.             Vector2f temp = VectorUtils.rotate(new Vector2f(offset.x, offset.y), weapon.getCurrAngle());
  59.            
  60.             Vector2f pos = new Vector2f(temp.x + weaponPos.x, temp.y + weaponPos.y);
  61.             engine.addSmoothParticle(pos, new Vector2f(), 2, 1, 0.5f, Color.CYAN);
  62.         }
  63.     }
  64.  
  65.     public void mirror(WeaponAPI weapon) {
  66.         mirrorSprite(weapon.getBarrelSpriteAPI());
  67.         mirrorSprite(weapon.getSprite());
  68.         mirrorSprite(weapon.getUnderSpriteAPI());
  69.         mirrorOffsets(weapon);
  70.     }
  71.    
  72.     public void mirrorOffsets(WeaponAPI weapon) {
  73.         List<Float> angleOffsets = null;
  74.         List<Vector2f> fireOffsets = null;
  75.        
  76.         weapon.ensureClonedSpec();
  77.         if (weapon.getSlot().isHardpoint())
  78.         {
  79.             angleOffsets = weapon.getSpec().getHardpointAngleOffsets();
  80.             fireOffsets = weapon.getSpec().getHardpointFireOffsets();
  81.         }
  82.         else if (weapon.getSlot().isTurret())
  83.         {
  84.             angleOffsets = weapon.getSpec().getTurretAngleOffsets();
  85.             fireOffsets = weapon.getSpec().getTurretFireOffsets();
  86.         }
  87.         else if (weapon.getSlot().isHidden())
  88.         {
  89.             angleOffsets = weapon.getSpec().getHiddenAngleOffsets();
  90.             fireOffsets = weapon.getSpec().getHiddenFireOffsets();
  91.         }
  92.         if (angleOffsets == null || fireOffsets == null)
  93.         {
  94.             return;
  95.         }
  96.        
  97.         for (int i=0; i< angleOffsets.size(); i++)
  98.         {
  99.             angleOffsets.set(i, -angleOffsets.get(i));
  100.         }
  101.         for (Vector2f offset : fireOffsets)
  102.         {
  103.             offset.y = -offset.y;
  104.         }
  105.     }
  106.        
  107.     public void mirrorSprite(SpriteAPI sprite) {
  108.         if (sprite == null) return;
  109.         sprite.setWidth(-sprite.getWidth());
  110.         sprite.setCenter(-sprite.getCenterX(), sprite.getCenterY());
  111.     }
  112. }
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement