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