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 maxEMPDamage;
25 private float minEMPDamage;
28 private float particleSpawnRadius = -1f;
34 private float particleSizeMin = 10f;
35 private float particleSizeRange = 10f;
36 private float particleDuration = 0.5f;
37 private int particleCount = 10;
39 private Color particleColor =
new Color(255,255,255,255);
40 private Color explosionColor =
new Color(255,255,255,255);
43 private String soundSetId;
44 private float soundVolume = 1f;
46 private boolean showGraphic =
true;
47 private boolean useDetailedExplosion =
true;
49 private float detailedExplosionRadius = -1f;
50 private float detailedExplosionFlashRadius = -1f;
51 private Color detailedExplosionFlashColorFringe =
null;
52 private Color detailedExplosionFlashColorCore =
null;
53 private float detailedExplosionFlashDuration = -1f;
73 float maxDamage = ship.
getMaxFlux() * (0.5f + 0.5f * (float) Math.random());
90 Color.white, Color.white);
101 this.effect = effect;
108 this.soundSetId = soundSetId;
112 if (explosionSpecJson !=
null) {
114 (
float) explosionSpecJson.getDouble(
"duration"),
115 (
float) explosionSpecJson.getDouble(
"radius"),
116 (
float) explosionSpecJson.getDouble(
"coreRadius"),
117 (
float) explosionSpecJson.optDouble(
"maxDamage", 0),
118 (
float) explosionSpecJson.optDouble(
"minDamage", 0),
121 (
float) explosionSpecJson.optDouble(
"particleSizeMin", 0),
122 (
float) explosionSpecJson.optDouble(
"particleSizeRange", 0),
123 (
float) explosionSpecJson.optDouble(
"particleDuration", 0),
124 explosionSpecJson.optInt(
"particleCount", 0),
126 Misc.
optColor(explosionSpecJson,
"explosionColor",
null)
129 spec.useDetailedExplosion = explosionSpecJson.optBoolean(
"useDetailedExplosion",
false);
131 spec.detailedExplosionRadius = (float) explosionSpecJson.optDouble(
"detailedExplosionRadius", -1f);
132 spec.detailedExplosionFlashRadius = (float) explosionSpecJson.optDouble(
"detailedExplosionFlashRadius", -1f);
133 spec.detailedExplosionFlashDuration = (float) explosionSpecJson.optDouble(
"detailedExplosionFlashDuration", -1f);
134 spec.detailedExplosionFlashColorFringe =
Misc.
optColor(explosionSpecJson,
"detailedExplosionFlashColorFringe",
null);
135 spec.detailedExplosionFlashColorCore =
Misc.
optColor(explosionSpecJson,
"detailedExplosionFlashColorCore",
null);
136 spec.soundVolume = (float) explosionSpecJson.optDouble(
"soundVolume", 1f);
138 spec.particleSpawnRadius = (float) explosionSpecJson.optDouble(
"particleSpawnRadius", -1f);
144 spec.
setSoundSetId(explosionSpecJson.optString(
"sound",
null));
153 float particleSizeMin,
float particleSizeRange,
154 float particleDuration,
int particleCount, Color particleColor, Color explosionColor) {
155 this.duration = duration;
156 this.radius = radius;
157 this.coreRadius = coreRadius;
158 this.maxDamage = maxDamage;
159 this.minDamage = minDamage;
160 this.collisionClass = collisionClass;
161 this.collisionClassByFighter = collisionClassByFighter;
162 this.particleSizeMin = particleSizeMin;
163 this.particleSizeRange = particleSizeRange;
164 this.particleDuration = particleDuration;
165 this.particleCount = particleCount;
166 this.particleColor = particleColor;
167 if (explosionColor !=
null) {
168 this.explosionColor = explosionColor;
170 this.explosionColor = particleColor;
175 return particleSpawnRadius;
179 this.particleSpawnRadius = particleSpawnRadius;
183 return explosionColor;
187 this.explosionColor = explosionColor;
195 this.damageType = damageType;
203 this.duration = duration;
211 this.radius = radius;
219 this.maxDamage = maxDamage;
227 this.minDamage = minDamage;
231 return collisionClass;
235 this.collisionClass = collisionClass;
239 return collisionClassByFighter;
243 this.collisionClassByFighter = collisionClassByFighter;
247 return particleSizeMin;
251 this.particleSizeMin = particleSizeMin;
255 return particleSizeRange;
259 this.particleSizeRange = particleSizeRange;
263 return particleDuration;
267 this.particleDuration = particleDuration;
271 return particleCount;
275 this.particleCount = particleCount;
279 return particleColor;
283 this.particleColor = particleColor;
291 this.coreRadius = coreRadius;
301 this.showGraphic = showGraphic;
308 }
catch (CloneNotSupportedException e) {
314 return useDetailedExplosion;
318 this.useDetailedExplosion = useDetailedExplosion;
322 return collisionClassByFighter;
330 this.modifier = modifier;
334 return detailedExplosionRadius;
338 this.detailedExplosionRadius = detailedExplosionRadius;
342 return detailedExplosionFlashRadius;
346 this.detailedExplosionFlashRadius = detailedExplosionFlashRadius;
350 return detailedExplosionFlashColorFringe;
354 this.detailedExplosionFlashColorFringe = detailedExplosionFlashColorFringe;
358 return detailedExplosionFlashColorCore;
362 this.detailedExplosionFlashColorCore = detailedExplosionFlashColorCore;
366 return detailedExplosionFlashDuration;
370 this.detailedExplosionFlashDuration = detailedExplosionFlashDuration;
378 this.soundVolume = soundVolume;
386 this.maxEMPDamage = maxEMPDamage;
394 this.minEMPDamage = minEMPDamage;
static final String EXPLOSION_DAMAGE_MULT
static final String EXPLOSION_RADIUS_MULT
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 setMaxEMPDamage(float maxEMPDamage)
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)
void setSoundVolume(float soundVolume)
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()
void setMinEMPDamage(float minEMPDamage)
static DamagingExplosionSpec loadFromJSON(JSONObject explosionSpecJson)
float getParticleSizeMin()
Color getDetailedExplosionFlashColorFringe()
MutableStat getModifier()
boolean isUseDetailedExplosion()
void setParticleColor(Color particleColor)
void setMinDamage(float minDamage)
Color getExplosionColor()
static Color optColor(JSONObject json, String key, Color defaultValue)
static Color getColor(JSONObject json, String key)
static< T extends Enum< T > T mapToEnum(JSONObject json, String key, Class< T > enumType, T defaultOption)
float getCollisionRadius()
DynamicStatsAPI getDynamic()
MutableShipStatsAPI getMutableStats()
float getValue(String id)