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