001package com.fs.starfarer.api.campaign;
002
003import java.util.Random;
004
005import java.awt.Color;
006
007import org.json.JSONException;
008
009import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
010import com.fs.starfarer.api.campaign.econ.MarketAPI;
011import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
012import com.fs.starfarer.api.graphics.SpriteAPI;
013import com.fs.starfarer.api.ui.TooltipMakerAPI;
014
015public interface SpecialItemPlugin {
016        public static interface RightClickActionHelper {
017                void removeFromClickedStackFirst(int num);
018                void removeFromAnyStack(CargoItemType type, Object data, int num);
019                void addItems(CargoItemType type, Object data, float quantity);
020                float getNumItems(CargoItemType type, Object data);
021        }
022        
023        public interface SpecialItemRendererAPI {
024                void renderSchematic(SpriteAPI sprite, float cx, float cy, float alphaMult);
025                void renderScanlines(SpriteAPI sprite, float cx, float cy, float alphaMult);
026                void renderScanlinesWithCorners(float blX, float blY, float tlX, float tlY,
027                                                                                float trX, float trY, float brX, float brY,
028                                                                                float alphaMult, boolean additive);
029                void renderSchematicWithCorners(SpriteAPI sprite, Color color, 
030                                                                           float blX, float blY, float tlX, float tlY,
031                                                                           float trX, float trY, float brX, float brY,
032                                                                           float alphaMult);
033                void renderShipWithCorners(String hullOrWingId, Color bgColor,
034                                float blX, float blY, float tlX, float tlY, float trX,
035                                float trY, float brX, float brY, float alphaMult, float glowMult, boolean withSpotlight);
036                void renderBGWithCorners(Color bgColor, float blX, float blY,
037                                float tlX, float tlY, float trX, float trY, float brX,
038                                float brY, float alphaMult, float glowMult, boolean additive);
039                void renderWeaponWithCorners(String weaponId, float blX, float blY,
040                                float tlX, float tlY, float trX, float trY, float brX,
041                                float brY, float alphaMult, float glowMult, boolean withSpotlight);
042
043        }
044        
045        /**
046         * Called before init(). init() may not be called if there's no stack.
047         * @param id
048         */
049        void setId(String id);
050        void init(CargoStackAPI stack);
051        
052        String getName();
053        int getPrice(MarketAPI market, SubmarketAPI submarket);
054        
055        boolean hasRightClickAction();
056        void performRightClickAction();
057        void performRightClickAction(RightClickActionHelper helper);
058        
059        boolean shouldRemoveOnRightClickAction();
060        
061//      int getNumToRemove();
062//      boolean shouldRemoveCalledAfterRightClickAction();
063//      void setReadOnlyCargoForRightClickAction(CargoAPI cargo);
064        
065        boolean isTooltipExpandable();
066        float getTooltipWidth();
067        void createTooltip(TooltipMakerAPI tooltip, boolean expanded, CargoTransferHandlerAPI transferHandler, Object stackSource);
068        
069        void render(float x, float y, float w, float h, float alphaMult, float glowMult, SpecialItemRendererAPI renderer);
070        
071        /**
072         * Return null to have this item turn into nothing, or an empty string if it has no parameters.
073         * @param params
074         * @return
075         * @throws JSONException
076         */
077        String resolveDropParamsToSpecificItemData(String params, Random random) throws JSONException;
078        String getDesignType();
079        
080        SpecialItemSpecAPI getSpec();
081}
082
083
084
085
086
087
088
089