1package com.fs.starfarer.api.loading;
5import org.json.JSONException;
6import org.json.JSONObject;
8import com.fs.starfarer.api.combat.CollisionClass;
9import com.fs.starfarer.api.combat.DamageType;
10import com.fs.starfarer.api.combat.MutableStat;
11import com.fs.starfarer.api.combat.OnHitEffectPlugin;
12import com.fs.starfarer.api.combat.ShipAPI;
13import com.fs.starfarer.api.impl.campaign.ids.Stats;
14import com.fs.starfarer.api.util.Misc;
18 private float duration;
20 private float coreRadius;
21 private float maxDamage;
22 private float minDamage;
24 private float particleSpawnRadius = -1f;
26 private CollisionClass collisionClass;
27 private CollisionClass collisionClassByFighter;
30 private float particleSizeMin = 10f;
31 private float particleSizeRange = 10f;
32 private float particleDuration = 0.5f;
33 private int particleCount = 10;
35 private Color particleColor =
new Color(255,255,255,255);
36 private Color explosionColor =
new Color(255,255,255,255);
38 private DamageType damageType = DamageType.ENERGY;
39 private String soundSetId;
41 private boolean showGraphic =
true;
42 private boolean useDetailedExplosion =
true;
44 private float detailedExplosionRadius = -1f;
45 private float detailedExplosionFlashRadius = -1f;
46 private Color detailedExplosionFlashColorFringe =
null;
47 private Color detailedExplosionFlashColorCore =
null;
48 private float detailedExplosionFlashDuration = -1f;
50 private OnHitEffectPlugin effect;
52 private MutableStat modifier =
new MutableStat(1f);
55 float mult = ship.getMutableStats().getDynamic().getValue(Stats.EXPLOSION_RADIUS_MULT);
60 float radius = ship.getCollisionRadius() + Math.min(200f, ship.getCollisionRadius()) * mult;
66 float coreRadius = ship.getCollisionRadius();
68 float maxDamage = ship.getMaxFlux() * (0.5f + 0.5f * (float) Math.random());
71 float mult = ship.getMutableStats().getDynamic().getValue(Stats.EXPLOSION_DAMAGE_MULT);
79 CollisionClass.HITS_SHIPS_AND_ASTEROIDS,
80 CollisionClass.HITS_SHIPS_AND_ASTEROIDS,
85 Color.white, Color.white);
103 this.soundSetId = soundSetId;
107 if (explosionSpecJson !=
null) {
109 (
float) explosionSpecJson.getDouble(
"duration"),
110 (
float) explosionSpecJson.getDouble(
"radius"),
111 (
float) explosionSpecJson.getDouble(
"coreRadius"),
112 (
float) explosionSpecJson.optDouble(
"maxDamage", 0),
113 (
float) explosionSpecJson.optDouble(
"minDamage", 0),
114 Misc.mapToEnum(explosionSpecJson,
"collisionClass", CollisionClass.class,
null),
115 Misc.mapToEnum(explosionSpecJson,
"collisionClassByFighter", CollisionClass.class,
null),
116 (
float) explosionSpecJson.optDouble(
"particleSizeMin", 0),
117 (
float) explosionSpecJson.optDouble(
"particleSizeRange", 0),
118 (
float) explosionSpecJson.optDouble(
"particleDuration", 0),
119 explosionSpecJson.optInt(
"particleCount", 0),
120 Misc.getColor(explosionSpecJson,
"particleColor"),
121 Misc.optColor(explosionSpecJson,
"explosionColor",
null)
124 spec.useDetailedExplosion = explosionSpecJson.optBoolean(
"useDetailedExplosion",
false);
126 spec.detailedExplosionRadius = (float) explosionSpecJson.optDouble(
"detailedExplosionRadius", -1f);
127 spec.detailedExplosionFlashRadius = (float) explosionSpecJson.optDouble(
"detailedExplosionFlashRadius", -1f);
128 spec.detailedExplosionFlashDuration = (float) explosionSpecJson.optDouble(
"detailedExplosionFlashDuration", -1f);
129 spec.detailedExplosionFlashColorFringe = Misc.optColor(explosionSpecJson,
"detailedExplosionFlashColorFringe",
null);
130 spec.detailedExplosionFlashColorCore = Misc.optColor(explosionSpecJson,
"detailedExplosionFlashColorCore",
null);
132 spec.particleSpawnRadius = (float) explosionSpecJson.optDouble(
"particleSpawnRadius", -1f);
138 spec.
setSoundSetId(explosionSpecJson.optString(
"sound",
null));
145 float maxDamage,
float minDamage, CollisionClass collisionClass,
146 CollisionClass collisionClassByFighter,
147 float particleSizeMin,
float particleSizeRange,
148 float particleDuration,
int particleCount, Color particleColor, Color explosionColor) {
149 this.duration = duration;
150 this.radius = radius;
151 this.coreRadius = coreRadius;
152 this.maxDamage = maxDamage;
153 this.minDamage = minDamage;
154 this.collisionClass = collisionClass;
155 this.collisionClassByFighter = collisionClassByFighter;
156 this.particleSizeMin = particleSizeMin;
157 this.particleSizeRange = particleSizeRange;
158 this.particleDuration = particleDuration;
159 this.particleCount = particleCount;
160 this.particleColor = particleColor;
161 if (explosionColor !=
null) {
162 this.explosionColor = explosionColor;
164 this.explosionColor = particleColor;
169 return particleSpawnRadius;
173 this.particleSpawnRadius = particleSpawnRadius;
177 return explosionColor;
181 this.explosionColor = explosionColor;
189 this.damageType = damageType;
197 this.duration = duration;
205 this.radius = radius;
213 this.maxDamage = maxDamage;
221 this.minDamage = minDamage;
225 return collisionClass;
229 this.collisionClass = collisionClass;
233 return collisionClassByFighter;
237 this.collisionClassByFighter = collisionClassByFighter;
241 return particleSizeMin;
245 this.particleSizeMin = particleSizeMin;
249 return particleSizeRange;
253 this.particleSizeRange = particleSizeRange;
257 return particleDuration;
261 this.particleDuration = particleDuration;
265 return particleCount;
269 this.particleCount = particleCount;
273 return particleColor;
277 this.particleColor = particleColor;
285 this.coreRadius = coreRadius;
295 this.showGraphic = showGraphic;
302 }
catch (CloneNotSupportedException e) {
308 return useDetailedExplosion;
312 this.useDetailedExplosion = useDetailedExplosion;
316 return collisionClassByFighter;
324 this.modifier = modifier;
328 return detailedExplosionRadius;
332 this.detailedExplosionRadius = detailedExplosionRadius;
336 return detailedExplosionFlashRadius;
340 this.detailedExplosionFlashRadius = detailedExplosionFlashRadius;
344 return detailedExplosionFlashColorFringe;
348 this.detailedExplosionFlashColorFringe = detailedExplosionFlashColorFringe;
352 return detailedExplosionFlashColorCore;
356 this.detailedExplosionFlashColorCore = detailedExplosionFlashColorCore;
360 return detailedExplosionFlashDuration;
364 this.detailedExplosionFlashDuration = detailedExplosionFlashDuration;
void setEffect(OnHitEffectPlugin effect)
void setRadius(float radius)
void setParticleSizeMin(float particleSizeMin)
DamagingExplosionSpec clone()
void setDetailedExplosionFlashColorCore(Color detailedExplosionFlashColorCore)
void setDetailedExplosionFlashRadius(float detailedExplosionFlashRadius)
float getParticleDuration()
void setMaxDamage(float maxDamage)
float getDetailedExplosionFlashRadius()
void setDetailedExplosionFlashColorFringe(Color detailedExplosionFlashColorFringe)
void setDuration(float duration)
DamageType getDamageType()
float getParticleSpawnRadius()
void setModifier(MutableStat modifier)
void setParticleDuration(float particleDuration)
CollisionClass getCollisionClass()
void setCollisionClass(CollisionClass collisionClass)
float getDetailedExplosionFlashDuration()
void setDetailedExplosionRadius(float detailedExplosionRadius)
void setSoundSetId(String soundSetId)
void setParticleCount(int particleCount)
void setExplosionColor(Color explosionColor)
static DamagingExplosionSpec explosionSpecForShip(ShipAPI ship)
void setCoreRadius(float coreRadius)
OnHitEffectPlugin getEffect()
void setDamageType(DamageType damageType)
void setShowGraphic(boolean showGraphic)
void setDetailedExplosionFlashDuration(float detailedExplosionFlashDuration)
void setUseDetailedExplosion(boolean useDetailedExplosion)
static float getShipExplosionRadius(ShipAPI ship)
void setParticleSizeRange(float particleSizeRange)
CollisionClass getCollisionClassIfByFighter()
DamagingExplosionSpec(float duration, float radius, float coreRadius, float maxDamage, float minDamage, CollisionClass collisionClass, CollisionClass collisionClassByFighter, float particleSizeMin, float particleSizeRange, float particleDuration, int particleCount, Color particleColor, Color explosionColor)
float getDetailedExplosionRadius()
CollisionClass getCollisionClassByFighter()
void setCollisionClassByFighter(CollisionClass collisionClassByFighter)
float getParticleSizeRange()
void setParticleSpawnRadius(float particleSpawnRadius)
Color getDetailedExplosionFlashColorCore()
static DamagingExplosionSpec loadFromJSON(JSONObject explosionSpecJson)
float getParticleSizeMin()
Color getDetailedExplosionFlashColorFringe()
MutableStat getModifier()
boolean isUseDetailedExplosion()
void setParticleColor(Color particleColor)
void setMinDamage(float minDamage)
Color getExplosionColor()