001package com.fs.starfarer.api.impl.combat.dweller; 002 003import java.awt.Color; 004 005import org.lwjgl.util.vector.Vector2f; 006 007import com.fs.starfarer.api.Global; 008import com.fs.starfarer.api.combat.MutableShipStatsAPI; 009import com.fs.starfarer.api.combat.ShipAPI; 010import com.fs.starfarer.api.combat.ShipAPI.HullSize; 011import com.fs.starfarer.api.impl.campaign.ids.Tags; 012import com.fs.starfarer.api.impl.combat.RiftLanceEffect; 013import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams; 014import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.ShroudNegativeParticleFilter; 015import com.fs.starfarer.api.loading.HullModSpecAPI; 016import com.fs.starfarer.api.util.Misc; 017 018public class HumanShipShroudCreator extends BaseDwellerShipCreator { 019 @Override 020 public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) { 021 } 022 023 @Override 024 public void initAfterShipCreation(ShipAPI ship, String id) { 025 } 026 027 @Override 028 public void initAfterShipAddedToCombatEngine(ShipAPI ship, String id) { 029 } 030 031 @Override 032 public void initInCombat(ShipAPI ship) { 033 DwellerShroud shroud = createShroud(ship); 034 //setOverloadColorAndText(ship, shroud); 035 Color color = Misc.setAlpha(Misc.setBrightness(shroud.getParams().flashFringeColor, 255), 255); 036 ship.getFluxTracker().setOverloadColor(color); 037 } 038 039 @Override 040 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) { 041 //params.maxOffset = ship.getCollisionRadius(); 042 float maxOffset = 100f; 043 float scale = 1f; 044 float overloadGlowScale = 1f; 045 switch (ship.getHullSize()) { 046 case CAPITAL_SHIP: 047 maxOffset = 150f; 048 scale = 1.75f; 049 overloadGlowScale = 0.75f; 050 break; 051 case CRUISER: 052 maxOffset = 120f; 053 scale = 1.5f; 054 overloadGlowScale = 0.75f; 055 break; 056 case DESTROYER: 057 maxOffset = 100f; 058 scale = 1.25f; 059 overloadGlowScale = 0.5f; 060 break; 061 case FRIGATE: 062 case FIGHTER: 063 overloadGlowScale = 0.5f; 064 maxOffset = 75f; 065 break; 066 } 067 //params.maxOffset = ship.getCollisionRadius(); 068 params.maxOffset = maxOffset * 0.5f; 069 params.initialMembers = 0; 070 params.baseMembersToMaintain = params.initialMembers; 071 072 params.spawnOffsetMult = 0.75f; 073 074 int num = (int) (ship.getCollisionRadius() * ship.getCollisionRadius() / 800); 075 if (num < 15) num = 15; 076 if (ship.isDestroyer() && num < 22) num = 22; 077 if (num > 150) num = 150; 078 params.baseMembersToMaintain = num; 079 params.initialMembers = num; 080// params.flashProbability = 0f; 081// params.flashFrequency = 0f; 082// params.alphaMult = 0.25f; 083// params.baseSpriteSize = 128f * 1.5f * 0.67f * 1.5f; 084 085 //params.alphaMult = 0.25f; 086 087 float numShroudMods = 0; 088 for (String modId : ship.getVariant().getHullMods()) { 089 HullModSpecAPI spec = Global.getSettings().getHullModSpec(modId); 090 if (spec.hasTag(Tags.SHROUDED)) numShroudMods++; 091 } 092 093 params.alphaMult = 0.25f + (numShroudMods - 1f) * 0.1f; 094 if (params.alphaMult > 0.75f) params.alphaMult = 0.75f; 095 if (params.alphaMult < 0.25f) params.alphaMult = 0.25f; 096 097 params.baseSpriteSize *= scale; 098 099 //params.negativeParticleAlphaIntOverride = 100; 100 params.negativeParticleSpeedCap = ship.getMaxSpeedWithoutBoost() + 100f; 101 params.negativeParticleColorOverride = RiftLanceEffect.getColorForDarkening(ship.getSpriteAPI().getAverageColor()); 102 //params.negativeParticleSizeMult = 1.5f; 103 params.negativeParticleSizeMult = scale; 104 105 params.negativeParticleAreaMult = ship.getCollisionRadius() / params.maxOffset; 106 107// params.negativeParticleAlphaIntOverride = 50; 108// params.negativeParticleSizeMult = 0.5f; 109// params.negativeParticleNumBase *= 3; 110 111 params.overloadGlowSizeMult *= overloadGlowScale; 112 params.overloadArcOffsetMult = params.negativeParticleAreaMult * 0.8f; 113 114// params.overloadArcThickness *= 2f; 115// params.overloadArcCoreThickness *= 2f; 116 117 params.generateOffsetAroundAttachedEntityOval = true; 118// params.offsetModifier = new SwarmMemberOffsetModifier() { 119// @Override 120// public void modifyOffset(SwarmMember p) { 121// p.offset.x *= 0.75f; 122// } 123// }; 124 125 params.negativeParticleFilter = new ShroudNegativeParticleFilter() { 126 @Override 127 public boolean isParticleOk(DwellerShroud shroud, Vector2f loc) { 128 if (shroud.getAttachedTo() instanceof ShipAPI) { 129 ShipAPI ship = (ShipAPI) shroud.getAttachedTo(); 130 float targetingRadius = Misc.getTargetingRadius(loc, ship, false); 131 float dist = Misc.getDistance(ship.getLocation(), loc); 132 float pad = Math.max(50f, targetingRadius * 0.2f); 133 pad = params.maxOffset; 134 return dist < targetingRadius + pad && dist > targetingRadius * 0.75f; 135 } 136 return true; 137 } 138 139 }; 140 } 141 }