001package com.fs.starfarer.api.impl.combat.dweller; 002 003import com.fs.starfarer.api.combat.DamageType; 004import com.fs.starfarer.api.combat.ShipAPI; 005import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.DCPPlugin; 006import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams; 007 008public class ShroudedEjectaShipCreator extends BaseDwellerShipCreator implements DCPPlugin { 009 010 public static float EXPLOSION_DAMAGE = 2000f; 011 public static DamageType EXPLOSION_DAMAGE_TYPE = DamageType.ENERGY; 012 013 public static String ID_BODY_ONE = "id_body_one"; 014 public static String ID_BODY_TWO = "id_body_two"; 015 016 public static String TAG_MIRRORED_VORTEX = "tag_mirrored_vortex"; 017 018 @Override 019 protected DwellerCombatPlugin createPlugin(ShipAPI ship) { 020 //DwellerCombatPlugin plugin = super.createPlugin(ship); 021 022 DwellerCombatPlugin plugin = DwellerCombatPlugin.getDwellerPluginFor(ship); 023 if (plugin == null) { 024 plugin = new DwellerCombatPlugin(ship); 025 } 026 027 //plugin.setPlugin(this); 028 029// List<DwellerShipPart> parts = plugin.getParts(); 030// parts.clear(); 031// 032// float scale = 1f; 033// //scale = 0.5f; 034// 035// float spinMult = 1f; 036// 037// boolean mirror = (float) Math.random() > 0.5f; 038// //mirror = true; 039// if (mirror) { 040// ship.addTag(TAG_MIRRORED_VORTEX); 041// } 042// 043// WobblyPart part = new WobblyPart("shrouded_vortex_base", 2f * scale, 1f, new Vector2f(0, 0), 0f); 044// part.setId(ID_BODY_ONE); 045// part.renderer.setMirror(mirror); 046// //part.setSpin(360f * spinMult, 360f * 2f * spinMult, 360f * spinMult); 047// parts.add(part); 048// 049// part = new WobblyPart("shrouded_vortex_base2", 3f * scale, 3, 3, 1f, new Vector2f(0, 0), 0f); 050// //part.setSpin(270f * spinMult, 360f * spinMult, 270f * spinMult); 051// part.setId(ID_BODY_TWO); 052// part.renderer.setMirror(mirror); 053// part.alphaMult = 0.5f; 054// parts.add(part); 055// 056//// Color glow = DwellerCombatPlugin.STANDARD_PART_GLOW_COLOR; 057//// 058//// part = new WobblyPart("clusterA", 1f * scale, 3, 3, 2f, new Vector2f(70f * scale, 0), 0f); 059//// part.color = glow; 060//// part.additiveBlend = true; 061//// //part.setWeaponActivated(); 062//// //parts.add(part); 063//// 064//// part = new WobblyPart("clusterB", 1f * scale, 3, 3, 2f, new Vector2f(30f * scale, 0), 0f); 065//// part.color = glow; 066//// part.additiveBlend = true; 067//// //part.setFluxActivated(); 068////// part.setWeaponActivated(); 069////// part.setShieldActivated(); 070////// part.setSystemActivated(); 071//// parts.add(part); 072//// 073//// part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f); 074//// part.color = glow; 075//// part.additiveBlend = true; 076// //part.setShieldActivated(); 077// //parts.add(part); 078 079 return plugin; 080 } 081 082 @Override 083 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) { 084 params.maxOffset = 120f; 085 params.initialMembers = 30; 086 params.baseMembersToMaintain = params.initialMembers; 087 params.baseSpriteSize *= 1.33f; 088 //params.baseSpriteSize *= 1.5f; 089 090 params.spawnOffsetMult = 1f; 091 params.spawnOffsetMultForInitialSpawn = params.spawnOffsetMult; 092 093 //params.negativeParticleAreaMult = 1.25f; 094 //params.negativeParticleDurMult *= 0.5f; 095 //params.negativeParticleSizeMult *= 1.4f; 096 //params.negativeParticleGenRate *= 1f; 097 098// params.negativeParticleGenRate = 0f; 099 //params.negativeParticleGenRate *= 0.5f; 100 params.negativeParticleNumBase = 3; 101 params.negativeParticleHighContrastMode = true; 102 params.negativeParticleSizeMult = 1.5f; 103 104// params.alphaMult = 0.25f; 105// params.negativeParticleGenRate = 0f; 106 107 //params.overloadGlowSizeMult *= 0.5f; 108 109// params.overloadArcThickness *= 0.5f; 110// params.overloadArcCoreThickness *= 0.5f; 111 112// params.maxSpeed += 500f; 113 params.springStretchMult = 1f; 114// params.baseFriction *= 10f; 115// params.frictionRange *= 1f; 116 } 117 118 119 120 @Override 121 public void initInCombat(ShipAPI ship) { 122 super.initInCombat(ship); 123 124 ship.setExplosionScale(0f); // no explosion sound or visual, just dissipates and fades out 125 } 126 127 @Override 128 public void advance(DwellerCombatPlugin plugin, float amount) { 129// CombatEntityAPI attachedTo = plugin.getAttachedTo(); 130// if (attachedTo instanceof ShipAPI) { 131// ShipAPI ship = (ShipAPI) attachedTo; 132// float hullLevel = ship.getHullLevel(); 133// float mult = 1f - hullLevel; 134// if (mult < 0f) mult = 0f; 135// if (mult > 1f) mult = 1f; 136// 137// mult *= 3f; 138// 139// DwellerShipPart part = plugin.getPart(ID_BODY_ONE); 140// if (part != null) { 141// ((WobblyPart)part).getSpin().setValueMult(mult); 142// } 143// part = plugin.getPart(ID_BODY_TWO); 144// if (part != null) { 145// ((WobblyPart)part).getSpin().setValueMult(mult); 146// } 147 148// CombatEngineAPI engine = Global.getCombatEngine(); 149// engine.applyDamage(ship, ship.getLocation(), 100f, DamageType.ENERGY, 0f, true, false, ship, false); 150// //ship.setCollisionClass(CollisionClass.SHIP); 151// //ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f); 152// } 153 } 154} 155 156 157 158 159 160 161 162 163