001package com.fs.starfarer.api.impl.campaign.intel.misc;
002
003import java.util.ArrayList;
004import java.util.LinkedHashSet;
005import java.util.List;
006import java.util.Set;
007
008import java.awt.Color;
009
010import com.fs.starfarer.api.Global;
011import com.fs.starfarer.api.campaign.FactionSpecAPI;
012import com.fs.starfarer.api.fleet.FleetMemberAPI;
013import com.fs.starfarer.api.fleet.FleetMemberType;
014import com.fs.starfarer.api.ui.Alignment;
015import com.fs.starfarer.api.ui.SectorMapAPI;
016import com.fs.starfarer.api.ui.TooltipMakerAPI;
017import com.fs.starfarer.api.util.Misc;
018
019public class SimUpdateIntel extends FleetLogIntel {
020
021        protected LinkedHashSet<String> addedFactions;
022        protected LinkedHashSet<String> addedVariants;
023
024        public SimUpdateIntel(LinkedHashSet<String> addedFactions, LinkedHashSet<String> addedVariants) {
025                this.addedFactions = addedFactions;
026                this.addedVariants = addedVariants;
027                
028                Global.getSector().getIntelManager().addIntel(this);
029        }
030
031        protected void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode, boolean isUpdate, Color tc, float initPad) {
032                Color h = Misc.getHighlightColor();
033                Color g = Misc.getGrayColor();
034                float pad = 3f;
035                float opad = 10f;
036                
037                bullet(info);
038                
039                if (!addedFactions.isEmpty()) {
040                        String factions = addedFactions.size() == 1 ? "faction" : "factions";
041                        info.addPara("%s new " + factions + "", initPad, tc, h, "" + addedFactions.size());
042                        initPad = 0f;
043                }
044                if (!addedVariants.isEmpty()) {
045                        String variants = addedVariants.size() == 1 ? "variant" : "variants";
046                        info.addPara("%s new hull " + variants + "", initPad, tc, h, "" + addedVariants.size());
047                        initPad = 0f;
048                }
049                unindent(info);
050        }
051
052        @Override
053        public void createSmallDescription(TooltipMakerAPI info, float width, float height) {
054                Color h = Misc.getHighlightColor();
055                Color g = Misc.getGrayColor();
056                Color tc = Misc.getTextColor();
057                float pad = 3f;
058                float small = 3f;
059                float opad = 10f;
060
061//              info.addPara("New simulator opponents and factions unlocked. New ships "
062//                              + "are unlocked by encountering and destroying them in battle.", 0f);
063                
064                if (!addedFactions.isEmpty()) {
065                        info.addSpacer(0f);
066                        info.addSectionHeading("Factions", Alignment.MID, opad);
067                        info.addPara("New simulator factions available. New factions "
068                                        + "are are made available by encountering their fleets, or deserters from the faction, in battle.", opad);
069                        //bullet(info);
070                        float initPad = opad;
071                        for (String fid : addedFactions) {
072                                FactionSpecAPI spec = Global.getSettings().getFactionSpec(fid);
073                                TooltipMakerAPI para = info.beginImageWithText(spec.getCrest(), 32);
074                                para.addPara(Misc.ucFirst(spec.getDisplayName()), spec.getBaseUIColor(), 0f);
075                                //para.getPosition().setXAlignOffset(100f);
076                                info.addImageWithText(initPad);
077                                //info.addPara(Misc.ucFirst(spec.getDisplayName()), spec.getBaseUIColor(), initPad);
078                                initPad = 3f;
079                        }
080                        //unindent(info);
081                }
082                
083                if (!addedVariants.isEmpty()) {
084                        info.addSpacer(0f);
085                        float extra = 0f;
086                        if (!addedFactions.isEmpty()) extra = 2f;
087                        info.addSectionHeading("Ship variants", Alignment.MID, opad + extra);
088                        info.addPara("New simulator opponents available. New ships "
089                                                + "are made available by encountering and destroying them in battle.", opad);
090                        
091                        List<FleetMemberAPI> members = new ArrayList<FleetMemberAPI>();
092                        for (String vid : addedVariants) {
093                                FleetMemberAPI member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, vid);
094                                members.add(member);
095                        }
096                        
097                        int cols = 7;
098                        float iconSize = width / cols;
099                        int rows = members.size() / cols;
100                        if (rows * cols < members.size()) rows++;
101                        info.addShipList(cols, rows, iconSize, Misc.getBasePlayerColor(), members, opad);
102                        
103                        //info.showShips(members, members.size(), true, opad);
104//                      bullet(info);
105//                      float initPad = opad;
106//                      for (String vid : addedVariants) {
107//                              ShipVariantAPI v = Global.getSettings().getVariant(vid);
108//                              if (v == null) continue;
109//                              info.addPara(v.getFullDesignationWithHullName(), initPad);
110//                              initPad = 0f;
111//                      }
112//                      unindent(info);
113                }
114                
115                addLogTimestamp(info, tc, opad);
116                
117                addDeleteButton(info, width);
118        }
119
120        @Override
121        public String getIcon() {
122                return Global.getSettings().getSpriteName("intel", "simulator_update");
123        }
124
125        @Override
126        public Set<String> getIntelTags(SectorMapAPI map) {
127                Set<String> tags = super.getIntelTags(map);
128                return tags;
129        }
130
131        public String getName() {
132                return "Simulator Update";
133        }
134
135}