1package com.fs.starfarer.api.impl.combat;
4import java.util.ArrayList;
5import java.util.EnumSet;
8import org.lwjgl.util.vector.Vector2f;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.combat.BaseCombatLayeredRenderingPlugin;
12import com.fs.starfarer.api.combat.CombatEngineAPI;
13import com.fs.starfarer.api.combat.CombatEngineLayers;
14import com.fs.starfarer.api.combat.CombatEntityAPI;
15import com.fs.starfarer.api.combat.DamagingProjectileAPI;
16import com.fs.starfarer.api.combat.OnFireEffectPlugin;
17import com.fs.starfarer.api.combat.OnHitEffectPlugin;
18import com.fs.starfarer.api.combat.ShipAPI;
19import com.fs.starfarer.api.combat.ViewportAPI;
20import com.fs.starfarer.api.combat.WeaponAPI;
21import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
22import com.fs.starfarer.api.graphics.SpriteAPI;
23import com.fs.starfarer.api.util.FaderUtil;
24import com.fs.starfarer.api.util.Misc;
36 Vector2f vel =
new Vector2f();
37 if (target instanceof
ShipAPI) {
43 for (
int i = 0; i < 7; i++) {
45 float size = 40f * (0.75f + (float) Math.random() * 0.5f);
52 rampUp, 0f, dur, c,
true);
63 public static class ParticleData {
65 public Vector2f offset =
new Vector2f();
66 public Vector2f vel =
new Vector2f();
67 public float scale = 1f;
69 public float scaleIncreaseRate = 1f;
70 public float turnDir = 1f;
71 public float angle = 1f;
74 public Vector2f origVel;
76 public Vector2f dirVelChange;
90 angle = (float) Math.random() * 360f;
93 scaleIncreaseRate = 2.5f / maxDur;
96 turnDir = Math.signum((
float) Math.random() - 0.5f) * 30f * (float) Math.random();
99 float driftDir = proj.
getFacing() + 180f + ((float) Math.random() * 30f - 15f);
102 vel.scale(80f / maxDur * (0f + (
float) Math.random() * 3f));
104 origVel =
new Vector2f(vel);
113 public void advance(
float amount) {
114 scale += scaleIncreaseRate * amount;
121 offset.x += vel.x * amount;
122 offset.y += vel.y * amount;
125 float speed = vel.length();
127 float speedIncrease = proj.
getMoveSpeed() / maxDur * 0.5f;
128 Vector2f dir =
new Vector2f(dirVelChange);
129 dir.scale(speedIncrease * amount);
130 Vector2f.add(vel, dir, vel);
134 angle += turnDir * amount;
140 protected List<ParticleData>
particles =
new ArrayList<ParticleData>();
152 for (
int i = 0; i < num; i++) {
188 max = Math.max(max, p.offset.lengthSquared());
197 projLoc.x += projVel.x * amount;
198 projLoc.y += projVel.y * amount;
203 Vector2f.add(p.vel,
projVel, p.vel);
209 float dist = p.offset.length();
210 p.vel.scale(Math.min(1f, dist / 100f));
241 Vector2f loc =
new Vector2f(x + p.offset.x, y + p.offset.y);
243 float alphaMult = 1f;
248 p.sprite.setAngle(p.angle);
249 p.sprite.setSize(size, size);
250 p.sprite.setAlphaMult(b * a * p.fader.getBrightness());
251 p.sprite.setColor(color);
252 p.sprite.renderAtCenter(loc.x, loc.y);
static SettingsAPI getSettings()
static CombatEngineAPI getCombatEngine()
void render(CombatEngineLayers layer, ViewportAPI viewport)
EnumSet< CombatEngineLayers > getActiveLayers()
void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
void init(CombatEntityAPI entity)
DamagingProjectileAPI proj
List< ParticleData > particles
EnumSet< CombatEngineLayers > layers
CryoblasterEffect(DamagingProjectileAPI proj)
void advance(float amount)
void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine)
void advance(float amount)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static Color setAlpha(Color color, int alpha)
static float getHitGlowSize(float baseSize, float baseDamage, ApplyDamageResultAPI result)
static Color scaleAlpha(Color color, float factor)
static Vector2f getPointWithinRadius(Vector2f from, float r)
ABOVE_SHIPS_AND_MISSILES_LAYER
SpriteAPI getSprite(String filename)
CombatEntityAPI addLayeredRenderingPlugin(CombatLayeredRenderingPlugin plugin)
boolean isEntityInPlay(CombatEntityAPI entity)
void addNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)
ProjectileSpecAPI getProjectileSpec()
float getProjectileSpeed()
void setTexWidth(float texWidth)
void setTexHeight(float texHeight)