Starsector API
Loading...
Searching...
No Matches
ShipExplosionFlareVisual.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat;
2
3import java.util.EnumSet;
4
5import java.awt.Color;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.combat.BaseCombatLayeredRenderingPlugin;
9import com.fs.starfarer.api.combat.CombatEngineLayers;
10import com.fs.starfarer.api.combat.CombatEntityAPI;
11import com.fs.starfarer.api.combat.ShipAPI;
12import com.fs.starfarer.api.combat.ViewportAPI;
13import com.fs.starfarer.api.graphics.SpriteAPI;
14import com.fs.starfarer.api.util.FaderUtil;
15import com.fs.starfarer.api.util.Misc;
16
25
26 public static class ShipExplosionFlareParams implements Cloneable {
27 public CombatEntityAPI attachedTo;
28 public Color color;
29 public float flareWidth;
30 public float flareHeight;
31 public float fadeIn = 0.25f;
32 public float fadeOut = 2f;
33
34 public ShipExplosionFlareParams() {
35 }
36
37 public ShipExplosionFlareParams(CombatEntityAPI attachedTo, Color color, float flareWidth, float flareHeight) {
38 this.attachedTo = attachedTo;
39 this.color = color;
40 this.flareWidth = flareWidth;
41 this.flareHeight = flareHeight;
42 }
43
44 @Override
45 protected ShipExplosionFlareParams clone() {
46 try {
47 return (ShipExplosionFlareParams) super.clone();
48 } catch (CloneNotSupportedException e) {
49 return null; // should never happen
50 }
51 }
52
53 }
54
55 protected ShipExplosionFlareParams p;
56 protected SpriteAPI sprite;
57 protected FaderUtil fader;
58
59 public ShipExplosionFlareVisual(ShipExplosionFlareParams p) {
60 this.p = p;
61 //fader = new FaderUtil(1f, 0f, 2f);
62 //fader.fadeOut();
63 fader = new FaderUtil(0f, p.fadeIn, p.fadeOut);
64 fader.setBounceDown(true);
65 fader.fadeIn();
66 sprite = Global.getSettings().getSprite("graphics/fx/starburst_glow1.png");
67 }
68
69 public float getRenderRadius() {
70 return Math.max(p.flareWidth, p.flareHeight) + 500f;
71 }
72
73
74 @Override
75 public EnumSet<CombatEngineLayers> getActiveLayers() {
77 }
78
79 public void advance(float amount) {
80 if (Global.getCombatEngine().isPaused()) return;
81
82 fader.advance(amount);
83
84 if (entity != null && p.attachedTo != null) {
85 if (p.attachedTo instanceof ShipAPI) {
86 entity.getLocation().set(((ShipAPI)p.attachedTo).getShieldCenterEvenIfNoShield());
87 } else {
88 entity.getLocation().set(p.attachedTo.getLocation());
89 }
90 }
91 }
92
94 super.init(entity);
95 }
96
97 public boolean isExpired() {
98 return fader.isFadedOut();
99 }
100
102 float x = entity.getLocation().x;
103 float y = entity.getLocation().y;
104
105 float b = fader.getBrightness();
106 if (fader.isFadingIn() && b > 0.01f) {
107 b = (float) Math.sqrt(b);
108 } else {
109 b *= b;
110 }
111 float alphaMult = viewport.getAlphaMult();
112
113 alphaMult *= b;
114
115 float f = 0.5f + 0.5f * b;
116 f = 1f;
117
118 sprite.setColor(p.color);
119 sprite.setSize(p.flareWidth * f, p.flareHeight * f);
121 sprite.setAlphaMult(alphaMult);
123
124 //f *= 0.75f;
125 sprite.setColor(Misc.scaleAlpha(Color.white, 1f));
126 sprite.setSize(p.flareWidth * f, p.flareHeight * f * 0.33f);
128 sprite.setAlphaMult(alphaMult);
130
131// f = 0.5f + 0.5f * b;
132// sprite.setColor(p.color);
133// sprite.setSize(p.flareHeight * f, p.flareWidth * f * 0.5f);
134// sprite.setAdditiveBlend();
135// sprite.setAlphaMult(alphaMult);
136// sprite.renderAtCenter(x, y);
137
138// f *= 0.5f;
139// sprite.setColor(Misc.scaleAlpha(Color.white, b));
140// sprite.setSize(p.flareHeight * f, p.flareWidth * f * 0.5f);
141// sprite.setAdditiveBlend();
142// sprite.setAlphaMult(alphaMult);
143// sprite.renderAtCenter(x, y);
144 }
145
146
147
148}
149
150
static SettingsAPI getSettings()
Definition Global.java:57
static CombatEngineAPI getCombatEngine()
Definition Global.java:69
void render(CombatEngineLayers layer, ViewportAPI viewport)
void setBounceDown(boolean bounceDown)
static Color scaleAlpha(Color color, float factor)
Definition Misc.java:1309
SpriteAPI getSprite(String filename)
void setSize(float width, float height)
void renderAtCenter(float x, float y)