001package com.fs.starfarer.api.impl.combat; 002 003import java.awt.Color; 004 005import org.lwjgl.util.vector.Vector2f; 006 007import com.fs.starfarer.api.combat.BeamAPI; 008import com.fs.starfarer.api.combat.BeamEffectPlugin; 009import com.fs.starfarer.api.combat.CollisionClass; 010import com.fs.starfarer.api.combat.CombatEngineAPI; 011import com.fs.starfarer.api.combat.CombatEntityAPI; 012import com.fs.starfarer.api.combat.DamageType; 013import com.fs.starfarer.api.combat.DamagingProjectileAPI; 014import com.fs.starfarer.api.loading.DamagingExplosionSpec; 015import com.fs.starfarer.api.util.Misc; 016 017public class PaladinEffect implements BeamEffectPlugin { 018 019 private boolean done = false; 020 021 public void advance(float amount, CombatEngineAPI engine, BeamAPI beam) { 022 if (done) return; 023 024 CombatEntityAPI target = beam.getDamageTarget(); 025 boolean first = beam.getWeapon().getBeams().indexOf(beam) == 0; 026 if (target != null && beam.getBrightness() >= 1f && first) { 027 Vector2f point = beam.getTo(); 028 float maxDist = 0f; 029 for (BeamAPI curr : beam.getWeapon().getBeams()) { 030 maxDist = Math.max(maxDist, Misc.getDistance(point, curr.getTo())); 031 } 032 if (maxDist < 15f) { 033 DamagingProjectileAPI e = engine.spawnDamagingExplosion(createExplosionSpec(), beam.getSource(), point); 034 e.addDamagedAlready(target); 035 done = true; 036 } 037 } 038 } 039 040 public DamagingExplosionSpec createExplosionSpec() { 041 float damage = 100f; 042 DamagingExplosionSpec spec = new DamagingExplosionSpec( 043 0.1f, // duration 044 75f, // radius 045 50f, // coreRadius 046 damage, // maxDamage 047 damage / 2f, // minDamage 048 CollisionClass.PROJECTILE_FF, // collisionClass 049 CollisionClass.PROJECTILE_FIGHTER, // collisionClassByFighter 050 3f, // particleSizeMin 051 3f, // particleSizeRange 052 0.5f, // particleDuration 053 150, // particleCount 054 new Color(255,255,255,255), // particleColor 055 new Color(255,100,100,75) // explosionColor 056 ); 057 058 spec.setDamageType(DamageType.FRAGMENTATION); 059 spec.setUseDetailedExplosion(false); 060 spec.setSoundSetId("explosion_guardian"); 061 return spec; 062 } 063} 064 065 066 067