1package com.fs.starfarer.api.impl.combat.dweller;
3import java.util.ArrayList;
8import org.lwjgl.opengl.GL11;
9import org.lwjgl.opengl.GL14;
10import org.lwjgl.util.vector.Vector2f;
12import com.fs.starfarer.api.Global;
13import com.fs.starfarer.api.combat.CombatEngineAPI;
14import com.fs.starfarer.api.combat.CombatEngineLayers;
15import com.fs.starfarer.api.combat.CombatEntityAPI;
16import com.fs.starfarer.api.combat.DamagingProjectileAPI;
17import com.fs.starfarer.api.combat.ShipAPI;
18import com.fs.starfarer.api.combat.ViewportAPI;
19import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
20import com.fs.starfarer.api.impl.combat.CryofluxTransducerEffect;
21import com.fs.starfarer.api.impl.combat.RiftLanceEffect;
22import com.fs.starfarer.api.util.IntervalUtil;
23import com.fs.starfarer.api.util.Misc;
37 super(projectile,
prev);
41 for (
int i = 0; i < num; i++) {
53 p.sprite.setTexWidth(0.25f);
54 p.sprite.setTexHeight(0.25f);
55 p.sprite.setTexX(i * 0.25f);
56 p.sprite.setTexY(j * 0.25f);
58 p.scale = 2f + (float) Math.random();
61 p.scaleIncreaseRate *= 1f + (float) Math.random();
64 v.scale(size + size * (
float) Math.random() * 0.5f);
65 v.scale(0.67f * p.scale);
81 offsetAngle += 90f * ((float) Math.random() - 0.5f);
83 p.offset.scale(size * 1f * p.scale);
101 super.advance(amount);
113 super.render(
layer, viewport);
125 GL14.glBlendEquation(GL14.GL_FUNC_REVERSE_SUBTRACT);
131 float alphaMult = 1f;
132 Vector2f offset = p.offset;
134 if (Math.abs(diff) > 0.1f) {
137 Vector2f loc =
new Vector2f(x + offset.x, y + offset.y);
139 p.sprite.setBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
140 p.sprite.setAngle(p.angle);
141 p.sprite.setSize(size, size);
142 p.sprite.setAlphaMult(b * alphaMult * p.fader.getBrightness());
143 p.sprite.setColor(color);
144 p.sprite.renderAtCenter(loc.x, loc.y);
147 GL14.glBlendEquation(GL14.GL_FUNC_ADD);
153 super.onHit(projectile, target, point, shieldHit, damageResult, engine);
157 float baseDuration = 1f;
159 float size = baseSize * 1.5f;
168 float dur = baseDuration + baseDuration * (float) Math.random();
173 Vector2f vel =
new Vector2f();
174 if (target instanceof
ShipAPI) {
179 v.scale(nSize + nSize * (
float) Math.random() * 0.5f);
181 Vector2f.add(vel, v, v);
183 float maxSpeed = nSize * 1.5f * 0.2f;
184 float minSpeed = nSize * 1f * 0.2f;
185 float overMin = v.length() - minSpeed;
187 float durMult = 1f - overMin / (maxSpeed - minSpeed);
188 if (durMult < 0.1f) durMult = 0.1f;
189 dur *= 0.5f + 0.5f * durMult;
193 0.25f / dur, 0f, dur, c);
201 return "dweller_pieces";
219 return "pseudoparticle_jet_loop";
223 return super.getThresholdDist();
228 "pseudoparticle_jet_hit_shield_light",
229 "pseudoparticle_jet_hit_shield_solid",
230 "pseudoparticle_jet_hit_shield_heavy",
231 "pseudoparticle_jet_hit_light",
232 "pseudoparticle_jet_hit_solid",
233 "pseudoparticle_jet_hit_heavy");
static SettingsAPI getSettings()
static CombatEngineAPI getCombatEngine()
DamagingProjectileAPI prev
DamagingProjectileAPI proj
static Color getColorForDarkening(Color from)
PseudoparticleJetEffect(DamagingProjectileAPI projectile, DamagingProjectileAPI prev)
PseudoparticleJetEffect()
static float PARTICLE_SCALE_MULT
void advance(float amount)
PseudoparticleJetEffect createTrail(DamagingProjectileAPI projectile, DamagingProjectileAPI prev)
String getParticleSpriteCat()
void render(CombatEngineLayers layer, ViewportAPI viewport)
List< ParticleData > negativeParticles
String getParticleSpriteKey()
void playImpactSound(ApplyDamageResultAPI damageResult, Vector2f point, Vector2f vel)
void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine)
float getParticleScaleIncreaseRateMult()
static void playSound(ApplyDamageResultAPI result, Vector2f loc, Vector2f vel, String lightShields, String solidShields, String heavyShields, String lightHull, String solidHull, String heavyHull)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static Color setAlpha(Color color, int alpha)
static Vector2f rotateAroundOrigin(Vector2f v, float angle)
static float getHitGlowSize(float baseSize, float baseDamage, ApplyDamageResultAPI result)
static float getAngleDiff(float from, float to)
static Vector2f getPointWithinRadiusUniform(Vector2f from, float r, Random random)
static float getAngleInDegrees(Vector2f v)
SpriteAPI getSprite(String filename)
void addNegativeNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)
ProjectileSpecAPI getProjectileSpec()