//by Tartiflette, this script makes various decorative weapons apeare
//feel free to use it, credit is appreciated but not mandatory
package data.scripts;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.combat.CombatEngineAPI;
import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipEngineControllerAPI;
import com.fs.starfarer.api.combat.ShipSystemAPI;
import com.fs.starfarer.api.combat.WeaponAPI;
import java.util.List;
import org.lazywizard.lazylib.FastTrig;
import org.lazywizard.lazylib.MathUtils;
public class TF_C01_transform implements EveryFrameWeaponEffectPlugin {
private WeaponAPI arm1R;
private WeaponAPI arm2R;
private ShipAPI ship;
private ShipSystemAPI system;
private ShipEngineControllerAPI engines;
public static final String slotarm1rightID = "slotARM1R";
public static final String slotarm2rightID = "slotARM2R";
private boolean runOnce=false;
private boolean soundIN=true;
private boolean soundOUT=true;
private float arm1w, arm1h, arm2w, arm2h;
private float rate=1;
private boolean travelDrive = false;
private final float rotateOffset=90;
private final float armOffsetX=100;
private final float armOffsetY=100;
@Override
public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon) {
if (Global.getCombatEngine().isPaused()) {
return;
}
//initialise the variables
if (!runOnce || ship==null || system==null){
ship=weapon.getShip();
system = ship.getSystem();
engines = ship.getEngineController();
List <WeaponAPI> weapons = ship.getAllWeapons();
for (WeaponAPI w : weapons){
switch(w.getSlot().getId()){
case slotarm1rightID:
arm1R=w;
arm1h=w.getSprite().getHeight();
arm1w=w.getSprite().getWidth();
break;
case slotarm2rightID:
arm2R=w;
arm2h=w.getSprite().getHeight();
arm2w=w.getSprite().getWidth();
break;
}
}
runOnce=true;
//return to avoid a null error on the ship
return;
}
//ENGINES SHIELDS MOVEMENT ROTATIONS
//ALL THE STUFF
if(ship.getTravelDrive().isActive() || ship.getFluxTracker().isVenting()){
rate = Math.min(1,rate+amount);
travelDrive=true;
} else if (travelDrive){
rate = Math.max(0,rate-amount);
if(rate==0){
travelDrive=false;
}
} else {
rate = system.getEffectLevel();
}
if (rate==0){
soundIN=false;
} else if (rate==1){
soundOUT=false;
}
if (system.isActive() || rate > 0){
if(rate>0 && !soundIN){
soundIN=true;
//Global.getSoundPlayer().playSound("diableavionics_transform_in", 1, 1, ship.getLocation(), ship.getVelocity());
} else if (rate<1 && !soundOUT){
soundOUT=true;
//Global.getSoundPlayer().playSound("diableavionics_transform_out", 1, 1, ship.getLocation(), ship.getVelocity());
}
//lgun.setRemainingCooldownTo(1);
//rgun.setRemainingCooldownTo(1);
float rotateArms = SO(rate,0.25f,0.75f);
float slideArms = SO(rate,0f,0.5f);
float extendArms = SO(rate,0.5f,1f);
float arm1Y = arm1h/2 + armOffsetY*slideArms;
float arm1X = arm1w/2;
float arm2X = arm2w/2 + armOffsetX*slideArms;
arm1R.getSprite().setCenter(ldX, dY);
arm2R.getSprite().setCenter(ldX, dY);
//float clipDoors = RSO(rate,0.5f,1f);
} else {
}
}
//////////////////////////////////////////
// SMOOTH DAT MOVE //
//////////////////////////////////////////
public float smooth (float x){
return 0.5f - ((float)(FastTrig.cos(x*Math.PI) /2 ));
}
//////////////////////////////////////////
// OFFSET DAT TIME //
//////////////////////////////////////////
public float offset (float x, float start, float end){
return (float) Math.min(1, Math.max( 0 , (x-start)*(1/(end-start))));
}
//////////////////////////////////////////
// SMOOTH + OFFSET //
//////////////////////////////////////////
public float SO (float x, float start, float end){
return 0.5f - ((float)( FastTrig.cos( Math.min( 1, Math.max( 0 , (x-start)*(1/(end-start)))) *Math.PI ) /2 ));
}
//////////////////////////////////////////
// RETURN + SMOOTH + OFFSET //
//////////////////////////////////////////
public float RSO (float x, float start, float end){
return 0.5f - ((float)( FastTrig.cos( Math.min( 1, Math.max( 0 , (x-start)*(1/(end-start)))) *Math.PI*2 ) /2 ));
}
}