001package com.fs.starfarer.api.campaign;
002
003import java.util.EnumSet;
004
005import java.awt.Color;
006
007import org.lwjgl.util.vector.Vector2f;
008
009import com.fs.starfarer.api.combat.ViewportAPI;
010import com.fs.starfarer.api.loading.TerrainSpecAPI;
011import com.fs.starfarer.api.ui.TooltipMakerAPI;
012
013public interface CampaignTerrainPlugin {
014        void init(String terrainId, SectorEntityToken entity, Object param);
015        
016        String getTerrainId();
017        void setTerrainId(String id);
018        
019        /**
020         * How far away from the viewport the center of this entity can be before it stops being rendered.
021         * Should at least be the radius of the entity; sometimes more may be necessary depending on the
022         * visual effect desired.
023         * @return
024         */
025        float getRenderRange();
026        
027        
028        /**
029         * Set of layers can not change.
030         * @return
031         */
032        EnumSet<CampaignEngineLayers> getActiveLayers();
033        void render(CampaignEngineLayers layer, ViewportAPI viewport);
034        
035        void advance(float amount);
036        
037        /**
038         * First pass.
039         * @param factor conversion factor from world coordinates to map screen coordinates, including current zoom level.
040         * @param alphaMult
041         */
042        void renderOnMap(float factor, float alphaMult);
043        
044        /**
045         * Second pass.
046         * @param factor conversion factor from world coordinates to map screen coordinates, including current zoom level.
047         * @param alphaMult
048         */
049        void renderOnMapAbove(float factor, float alphaMult);
050        
051        
052        boolean containsEntity(SectorEntityToken other);
053        boolean containsPoint(Vector2f point, float radius);
054        
055        boolean hasMapIcon();
056        
057        boolean hasTooltip();
058        void createTooltip(TooltipMakerAPI tooltip, boolean expanded);
059        boolean isTooltipExpandable();
060        float getTooltipWidth();
061        String getTerrainName();
062        //String getTerrainNameLowerCase();
063        Color getNameColor();
064        
065        boolean canPlayerHoldStationIn();
066        
067        TerrainSpecAPI getSpec();
068        
069        
070        boolean hasAIFlag(Object flag);
071        boolean hasAIFlag(Object flag, CampaignFleetAPI fleet);
072        
073        /**
074         * Mainly intended for AI use.
075         * @param locFrom
076         * @return
077         */
078        float getMaxEffectRadius(Vector2f locFrom);
079        
080        /**
081         * Mainly intended for AI use.
082         * @param locFrom
083         * @return
084         */
085        float getMinEffectRadius(Vector2f locFrom);
086        
087        /**
088         * Mainly intended for AI use.
089         * @param locFrom
090         * @return
091         */
092        float getOptimalEffectRadius(Vector2f locFrom);
093
094        void setTerrainName(String name);
095
096        String getIconSpriteName();
097
098        void renderOnRadar(Vector2f radarCenter, float factor, float alphaMult);
099
100        String getNameAOrAn();
101
102        String getNameForTooltip();
103
104        void setEntity(SectorEntityToken entity);
105}
106
107
108
109