001package com.fs.starfarer.api.impl.combat.dweller;
002
003import java.util.LinkedHashSet;
004import java.util.Set;
005
006import java.awt.Color;
007
008import org.lwjgl.util.vector.Vector2f;
009
010import com.fs.starfarer.api.combat.CombatEngineLayers;
011import com.fs.starfarer.api.util.FaderUtil;
012import com.fs.starfarer.api.util.Misc;
013import com.fs.starfarer.api.util.ValueShifterUtil;
014
015public class BaseDwellerShipPart implements DwellerShipPart {
016        public String id;
017        public Set<String> tags = new LinkedHashSet<>();
018        public Vector2f offset;
019        public float facingOffset;
020        public float alphaMult = 1f;
021        public float currBrightness;
022        public ValueShifterUtil brightness;
023        
024        public Color color = Color.white;
025        public boolean additiveBlend = false;
026        public boolean negativeBlend = false;
027        public FaderUtil fader;
028        
029        public BaseDwellerShipPart(Vector2f offset, float facingOffset) {
030                this.offset = offset;
031                this.facingOffset = facingOffset;
032                
033                fader = new FaderUtil(0f, 1f, 1f);
034                fader.fadeIn();
035                
036                brightness = new ValueShifterUtil(1f);
037        }
038        
039        public void setSystemActivated() {
040                setActivated(DwellerCombatPlugin.SYSTEM_ACTIVATED);
041        }
042        public void setWeaponActivated() {
043                setActivated(DwellerCombatPlugin.WEAPON_ACTIVATED);
044        }
045        public void setShieldActivated() {
046                setActivated(DwellerCombatPlugin.SHIELD_ACTIVATED);
047        }
048        public void setFluxActivated() {
049                setActivated(DwellerCombatPlugin.FLUX_ACTIVATED);
050        }
051        
052        public void setActivated(String ...tags) {
053                for (String tag : tags) {
054                        this.tags.add(tag);
055                }
056        }
057                        
058        
059        public void advance(float amount) {
060                fader.advance(amount);
061                brightness.advance(amount);
062                
063                float desired = brightness.getCurr();
064                currBrightness = Misc.approach(currBrightness, desired, 1f, 1f, amount);
065        }
066        
067        public void render(float entityX, float entityY, float alphaMult, float angle, CombatEngineLayers layer) {
068                alphaMult *= this.alphaMult;
069                alphaMult *= fader.getBrightness();
070                alphaMult *= currBrightness;
071                
072                Vector2f rot = Misc.rotateAroundOrigin(offset, angle + 90);
073                renderImpl(entityX + rot.x, entityY + rot.y, alphaMult, angle, layer);
074                
075        }
076        
077        protected void renderImpl(float x, float y, float alphaMult, float angle, CombatEngineLayers layer) {
078                
079        }
080        
081        @Override
082        public void fadeOut() {
083                fader.fadeOut();
084        }
085        @Override
086        public void fadeIn() {
087                fader.fadeIn();
088        }
089        @Override
090        public FaderUtil getFader() {
091                return fader;
092        }
093        @Override
094        public float getAlphaMult() {
095                return alphaMult;
096        }
097        @Override
098        public void setAlphaMult(float alphaMult) {
099                this.alphaMult = alphaMult;
100        }
101        @Override
102        public String getId() {
103                return id;
104        }
105        public void setId(String id) {
106                this.id = id;
107        }
108        @Override
109        public Set<String> getTags() {
110                return tags;
111        }
112        @Override
113        public void addTag(String tag) {
114                tags.add(tag);
115        }
116        @Override
117        public void removeTag(String tag) {
118                tags.remove(tag);
119                
120        }
121        @Override
122        public boolean hasTag(String tag) {
123                return tags.contains(tag);
124        }
125        
126        @Override
127        public ValueShifterUtil getBrightness() {
128                return brightness;
129        }
130        @Override
131        public Color getColor() {
132                return color;
133        }
134        @Override
135        public void setColor(Color color) {
136                this.color = color;
137        }
138        
139        
140}
141