Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package data.scripts.weapons;
- import com.fs.starfarer.api.combat.CombatEngineAPI;
- import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
- import com.fs.starfarer.api.combat.WeaponAPI;
- import com.fs.starfarer.api.graphics.SpriteAPI;
- import com.fs.starfarer.api.loading.WeaponSlotAPI;
- import java.awt.Color;
- import java.util.List;
- import org.lazywizard.lazylib.VectorUtils;
- import org.lwjgl.util.vector.Vector2f;
- public class WeaponMirror implements EveryFrameWeaponEffectPlugin {
- boolean done = false;
- @Override
- public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon)
- {
- if (!done)
- {
- if (isOnLeft(weapon))
- {
- mirror(weapon);
- }
- done = true;
- }
- drawFireOffsetPoints(weapon, engine);
- }
- public boolean isOnLeft(WeaponAPI weapon) {
- WeaponSlotAPI slot = weapon.getSlot();
- if (slot != null) {
- return slot.getLocation().getY() > 0f;
- }
- return false;
- }
- public void drawFireOffsetPoints(WeaponAPI weapon, CombatEngineAPI engine) {
- List<Vector2f> fireOffsets = null;
- weapon.ensureClonedSpec();
- if (weapon.getSlot().isHardpoint())
- {
- fireOffsets = weapon.getSpec().getHardpointFireOffsets();
- }
- else if (weapon.getSlot().isTurret())
- {
- fireOffsets = weapon.getSpec().getTurretFireOffsets();
- }
- else if (weapon.getSlot().isHidden())
- {
- fireOffsets = weapon.getSpec().getHiddenFireOffsets();
- }
- Vector2f weaponPos = weapon.getLocation();
- for (Vector2f offset : fireOffsets) {
- Vector2f temp = VectorUtils.rotate(new Vector2f(offset.x, offset.y), weapon.getCurrAngle());
- Vector2f pos = new Vector2f(temp.x + weaponPos.x, temp.y + weaponPos.y);
- engine.addSmoothParticle(pos, new Vector2f(), 2, 1, 0.5f, Color.CYAN);
- }
- }
- public void mirror(WeaponAPI weapon) {
- mirrorSprite(weapon.getBarrelSpriteAPI());
- mirrorSprite(weapon.getSprite());
- mirrorSprite(weapon.getUnderSpriteAPI());
- mirrorOffsets(weapon);
- }
- public void mirrorOffsets(WeaponAPI weapon) {
- List<Float> angleOffsets = null;
- List<Vector2f> fireOffsets = null;
- weapon.ensureClonedSpec();
- if (weapon.getSlot().isHardpoint())
- {
- angleOffsets = weapon.getSpec().getHardpointAngleOffsets();
- fireOffsets = weapon.getSpec().getHardpointFireOffsets();
- }
- else if (weapon.getSlot().isTurret())
- {
- angleOffsets = weapon.getSpec().getTurretAngleOffsets();
- fireOffsets = weapon.getSpec().getTurretFireOffsets();
- }
- else if (weapon.getSlot().isHidden())
- {
- angleOffsets = weapon.getSpec().getHiddenAngleOffsets();
- fireOffsets = weapon.getSpec().getHiddenFireOffsets();
- }
- if (angleOffsets == null || fireOffsets == null)
- {
- return;
- }
- for (int i=0; i< angleOffsets.size(); i++)
- {
- angleOffsets.set(i, -angleOffsets.get(i));
- }
- for (Vector2f offset : fireOffsets)
- {
- offset.y = -offset.y;
- }
- }
- public void mirrorSprite(SpriteAPI sprite) {
- if (sprite == null) return;
- sprite.setWidth(-sprite.getWidth());
- sprite.setCenter(-sprite.getCenterX(), sprite.getCenterY());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement