001package com.fs.starfarer.api.combat;
002
003import java.awt.Color;
004
005import org.lwjgl.util.vector.Vector2f;
006
007
008/**
009 * @author Alex Mosolov
010 *
011 * Copyright 2012 Fractal Softworks, LLC
012 */
013public interface ShieldAPI {
014        
015        public static enum ShieldType {NONE, FRONT, OMNI, PHASE}
016
017        void setType(ShieldType type);
018        ShieldType getType();
019        
020        float getFacing();
021        
022        
023        /**
024         * @return maximum arc.
025         */
026        float getArc();
027        /**
028         * @return currently open arc (0 if not on)
029         */
030        float getActiveArc();
031        void setActiveArc(float activeArc);
032        float getRadius();
033        boolean isOn();
034        boolean isOff();
035        
036        /**
037         * @return location of the center of the shield, in engine coordinates.
038         */
039        Vector2f getLocation();
040        
041        boolean isWithinArc(Vector2f point);
042        
043        void toggleOff();
044        
045        /**
046         * Does not include shield damage taken mult, but does include absorbption mult.
047         * @return
048         */
049        float getFluxPerPointOfDamage();
050        
051        /**
052         * Set the maximum arc.
053         * @param arc
054         */
055        void setArc(float arc);
056        
057        
058        void setInnerColor(Color color);
059        void setRingColor(Color ringColor);
060        Color getInnerColor();
061        Color getRingColor();
062        
063        /**
064         * Flux/second while shield is on.
065         * @return
066         */
067        float getUpkeep();
068        void forceFacing(float facing);
069        
070        void setRadius(float radius);
071        
072        /**
073         * Textures should be already loaded (i.e. via settings.json).
074         * @param radius
075         * @param textureInner
076         * @param textureRing
077         */
078        void setRadius(float radius, String textureInner, String textureRing);
079        void toggleOn();
080        float getUnfoldTime();
081        void setCenter(float x, float y);
082        
083        /**
084         * For shield textures, visual only.
085         * @return
086         */
087        float getInnerRotationRate();
088        /**
089         * For shield textures, visual only.
090         * @return
091         */
092        void setInnerRotationRate(float innerRotationRate);
093        /**
094         * For shield textures, visual only.
095         * @return
096         */
097        float getRingRotationRate();
098        /**
099         * For shield textures, visual only.
100         * @return
101         */
102        void setRingRotationRate(float ringRotationRate);
103        boolean isSkipRendering();
104        void setSkipRendering(boolean skipRendering);
105        void applyShieldEffects(Color innerColor, Color ringColor, float thicknessBonus, float fluctuationBonus, float effectLevel);
106        
107        
108        
109}