Beispiel #1
0
        public override IEnumerable <Gizmo> GetGizmos()
        {
            if (this.IsPlayerControlled)
            {
                Command_Action command_Action = new Command_Action();
                command_Action.defaultLabel = "CommandLaunchShip".Translate();
                command_Action.defaultDesc  = "CommandLaunchShipDesc".Translate();
                command_Action.icon         = DropShipUtility.LaunchSingleCommandTex;
                command_Action.action       = delegate
                {
                    SoundDef.Named("ShipTakeoff_SuborbitalLaunch").PlayOneShotOnCamera();
                    this.ships[0].StartChoosingDestination(this.ships[0], false);
                };
                yield return(command_Action);

                if (Find.WorldSelector.SingleSelectedObject == this)
                {
                    yield return(TravelingShipsUtility.ShipTouchdownCommand(this, true));

                    yield return(TravelingShipsUtility.ShipTouchdownCommand(this, false));
                }
                FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(this);
                if (factionBase != null && factionBase.CanTradeNow)
                {
                    yield return(TravelingShipsUtility.TradeCommand(this));
                }
                if (CaravanJourneyDestinationUtility.AnyJurneyDestinationAt(base.Tile))
                {
                    yield return(CaravanJourneyDestinationUtility.TakeOffCommand(base.Tile));
                }
            }
        }
 public static void FactionBasePostLoadInit(FactionBase factionBase)
 {
     if (factionBase.trader == null)
     {
         factionBase.trader = new FactionBase_TraderTracker(factionBase);
     }
 }
Beispiel #3
0
        public static Command TradeCommand(LandedShip caravan)
        {
            Pawn           bestNegotiator = CaravanVisitUtility.BestNegotiator(caravan);
            Command_Action command_Action = new Command_Action();

            command_Action.defaultLabel = "CommandTrade".Translate();
            command_Action.defaultDesc  = "CommandTradeDesc".Translate();
            command_Action.icon         = DropShipUtility.TradeCommandTex;
            command_Action.action       = delegate
            {
                FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(caravan);
                if (factionBase != null && factionBase.CanTradeNow)
                {
                    caravan.UnloadCargoForTrading();
                    Find.WindowStack.Add(new Dialog_TradeFromShips(caravan, bestNegotiator, factionBase));
                    string empty  = string.Empty;
                    string empty2 = string.Empty;
                    PawnRelationUtility.Notify_PawnsSeenByPlayer(factionBase.Goods.OfType <Pawn>(), ref empty, ref empty2, "LetterRelatedPawnsTradingWithFactionBase".Translate(), false);
                    if (!empty2.NullOrEmpty())
                    {
                        Find.LetterStack.ReceiveLetter(empty, empty2, LetterType.Good, factionBase, null);
                    }
                }
            };
            if (bestNegotiator == null)
            {
                command_Action.Disable("CommandTradeFailNoNegotiator".Translate());
            }
            return(command_Action);
        }
Beispiel #4
0
        public static Faction NewGeneratedFaction(FactionDef facDef)
        {
            Faction faction = new Faction();

            faction.def               = facDef;
            faction.loadID            = Find.UniqueIDsManager.GetNextFactionID();
            faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction);
            if (!facDef.isPlayer)
            {
                if (facDef.fixedName != null)
                {
                    faction.Name = facDef.fixedName;
                }
                else
                {
                    faction.Name = NameGenerator.GenerateName(facDef.factionNameMaker, from fac in Find.FactionManager.AllFactionsVisible
                                                              select fac.Name, false, null);
                }
            }
            faction.centralMelanin = Rand.Value;
            foreach (Faction item in Find.FactionManager.AllFactionsListForReading)
            {
                faction.TryMakeInitialRelationsWith(item);
            }
            if (!facDef.hidden && !facDef.isPlayer)
            {
                FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase);
                factionBase.SetFaction(faction);
                factionBase.Tile = TileFinder.RandomFactionBaseTileFor(faction, false, null);
                factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase);
                Find.WorldObjects.Add(factionBase);
            }
            faction.GenerateNewLeader();
            return(faction);
        }
Beispiel #5
0
 public void FactionTick()
 {
     if (Find.TickManager.TicksGame % 1001 == 0 && this != Faction.OfPlayer)
     {
         if (this.PlayerGoodwill < this.def.naturalColonyGoodwill.min)
         {
             this.AffectGoodwillWith(Faction.OfPlayer, (float)(this.def.goodwillDailyGain * 0.0));
         }
         else if (this.PlayerGoodwill > this.def.naturalColonyGoodwill.max)
         {
             this.AffectGoodwillWith(Faction.OfPlayer, (float)((0.0 - this.def.goodwillDailyFall) * 0.0));
         }
     }
     this.kidnapped.KidnappedPawnsTrackerTick();
     for (int num = this.predatorThreats.Count - 1; num >= 0; num--)
     {
         PredatorThreat predatorThreat = this.predatorThreats[num];
         if (predatorThreat.Expired)
         {
             this.predatorThreats.RemoveAt(num);
             if (predatorThreat.predator.Spawned)
             {
                 predatorThreat.predator.Map.attackTargetsCache.UpdateTarget(predatorThreat.predator);
             }
         }
     }
     if (Find.TickManager.TicksGame % 1000 == 200 && this.IsPlayer)
     {
         if (NamePlayerFactionAndBaseUtility.CanNameFactionNow())
         {
             FactionBase factionBase = Find.WorldObjects.FactionBases.Find(NamePlayerFactionAndBaseUtility.CanNameFactionBaseSoon);
             if (factionBase != null)
             {
                 Find.WindowStack.Add(new Dialog_NamePlayerFactionAndBase(factionBase));
             }
             else
             {
                 Find.WindowStack.Add(new Dialog_NamePlayerFaction());
             }
         }
         else
         {
             FactionBase factionBase2 = Find.WorldObjects.FactionBases.Find(NamePlayerFactionAndBaseUtility.CanNameFactionBaseNow);
             if (factionBase2 != null)
             {
                 if (NamePlayerFactionAndBaseUtility.CanNameFactionSoon())
                 {
                     Find.WindowStack.Add(new Dialog_NamePlayerFactionAndBase(factionBase2));
                 }
                 else
                 {
                     Find.WindowStack.Add(new Dialog_NamePlayerFactionBase(factionBase2));
                 }
             }
         }
     }
 }
Beispiel #6
0
        public override void PreMapGenerate()
        {
            FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase);

            factionBase.SetFaction(Find.GameInitData.playerFaction);
            factionBase.Tile = Find.GameInitData.startingTile;
            factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase);
            Find.WorldObjects.Add(factionBase);
        }
Beispiel #7
0
        public override void Tick()
        {
            base.Tick();
            FactionBase colony = Find.WorldObjects.ObjectsAt(worldTileElectedOn).OfType <FactionBase>().FirstOrDefault();

            if (this.pawn.Dead || !PsychologyBase.ActivateElections() || colony == null || colony.Map.lordManager.lords.Find(l => l.LordJob is LordJob_Joinable_Election) != null)
            {
                this.pawn.health.RemoveHediff(this);
            }
        }
Beispiel #8
0
        public override bool TryExecute(IncidentParms parms)
        {
            Map           map         = (Map)parms.target;
            FactionBase   factionBase = Find.WorldObjects.ObjectsAt(map.Tile).OfType <FactionBase>().First();
            int           duration    = Mathf.RoundToInt(this.def.durationDays.RandomInRange * GenDate.TicksPerDay);
            GameCondition cond        = GameConditionMaker.MakeCondition(this.def.gameCondition, duration, 0);

            map.gameConditionManager.RegisterCondition(cond);
            Find.LetterStack.ReceiveLetter("LetterLabelNewElection".Translate(factionBase.Label), "LetterNewElection".Translate(factionBase.Label), LetterDefOf.Good, new TargetInfo(map.Center, map, false), null);
            return(true);
        }
Beispiel #9
0
        public static void TeachingComplete(Pawn teacher, Building_TeachingSpot spot)
        {
            spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.finishing);

            spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.finished);
            //altar.currentState = Building_SacrificialAltar.State.finished;

            FactionBase factionBase = (FactionBase)spot.Map.info.parent;

            Messages.Message("The lesson has finished.", TargetInfo.Invalid, MessageSound.Benefit);
        }
 public Dialog_NamePlayerFactionBase(FactionBase factionBase)
 {
     this.factionBase = factionBase;
     if (factionBase.HasMap && factionBase.Map.mapPawns.FreeColonistsSpawnedCount != 0)
     {
         this.suggestingPawn = factionBase.Map.mapPawns.FreeColonistsSpawned.RandomElement <Pawn>();
     }
     this.curName               = NameGenerator.GenerateName(Faction.OfPlayer.def.baseNameMakerPlayer, null, false, null);
     this.nameMessageKey        = "NamePlayerFactionBaseMessage";
     this.gainedNameMessageKey  = "PlayerFactionBaseGainsName";
     this.invalidNameMessageKey = "PlayerFactionBaseNameIsInvalid";
 }
Beispiel #11
0
 public Dialog_NamePlayerFactionAndBase(FactionBase factionBase)
 {
     this.factionBase = factionBase;
     if (factionBase.HasMap && factionBase.Map.mapPawns.FreeColonistsSpawnedCount != 0)
     {
         base.suggestingPawn = factionBase.Map.mapPawns.FreeColonistsSpawned.RandomElement();
     }
     base.curName                     = NameGenerator.GenerateName(Faction.OfPlayer.def.factionNameMakerPlayer, (Predicate <string>)null, false, (string)null);
     base.nameMessageKey              = "NamePlayerFactionMessage";
     base.invalidNameMessageKey       = "PlayerFactionNameIsInvalid";
     base.useSecondName               = true;
     base.curSecondName               = NameGenerator.GenerateName(Faction.OfPlayer.def.baseNameMakerPlayer, (Predicate <string>)null, false, (string)null);
     base.secondNameMessageKey        = "NamePlayerFactionBaseMessage_NameFactionContinuation";
     base.invalidSecondNameMessageKey = "PlayerFactionBaseNameIsInvalid";
     base.gainedNameMessageKey        = "PlayerFactionAndBaseGainsName";
 }
Beispiel #12
0
        internal void FindClosestHackableAlliedBase()
        {
            this.alliedBase = null;
            float minTileDistance = 10000;

            foreach (FactionBase factionBase in Find.WorldObjects.FactionBases.Where(x => !x.Faction.HostileTo(Faction.OfPlayer) &&
                                                                                     x.Faction.def.techLevel >= TechLevel.Industrial && x.Faction != Faction.OfPlayer))
            {
                float distance = Find.WorldGrid.TraversalDistanceBetween(this.rootMap.Tile, factionBase.Tile);
                if (distance < minTileDistance)
                {
                    this.alliedBase = factionBase;
                    minTileDistance = distance;
                }
            }
        }
Beispiel #13
0
        public override string GetInspectString()
        {
            StringBuilder stringBuilder = new StringBuilder();

            if (this.Resting)
            {
                stringBuilder.Append("CaravanResting".Translate());
            }
            else if (this.AllOwnersDowned)
            {
                stringBuilder.Append("AllCaravanMembersDowned".Translate());
            }
            else if (this.pather.Moving)
            {
                if (this.pather.arrivalAction != null)
                {
                    stringBuilder.Append(this.pather.arrivalAction.ReportString);
                }
                else
                {
                    stringBuilder.Append("CaravanTraveling".Translate());
                }
            }
            else
            {
                FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(this);
                if (factionBase != null)
                {
                    stringBuilder.Append("CaravanVisiting".Translate(new object[]
                    {
                        factionBase.Label
                    }));
                }
                else
                {
                    stringBuilder.Append("CaravanWaiting".Translate());
                }
            }

            return(stringBuilder.ToString());
        }
Beispiel #14
0
        public static void GenerateFactionsIntoWorld()
        {
            int i = 0;

            foreach (FactionDef current in DefDatabase <FactionDef> .AllDefs)
            {
                for (int j = 0; j < current.requiredCountAtGameStart; j++)
                {
                    Faction faction = FactionGenerator.NewGeneratedFaction(current);
                    Find.FactionManager.Add(faction);
                    if (!current.hidden)
                    {
                        i++;
                    }
                }
            }
            while (i < 5)
            {
                FactionDef facDef = (from fa in DefDatabase <FactionDef> .AllDefs
                                     where fa.canMakeRandomly && Find.FactionManager.AllFactions.Count((Faction f) => f.def == fa) < fa.maxCountAtGameStart
                                     select fa).RandomElement <FactionDef>();
                Faction faction2 = FactionGenerator.NewGeneratedFaction(facDef);
                Find.World.factionManager.Add(faction2);
                i++;
            }
            int num = GenMath.RoundRandom((float)Find.WorldGrid.TilesCount / 100000f * FactionGenerator.FactionBasesPer100kTiles.RandomInRange);

            num -= Find.WorldObjects.FactionBases.Count;
            for (int k = 0; k < num; k++)
            {
                Faction faction3 = (from x in Find.World.factionManager.AllFactionsListForReading
                                    where !x.def.isPlayer && !x.def.hidden
                                    select x).RandomElementByWeight((Faction x) => x.def.baseSelectionWeight);
                FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase);
                factionBase.SetFaction(faction3);
                factionBase.Tile = TileFinder.RandomFactionBaseTileFor(faction3, false, null);
                factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase);
                Find.WorldObjects.Add(factionBase);
            }
        }
Beispiel #15
0
        public void StartLesson(bool forced = false, String skills = "")
        {
            teacher = tempTeacher;


            if (this.Destroyed || !this.Spawned)
            {
                TeachingUtility.AbortLesson(null, "The spot is unavailable.");
                return;
            }
            if (!TeachingUtility.IsActorAvailable(this.teacher))
            {
                TeachingUtility.AbortLesson(this, "TeacherUnavailableNamed".Translate(new object[] { this.teacher.LabelShort }));
                this.teacher = null;
                return;
            }

            FactionBase factionBase = (FactionBase)this.Map.info.parent;

            Messages.Message("LessonGathering".Translate(new object[] { factionBase.Label, teacher.LabelShort }) + skills, TargetInfo.Invalid, MessageSound.Standard);
            ChangeState(State.lesson, LessonState.started);
            //this.currentState = State.started;
            Job job = new Job(DefDatabase <JobDef> .GetNamed("TeachLesson"), this);

            teacher.jobs.jobQueue.EnqueueLast(job);
            teacher.jobs.EndCurrentJob(JobCondition.InterruptForced);
            TeachingUtility.GetLessonGroup(this, Map, forced);
            lastLessonTick = Find.TickManager.TicksGame;
            //  HediffLeader hediff = TeachingUtility.leaderH(teacher);
            //  if (hediff != null) hediff.lastLessonTick = Find.TickManager.TicksGame;
            GameComponent_ColonyLeadership comp = Utility.getCLComp();

            if (comp != null)
            {
                comp.lastLessonTick = Find.TickManager.TicksGame;
            }
        }
 private static bool CanNameFactionBase(FactionBase factionBase, int ticksPassed)
 {
     return(factionBase.Faction == Faction.OfPlayer && !factionBase.namedByPlayer && (float)ticksPassed / 60000.0 >= 3.0 && factionBase.HasMap && factionBase.Map.dangerWatcher.DangerRating != StoryDanger.High && factionBase.Map.mapPawns.FreeColonistsSpawnedCount != 0 && NamePlayerFactionAndBaseUtility.CanNameAnythingNow());
 }
 public static bool CanNameFactionBaseSoon(FactionBase factionBase)
 {
     return(NamePlayerFactionAndBaseUtility.CanNameFactionBase(factionBase, Find.TickManager.TicksGame - factionBase.creationGameTicks + 30000));
 }
Beispiel #18
0
        public override string GetInspectString()
        {
            StringBuilder stringBuilder = new StringBuilder();

            if (this.Resting)
            {
                stringBuilder.Append("CaravanResting".Translate());
            }
            else if (this.AnyPawnHasExtremeMentalBreak)
            {
                stringBuilder.Append("CaravanMemberMentalBreak".Translate(new object[]
                {
                    this.FirstPawnWithExtremeMentalBreak.LabelShort
                }));
            }
            else if (this.AllOwnersDowned)
            {
                stringBuilder.Append("AllCaravanMembersDowned".Translate());
            }
            else if (this.pather.Moving)
            {
                if (this.pather.arrivalAction != null)
                {
                    stringBuilder.Append(this.pather.arrivalAction.ReportString);
                }
                else
                {
                    stringBuilder.Append("CaravanTraveling".Translate());
                }
            }
            else
            {
                FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(this);
                if (factionBase != null)
                {
                    stringBuilder.Append("CaravanVisiting".Translate(new object[]
                    {
                        factionBase.Label
                    }));
                }
                else
                {
                    stringBuilder.Append("CaravanWaiting".Translate());
                }
            }
            if (this.pather.Moving)
            {
                stringBuilder.AppendLine();
                stringBuilder.Append("CaravanEstimatedTimeToDestination".Translate(new object[]
                {
                    CaravanArrivalTimeEstimator.EstimatedTicksToArrive(this, true).ToStringTicksToPeriod(true)
                }));
            }
            if (this.ImmobilizedByMass)
            {
                stringBuilder.AppendLine();
                stringBuilder.Append("CaravanImmobilizedByMass".Translate());
            }
            string text;

            if (CaravanPawnsNeedsUtility.AnyPawnOutOfFood(this, out text))
            {
                stringBuilder.AppendLine();
                stringBuilder.Append("CaravanOutOfFood".Translate());
                if (!text.NullOrEmpty())
                {
                    stringBuilder.Append(" ");
                    stringBuilder.Append(text);
                    stringBuilder.Append(".");
                }
            }
            else
            {
                stringBuilder.AppendLine();
                stringBuilder.Append("CaravanDaysOfFood".Translate(new object[]
                {
                    this.DaysWorthOfFood.ToString("0.#")
                }));
            }
            stringBuilder.AppendLine();
            stringBuilder.AppendLine(string.Concat(new string[]
            {
                "CaravanBaseMovementTime".Translate(),
                ": ",
                ((float)this.TicksPerMove / 2500f).ToString("0.##"),
                " ",
                "CaravanHoursPerTile".Translate()
            }));

            double actualTicksPerMove = ((double)this.TicksPerMove / 2500f) * (2500f + WorldPathGrid.CalculatedCostAt(base.Tile, false, -1f));

            stringBuilder.Append("CurrentTileMovementTime".Translate() + ": " + ((int)actualTicksPerMove).ToStringTicksToPeriod(true));
            return(stringBuilder.ToString());
        }
 public static void Named(FactionBase factionBase, string s)
 {
     factionBase.Name          = s;
     factionBase.namedByPlayer = true;
 }
Beispiel #20
0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            int tile;

            if (this.parentLandedShip != null)
            {
                tile = this.parentLandedShip.Tile;
            }
            else
            {
                tile = this.Map.Tile;
            }
            bool canBomb = true;

            if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageSound.RejectInput);
                return(false);
            }
            if (this.LaunchAsFleet)
            {
                List <int> distances = new List <int>();
                for (int i = 0; i < DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Count; i++)
                {
                    ShipBase ship = DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID)[i];
                    if (ship.compShip.cargoLoadingActive)
                    {
                        Messages.Message("MessageFleetLaunchImpossible".Translate(), MessageSound.RejectInput);
                        return(false);
                    }
                    int num = (Find.WorldGrid.TraversalDistanceBetween(tile, target.Tile));
                    if (num > ship.MaxLaunchDistance(true))
                    {
                        Messages.Message("MessageFleetLaunchImpossible".Translate(), MessageSound.RejectInput);
                        return(false);
                    }
                    if (!(2 * num > ship.MaxLaunchDistance(true)))
                    {
                        canBomb = false;
                    }
                }
            }
            else
            {
                int num = Find.WorldGrid.TraversalDistanceBetween(tile, target.Tile);

                if (num > this.MaxLaunchDistance(this.LaunchAsFleet))
                {
                    Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate(new object[]
                    {
                        CompLaunchable.FuelNeededToLaunchAtDist((float)num).ToString("0.#")
                    }), MessageSound.RejectInput);
                    return(false);
                }
                if (!(2 * num > this.MaxLaunchDistance(true)))
                {
                    canBomb = false;
                }
            }

            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map myMap = this.Map;
                Map map   = mapParent.Map;
                Current.Game.VisibleMap = map;
                Targeter targeter           = Find.Targeter;
                Action   actionWhenFinished = delegate
                {
                    if (Find.Maps.Contains(myMap))
                    {
                        Current.Game.VisibleMap = myMap;
                    }
                };
                targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x)
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(x.ToGlobalTargetInfo(map), PawnsArriveMode.Undecided, TravelingShipArrivalAction.EnterMapFriendly);
                }, null, actionWhenFinished, DropShipUtility.TargeterShipAttachment);
                return(true);
            }

            if (target.WorldObject is FactionBase && target.WorldObject.Faction != Faction.OfPlayer)
            {
                FactionBase factionBase = target.WorldObject as FactionBase;
                Find.WorldTargeter.closeWorldTabWhenFinished = false;
                List <FloatMenuOption> list = new List <FloatMenuOption>();
                if (!target.WorldObject.Faction.HostileTo(Faction.OfPlayer))
                {
                    list.Add(new FloatMenuOption("VisitFactionBase".Translate(new object[]
                    {
                        target.WorldObject.Label
                    }), delegate
                    {
                        if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                        {
                            return;
                        }
                        this.TryLaunch(target, PawnsArriveMode.Undecided, TravelingShipArrivalAction.StayOnWorldMap);
                        JumpToTargetUtility.CloseWorldTab();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                list.Add(new FloatMenuOption("DropAtEdge".Translate(), delegate
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArriveMode.EdgeDrop, TravelingShipArrivalAction.EnterMapFriendly);
                    JumpToTargetUtility.CloseWorldTab();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
                list.Add(new FloatMenuOption("DropInCenter".Translate(), delegate
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.EnterMapFriendly);
                    JumpToTargetUtility.CloseWorldTab();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));

                list.Add(new FloatMenuOption("AttackFactionBaseAerial".Translate(), delegate
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.EnterMapAssault);
                    JumpToTargetUtility.CloseWorldTab();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));


                if (canBomb && (DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(x => x.installedTurrets.Any(y => y.Key.slotType == WeaponSystemType.Bombing && y.Value != null))) || this.loadedBombs.Any())
                {
                    list.Add(new FloatMenuOption("BombFactionBase".Translate(), delegate
                    {
                        if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                        {
                            return;
                        }
                        this.performBombingRun = true;
                        this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.BombingRun);
                        JumpToTargetUtility.CloseWorldTab();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }


                Find.WindowStack.Add(new FloatMenu(list));
                return(true);
            }
            if (Find.World.Impassable(target.Tile))
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageSound.RejectInput);
                return(false);
            }

            this.TryLaunch(target, PawnsArriveMode.Undecided, TravelingShipArrivalAction.StayOnWorldMap);
            return(true);
        }
Beispiel #21
0
        private void Arrived()
        {
            if (this.arrived)
            {
                return;
            }

            this.arrived = true;
            if (TravelingShipsUtility.TryAddToLandedFleet(this, this.destinationTile))
            {
                return;
            }
            if (this.arrivalAction == TravelingShipArrivalAction.BombingRun)
            {
                MapParent parent = Find.World.worldObjects.MapParentAt(this.destinationTile);
                if (parent != null)
                {
                    Messages.Message("MessageBombedSettlement".Translate(new object[] { parent.ToString(), parent.Faction.Name }), parent, MessageTypeDefOf.NeutralEvent);
                    Find.World.worldObjects.Remove(parent);
                }
                this.SwitchOriginToDest();

                //TravelingShips travelingShips = (TravelingShips)WorldObjectMaker.MakeWorldObject(ShipNamespaceDefOfs.TravelingSuborbitalShip);
                //travelingShips.ships.AddRange(this.ships);
                //travelingShips.Tile = this.destinationTile;
                //travelingShips.SetFaction(Faction.OfPlayer);
                //travelingShips.destinationTile = this.initialTile;
                //travelingShips.destinationCell = this.launchCell;
                //travelingShips.arriveMode = this.arriveMode;
                //travelingShips.arrivalAction = TravelingShipArrivalAction.EnterMapFriendly;
                //Find.WorldObjects.Add(travelingShips);
                //Find.WorldObjects.Remove(this);
            }
            else
            {
                Map map = Current.Game.FindMap(this.destinationTile);
                if (map != null)
                {
                    this.SpawnShipsInMap(map, null);
                }
                else if (!this.LandedShipHasCaravanOwner)
                {
                    for (int i = 0; i < this.ships.Count; i++)
                    {
                        this.ships[i].GetDirectlyHeldThings().ClearAndDestroyContentsOrPassToWorld(DestroyMode.Vanish);
                    }
                    this.RemoveAllPods();
                    Find.WorldObjects.Remove(this);
                    Messages.Message("MessageTransportPodsArrivedAndLost".Translate(), new GlobalTargetInfo(this.destinationTile), MessageTypeDefOf.NegativeEvent);
                }
                else
                {
                    FactionBase factionBase = Find.WorldObjects.FactionBases.Find((FactionBase x) => x.Tile == this.destinationTile);
                    
                    if (factionBase != null && factionBase.Faction != Faction.OfPlayer && this.arrivalAction != TravelingShipArrivalAction.StayOnWorldMap)
                    {
                        LongEventHandler.QueueLongEvent(delegate
                        {
                            Map map2 = GetOrGenerateMapUtility.GetOrGenerateMap(factionBase.Tile, Find.World.info.initialMapSize, null); ;
                            
                            string extraMessagePart = null;
                            if (this.arrivalAction == TravelingShipArrivalAction.EnterMapAssault && !factionBase.Faction.HostileTo(Faction.OfPlayer))
                            {
                                factionBase.Faction.SetHostileTo(Faction.OfPlayer, true);
                                extraMessagePart = "MessageTransportPodsArrived_BecameHostile".Translate(new object[]
                                {
                                factionBase.Faction.Name
                                }).CapitalizeFirst();
                            }
                            Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
                            Current.Game.VisibleMap = map2;
                            Find.CameraDriver.JumpToVisibleMapLoc(map2.Center);
                            this.SpawnShipsInMap(map2, extraMessagePart);
                        }, "GeneratingMapForNewEncounter", false, null);
                    }
                    else
                    {
                        this.SpawnCaravanAtDestinationTile();
                    }
                }
            }
        }
Beispiel #22
0
        public void InitNewGame()
        {
            string str = GenText.ToCommaList(from mod in LoadedModManager.RunningMods
                                             select mod.ToString(), true);

            Log.Message("Initializing new game with mods " + str);
            if (this.maps.Any <Map>())
            {
                Log.Error("Called InitNewGame() but there already is a map. There should be 0 maps...");
                return;
            }
            if (this.initData == null)
            {
                Log.Error("Called InitNewGame() but init data is null. Create it first.");
                return;
            }
            MemoryUtility.UnloadUnusedUnityAssets();
            DeepProfiler.Start("InitNewGame");
            try
            {
                Current.ProgramState = ProgramState.MapInitializing;
                IntVec3            intVec       = new IntVec3(this.initData.mapSize, 1, this.initData.mapSize);
                FactionBase        factionBase  = null;
                List <FactionBase> factionBases = Find.WorldObjects.FactionBases;
                for (int i = 0; i < factionBases.Count; i++)
                {
                    if (factionBases[i].Faction == Faction.OfPlayer)
                    {
                        factionBase = factionBases[i];
                        break;
                    }
                }
                if (factionBase == null)
                {
                    Log.Error("Could not generate starting map because there is no any player faction base.");
                }
                this.tickManager.gameStartAbsTick = GenTicks.ConfiguredTicksAbsAtGameStart;
                Map visibleMap = MapGenerator.GenerateMap(intVec, factionBase, factionBase.MapGeneratorDef, factionBase.ExtraGenStepDefs, null);
                this.worldInt.info.initialMapSize = intVec;
                if (this.initData.permadeath)
                {
                    this.info.permadeathMode           = true;
                    this.info.permadeathModeUniqueName = PermadeathModeUtility.GeneratePermadeathSaveName();
                }
                PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism);
                this.FinalizeInit();
                Current.Game.VisibleMap = visibleMap;
                Find.CameraDriver.JumpToVisibleMapLoc(MapGenerator.PlayerStartSpot);
                Find.CameraDriver.ResetSize();
                if (Prefs.PauseOnLoad && this.initData.startedFromEntry)
                {
                    LongEventHandler.ExecuteWhenFinished(delegate
                    {
                        this.tickManager.DoSingleTick();
                        this.tickManager.CurTimeSpeed = TimeSpeed.Paused;
                    });
                }
                Find.Scenario.PostGameStart();
                if (Faction.OfPlayer.def.startingResearchTags != null)
                {
                    foreach (string current in Faction.OfPlayer.def.startingResearchTags)
                    {
                        foreach (ResearchProjectDef current2 in DefDatabase <ResearchProjectDef> .AllDefs)
                        {
                            if (current2.HasTag(current))
                            {
                                this.researchManager.InstantFinish(current2, false);
                            }
                        }
                    }
                }
                GameComponentUtility.StartedNewGame();
                this.initData = null;
            }
            finally
            {
                DeepProfiler.End();
            }
        }