001package com.fs.starfarer.api.impl.campaign.world;
002
003import java.awt.Color;
004import java.util.Random;
005
006import com.fs.starfarer.api.Global;
007import com.fs.starfarer.api.campaign.CargoAPI;
008import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
009import com.fs.starfarer.api.campaign.LocationAPI;
010import com.fs.starfarer.api.campaign.PlanetAPI;
011import com.fs.starfarer.api.campaign.SectorAPI;
012import com.fs.starfarer.api.campaign.SectorEntityToken;
013import com.fs.starfarer.api.campaign.SpecialItemData;
014import com.fs.starfarer.api.campaign.StarSystemAPI;
015import com.fs.starfarer.api.impl.campaign.ids.Commodities;
016import com.fs.starfarer.api.impl.campaign.ids.Conditions;
017import com.fs.starfarer.api.impl.campaign.ids.Entities;
018import com.fs.starfarer.api.impl.campaign.ids.Factions;
019import com.fs.starfarer.api.impl.campaign.ids.Items;
020import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
021import com.fs.starfarer.api.impl.campaign.ids.Planets;
022import com.fs.starfarer.api.impl.campaign.ids.StarTypes;
023import com.fs.starfarer.api.impl.campaign.ids.Tags;
024import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
025import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
026import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.AddedEntity;
027import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.EntityLocation;
028import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial;
029import com.fs.starfarer.api.impl.campaign.shared.WormholeManager;
030import com.fs.starfarer.api.impl.campaign.shared.WormholeManager.WormholeItemData;
031
032public class Limbo {
033
034        public void generate(SectorAPI sector) {
035                
036                StarSystemAPI system = sector.createStarSystem("Limbo");
037                system.addTag(Tags.THEME_HIDDEN);
038                system.addTag(Tags.THEME_SPECIAL);
039                float w = Global.getSettings().getFloat("sectorWidth");
040                float h = Global.getSettings().getFloat("sectorHeight");
041                system.getLocation().set(-w/2f + 2300f, -h/2f + 2100f);
042                
043                
044                LocationAPI hyper = Global.getSector().getHyperspace();
045                
046                system.setBackgroundTextureFilename("graphics/backgrounds/background4.jpg");
047                
048                
049                // create the star and generate the hyperspace anchor for this system
050                PlanetAPI star = system.initStar("limbo", // unique id for this star 
051                                                                                    StarTypes.BROWN_DWARF,  // id in planets.json
052                                                                                    400f,                 // radius (in pixels at default zoom)
053                                                                                    250); // corona radius, from star edge
054                
055                
056                system.setLightColor(new Color(180, 205, 140)); // light color in entire system, affects all entities
057                
058                Random random = StarSystemGenerator.random;
059                
060                PlanetAPI planet = system.addPlanet("limbo_hades", star, "Hades", Planets.ROCKY_METALLIC, 215, 60, 1700, 75);
061                planet.getMemoryWithoutUpdate().set("$hades", true);
062                planet.setCustomDescriptionId("limbo_hades");
063                planet.getMarket().addCondition(Conditions.NO_ATMOSPHERE);
064                planet.getMarket().addCondition(Conditions.COLD);
065                planet.getMarket().addCondition(Conditions.POOR_LIGHT);
066                planet.getMarket().addCondition(Conditions.RARE_ORE_RICH);
067                
068                float orbitRadius = planet.getRadius() + 300f;
069                float orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
070                EntityLocation loc = new EntityLocation();
071                loc.orbit = Global.getFactory().createCircularOrbitPointingDown(planet, random.nextFloat() * 360f, 
072                                                                                                                                                orbitRadius, orbitDays); 
073                AddedEntity added = BaseThemeGenerator.addEntity(null, system, loc, Entities.STATION_MINING, Factions.NEUTRAL);
074                added.entity.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SPEC_ID_OVERRIDE, "limbo_mining_station");
075                added.entity.setName("Automated Mining Station");
076                added.entity.getMemoryWithoutUpdate().set("$limboMiningStation", true);
077                added.entity.setCustomDescriptionId("station_mining_automated");
078                
079                CargoAPI cargo = Global.getFactory().createCargo(true);
080                cargo.addCommodity(Commodities.RARE_METALS, 200f + random.nextInt(101));
081                BaseSalvageSpecial.addExtraSalvage(added.entity, cargo);
082
083                
084                StarSystemGenerator.addStableLocations(system, 1);
085                
086                
087                for (SectorEntityToken curr : system.getEntitiesWithTag(Tags.STABLE_LOCATION)) {
088                        curr.getMemoryWithoutUpdate().set(WormholeManager.LIMBO_STABLE_LOCATION, true);
089                        
090                        orbitRadius = curr.getRadius() + 200f;
091                        orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
092                        loc = new EntityLocation();
093                        loc.orbit = Global.getFactory().createCircularOrbitPointingDown(curr, random.nextFloat() * 360f, 
094                                        orbitRadius, orbitDays); 
095                        added = BaseThemeGenerator.addEntity(null, system, loc, Entities.LARGE_CACHE, Factions.NEUTRAL);
096                        added.entity.getMemoryWithoutUpdate().set(MemFlags.SALVAGE_SPEC_ID_OVERRIDE, Entities.SPEC_LIMBO_WORMHOLE_CACHE);
097                        added.entity.setName("Mothballed Equipment Cache");
098                        added.entity.setCustomDescriptionId(Entities.SPEC_LIMBO_WORMHOLE_CACHE);
099                        added.entity.getMemoryWithoutUpdate().set("$limboWormholeCache", true);
100                        
101                        cargo = Global.getFactory().createCargo(true);
102                        SpecialItemData item = WormholeManager.createWormholeAnchor("foxtrot", "Foxtrot");
103                        cargo.addItems(CargoItemType.SPECIAL, item, 1);
104                        
105                        item = new SpecialItemData(Items.WORMHOLE_SCANNER, null);
106                        cargo.addItems(CargoItemType.SPECIAL, item, 1);
107                        
108                        cargo.addFuel(110 + random.nextInt(21));
109                        BaseSalvageSpecial.addExtraSalvage(added.entity, cargo);
110                        
111                        break;
112                }
113                
114                
115                
116                if (Global.getSettings().isDevMode()) {
117                        orbitRadius = planet.getRadius() + 600f;
118                        orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
119                        loc = new EntityLocation();
120                        loc.orbit = Global.getFactory().createCircularOrbitPointingDown(planet, random.nextFloat() * 360f, 
121                                                                                                                                                        orbitRadius, orbitDays); 
122                        added = BaseThemeGenerator.addEntity(null, system, loc, Entities.EQUIPMENT_CACHE, Factions.NEUTRAL);
123                        added.entity.setName("Test Wormhole Cache");
124        
125                        CargoAPI testCargo = Global.getFactory().createCargo(true);
126                        
127                        WormholeItemData itemData = new WormholeItemData("standard", "bravo", "Bravo");
128                        SpecialItemData item = new SpecialItemData(Items.WORMHOLE_ANCHOR, itemData.toJsonStr());
129                        testCargo.addItems(CargoItemType.SPECIAL, item, 1);
130                        
131                        itemData = new WormholeItemData("standard", "sierra", "Sierra");
132                        item = new SpecialItemData(Items.WORMHOLE_ANCHOR, itemData.toJsonStr());
133                        testCargo.addItems(CargoItemType.SPECIAL, item, 1);
134                        
135                        item = new SpecialItemData(Items.WORMHOLE_SCANNER, null);
136                        testCargo.addItems(CargoItemType.SPECIAL, item, 1);
137        
138                        BaseSalvageSpecial.addExtraSalvage(added.entity, testCargo);
139                }
140
141                system.autogenerateHyperspaceJumpPoints(true, true);
142        }
143}
144
145
146
147
148
149
150
151
152
153