001package com.fs.starfarer.api.impl.campaign.world;
002
003import java.awt.Color;
004import java.util.Random;
005
006import org.lwjgl.util.vector.Vector2f;
007
008import com.fs.starfarer.api.Global;
009import com.fs.starfarer.api.campaign.JumpPointAPI;
010import com.fs.starfarer.api.campaign.LocationAPI;
011import com.fs.starfarer.api.campaign.PlanetAPI;
012import com.fs.starfarer.api.campaign.SectorAPI;
013import com.fs.starfarer.api.campaign.SectorEntityToken;
014import com.fs.starfarer.api.campaign.SpecialItemData;
015import com.fs.starfarer.api.campaign.StarSystemAPI;
016import com.fs.starfarer.api.impl.campaign.JumpPointInteractionDialogPluginImpl;
017import com.fs.starfarer.api.impl.campaign.enc.AbyssalRogueStellarObjectEPEC;
018import com.fs.starfarer.api.impl.campaign.ids.Conditions;
019import com.fs.starfarer.api.impl.campaign.ids.Entities;
020import com.fs.starfarer.api.impl.campaign.ids.Factions;
021import com.fs.starfarer.api.impl.campaign.ids.Planets;
022import com.fs.starfarer.api.impl.campaign.ids.Tags;
023import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
024import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator.StarSystemType;
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.shared.WormholeManager;
029import com.fs.starfarer.api.util.Misc;
030import com.fs.starfarer.api.util.Misc.CatalogEntryType;
031
032public class GateHaulerLocation {
033
034        public static Color ABYSS_AMBIENT_LIGHT_COLOR = new Color(100,100,100,255);
035        
036        public void generate(SectorAPI sector) {
037                StarSystemAPI system = sector.createStarSystem("Deep Space");
038                //system.setType(StarSystemType.NEBULA);
039                system.setName("Deep Space"); // to get rid of "Star System" at the end of the name
040                system.setType(StarSystemType.DEEP_SPACE);
041                system.addTag(Tags.THEME_HIDDEN);
042                system.addTag(Tags.THEME_SPECIAL);
043                LocationAPI hyper = Global.getSector().getHyperspace();
044                
045                
046                system.setBackgroundTextureFilename("graphics/backgrounds/background5.jpg");
047
048                Random random = StarSystemGenerator.random;
049                
050                float w = Global.getSettings().getFloat("sectorWidth");
051                float h = Global.getSettings().getFloat("sectorHeight");
052                float angle = 180f + random.nextFloat() * 90f;
053                float systemDist = 4000f + random.nextFloat() * 2000f;
054                Vector2f systemLoc = Misc.getUnitVectorAtDegreeAngle(angle);
055                systemLoc.scale(systemDist);
056                systemLoc.x -= 1000f;
057                
058                system.getLocation().set(-w/2f + systemLoc.x, -h/2f + systemLoc.y);
059//              system.getLocation().set(-w/2f + 4000f - 0f * random.nextFloat(),
060//                              -h/2f + 4000f - 0f * random.nextFloat());
061                
062                
063                SectorEntityToken center = system.initNonStarCenter();
064                
065                system.setLightColor(ABYSS_AMBIENT_LIGHT_COLOR); // light color in entire system, affects all entities
066                center.addTag(Tags.AMBIENT_LS);
067                
068                String name = Misc.genEntityCatalogId(3125, 6, 11, CatalogEntryType.GIANT);
069                
070                PlanetAPI giant = system.addPlanet("nameless_ice_giant", null, name, Planets.ICE_GIANT, 0, 450, 0, 0);
071
072                //rock.setCustomDescriptionId("???");
073                giant.getMemoryWithoutUpdate().set("$gateHaulerIceGiant", true);
074                
075                giant.getMarket().addCondition(Conditions.DENSE_ATMOSPHERE);
076                giant.getMarket().addCondition(Conditions.COLD);
077                giant.getMarket().addCondition(Conditions.DARK);
078                giant.getMarket().addCondition(Conditions.VOLATILES_TRACE);
079                giant.getMarket().addCondition(Conditions.HIGH_GRAVITY);
080                
081                giant.setOrbit(null);
082                giant.setLocation(0, 0);
083
084                //StarSystemGenerator.addStableLocations(system, 1);
085                EntityLocation loc = new EntityLocation();
086                float orbitRadius = 7000f;
087                float orbitDays = orbitRadius / (20f + 5f * StarSystemGenerator.random.nextFloat());
088                loc.orbit = Global.getFactory().createCircularOrbit(giant,
089                                StarSystemGenerator.random.nextFloat() * 360f, orbitRadius, orbitDays);
090                AddedEntity added = BaseThemeGenerator.addNonSalvageEntity(system, loc, Entities.STABLE_LOCATION, Factions.NEUTRAL);            
091                
092                
093                for (SectorEntityToken curr : system.getEntitiesWithTag(Tags.STABLE_LOCATION)) {
094                        SpecialItemData item = WormholeManager.createWormholeAnchor("charlie", "Charlie");
095                        JumpPointAPI wormhole = WormholeManager.get().addWormhole(item, curr, null);
096                        wormhole.getMemoryWithoutUpdate().unset(JumpPointInteractionDialogPluginImpl.UNSTABLE_KEY);
097                        break;
098                }
099                
100                
101                
102                orbitRadius = giant.getRadius() + 250f;
103                orbitDays = orbitRadius / (20f + random.nextFloat() * 5f);
104                float spin = 3f;
105                loc = new EntityLocation();
106                loc.orbit = Global.getFactory().createCircularOrbitWithSpin(giant, random.nextFloat() * 360f, 
107                                                                                                                                                orbitRadius, orbitDays, spin);
108                added = BaseThemeGenerator.addEntity(null, system, loc, Entities.DERELICT_GATEHAULER, Factions.NEUTRAL);
109                added.entity.getMemoryWithoutUpdate().set("$gateHauler", true);
110                
111//              CampaignFleetAPI visual = Global.getFactory().createEmptyFleet(Factions.NEUTRAL, added.entity.getName(), true);
112//              visual.getFleetData().addFleetMember("derelict_gatehauler_Hull");
113//              visual.setHidden(true);
114//              visual.setVelocity(300f, 0f);
115//              visual.setFacing(0f);
116//              visual.setMoveDestination(10000f, 0f);
117//              ((CustomCampaignEntityAPI)added.entity).setFleetForVisual(visual);
118                
119                
120                system.autogenerateHyperspaceJumpPoints(true, false);
121
122                
123                AbyssalRogueStellarObjectEPEC.setAbyssalDetectedRanges(system);
124        }
125        
126}
127
128
129
130
131
132
133
134
135
136
137
138
139