示例#1
0
 public void TryLaunch(RimWorld.Planet.GlobalTargetInfo target, PawnsArriveMode arriveMode, TravelingShipArrivalAction arrivalAction, bool launchedAsSingleShip = false)
 {
     this.timeToLiftoff = 0;
     if (this.parentLandedShip == null)
     {
         this.shipState = ShipState.Outgoing;
         ShipBase_Traveling travelingShip = new ShipBase_Traveling(this, target, arriveMode, arrivalAction);
         GenSpawn.Spawn(travelingShip, this.Position, this.Map);
         this.DeSpawn();
         if (this.LaunchAsFleet)
         {
             foreach (ShipBase current in DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID))
             {
                 if (current != this)
                 {
                     current.shipState = ShipState.Outgoing;
                     ShipBase_Traveling travelingShip2 = new ShipBase_Traveling(current, target, arriveMode, arrivalAction);
                     GenSpawn.Spawn(travelingShip2, current.Position, current.Map);
                     current.DeSpawn();
                 }
             }
         }
     }
     else
     {
         //      Find.WorldSelector.Select(parentLandedShip);
         TravelingShipsUtility.LaunchLandedFleet(this.parentLandedShip, target.Tile, target.Cell, arriveMode, arrivalAction);
         this.landedShipCached = null;
         //Find.MainTabsRoot.SetCurrentTab(MainButtonDefOf.World, false);
     }
 }
 public ShipBase_Traveling(ShipBase ship, RimWorld.Planet.GlobalTargetInfo target, PawnsArrivalModeDef arriveMode, ShipArrivalAction arrivalAction = ShipArrivalAction.StayOnWorldMap, bool leavingForTarget = true)
 {
     this.containingShip   = ship;
     this.def              = ship.compShip.sProps.LeavingShipDef;
     this.def.size         = ship.def.size;
     this.def.graphicData  = ship.def.graphicData;
     this.destinationTile  = target.Tile;
     this.destinationCell  = target.Cell;
     this.pawnArriveMode   = arriveMode;
     this.leavingForTarget = leavingForTarget;
     this.Rotation         = ship.Rotation;
     this.arrivalAction    = arrivalAction;
 }
        /*
         * Stray Cat
         *
         * A single cat wanders onto the colony's border.
         *
         */
        public void StrayCat(IncidentParms parms, out string flavorDesc, out GlobalTargetInfo target)
        {
            //Log.Message("Stray Cat");
            //Stray cat
            IntVec3 loc;

            RCellFinder.TryFindRandomPawnEntryCell(out loc, (Map)parms.target, CellFinder.EdgeRoadChance_Animal, null);
            Pawn  newThing = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CatKind_Black, null);
            Thing cat      = GenSpawn.Spawn(newThing, loc, (Map)parms.target);

            flavorDesc = "ROM_OmenCatDesc3".Translate();
            target     = new RimWorld.Planet.GlobalTargetInfo(cat);
        }
        /*
         * Affectionate Cat
         *
         * A single cat joins the colony.
         *
         */
        public void AffectionateCat(IncidentParms parms, out string flavorDesc, out GlobalTargetInfo target)
        {
            //Log.Message("Affectionate Cat");
            //Affectionate cat
            IntVec3 loc;

            RCellFinder.TryFindRandomPawnEntryCell(out loc, (Map)parms.target, CellFinder.EdgeRoadChance_Animal, null);
            Pawn  newThing = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CatKind_Black, null);
            Thing cat      = GenSpawn.Spawn(newThing, loc, (Map)parms.target);

            InteractionWorker_RecruitAttempt.DoRecruit(cat.Map.mapPawns.FreeColonists.FirstOrDefault <Pawn>(), (Pawn)cat, 1f, true);
            flavorDesc = "ROM_OmenCatDesc4".Translate();
            target     = new RimWorld.Planet.GlobalTargetInfo(cat);
        }
示例#5
0
 public void TryLaunch(RimWorld.Planet.GlobalTargetInfo target, PawnsArrivalModeDef arriveMode, ShipArrivalAction arrivalAction, bool launchedAsSingleShip = false)
 {
     this.timeToLiftoff = 0;
     if (this.parentWorldShip == null)
     {
         this.shipState = ShipState.Outgoing;
         ShipBase_Traveling travelingShip = new ShipBase_Traveling(this, target, arriveMode, arrivalAction);
         Map     curMap = this.Map;
         IntVec3 curPos = this.Position;
         this.DeSpawn();
         GenSpawn.Spawn(travelingShip, curPos, curMap, this.Rotation, WipeMode.Vanish);
         if (this.LaunchAsFleet)
         {
             foreach (ShipBase current in DropShipUtility.CurrentShipTracker.ShipsInFleet(this.fleetID))
             {
                 if (current != this && current.Spawned)
                 {
                     current.shipState = ShipState.Outgoing;
                     ShipBase_Traveling travelingShip2 = new ShipBase_Traveling(current, target, arriveMode, arrivalAction);
                     Map     shipMap = current.Map;
                     IntVec3 shipPos = current.Position;
                     current.DeSpawn();
                     GenSpawn.Spawn(travelingShip2, shipPos, shipMap, current.Rotation, WipeMode.Vanish);
                 }
             }
         }
     }
     else
     {
         //      Find.WorldSelector.Select(parentLandedShip);
         //WorldShipUtility.LaunchLandedFleet(this.parentWorldShip, target.Tile, target.Cell, arriveMode, arrivalAction);
         this.parentWorldShip.Launch(target.Tile, target.Cell, arrivalAction, arriveMode);
         //this.parentShipCached = null;
         //Find.MainTabsRoot.SetCurrentTab(MainButtonDefOf.World, false);
     }
 }
 protected override bool TryExecuteWorker(IncidentParms parms)
 {
     string flavorDesc = "";
     Thing crow = null;
     float rand = Rand.Value;
     GlobalTargetInfo target = new GlobalTargetInfo();
     if (rand < 0.25f)
     {
         /*
          * Dead Crow
          *
          * One dead crow appears.
          * 
          */
         //Log.Message("Dead Crow");
         IntVec3 loc;
         RCellFinder.TryFindRandomPawnEntryCell(out loc, (Map)parms.target, CellFinder.EdgeRoadChance_Animal, null);
         Pawn newThing = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CrowKind, null);
         crow = GenSpawn.Spawn(newThing, loc, (Map)parms.target);
         ((Pawn)crow).Kill(null);
         flavorDesc = "ROM_OmenCatDesc1".Translate();
         target = new GlobalTargetInfo(loc, (Map)parms.target);
     }
     else if (rand < 0.5f)
     {
         /*
          * Murder of Crows
          *
          * A group of crows appears outside your colony.
          * One crow is dead in the center.
          * 
          */
         //Log.Message("Murder of Crows");
         IntVec3 loc;
         RCellFinder.TryFindRandomPawnEntryCell(out loc, (Map)parms.target, CellFinder.EdgeRoadChance_Animal, null);
         var newThing = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CrowKind, null);
         crow = GenSpawn.Spawn(newThing, loc, (Map)parms.target);
         List<Thing> crows = new List<Thing>();
         for (int i = 0; i < 2; i++)
         {
             Pawn newCrow = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CrowKind, null);
             crows.Add(GenSpawn.Spawn(newCrow, loc, (Map)parms.target));
         }
         crows.Add(crow);
         crow.Kill(null);
         flavorDesc = "ROM_OmenCrowDesc1".Translate();
         target = new RimWorld.Planet.GlobalTargetInfo(crows.FirstOrDefault(x => x is Pawn y && !y.Dead));
     }
     else if (rand < 0.75f)
     {
         /*
          * Flock of Crows
          *
          * A group of crows spawn outside the colony.
          * 
          */
         //Log.Message("Flock of Crows");
         IntVec3 loc;
         RCellFinder.TryFindRandomPawnEntryCell(out loc, (Map)parms.target, CellFinder.EdgeRoadChance_Animal, null);
         Pawn newThing = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CrowKind, null);
         crow = GenSpawn.Spawn(newThing, loc, (Map)parms.target);
         List<Thing> crows = new List<Thing>();
         for (int i = 0; i < 2; i++)
         {
             Pawn newCrow = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CrowKind, null);
             crows.Add(GenSpawn.Spawn(newCrow, loc, (Map)parms.target));
         }
         crows.Add(crow);
         flavorDesc = "ROM_OmenCrowDesc2".Translate();
         target = new RimWorld.Planet.GlobalTargetInfo(crow);
     }
     else
     {
         /*
          * Solitary Crow
          *
          * A single crow watches the colony.
          *
          */
         //Log.Message("Solitary Crow");
         IntVec3 loc;
         RCellFinder.TryFindRandomPawnEntryCell(out loc, (Map)parms.target, CellFinder.EdgeRoadChance_Animal, null);
         Pawn newThing = PawnGenerator.GeneratePawn(HPLDefOf.HPLovecraft_CrowKind, null);
         crow = GenSpawn.Spawn(newThing, loc, (Map)parms.target);
         flavorDesc = "ROM_OmenCrowDesc3".Translate();
         target = new RimWorld.Planet.GlobalTargetInfo(crow);
     }
     Find.LetterStack.ReceiveLetter(def.label.CapitalizeFirst(), flavorDesc, DefDatabase<LetterDef>.GetNamed("ROM_Omen"), target);
     return true;
 }
 private static void SendGiftNotAppreciatedMessage(Faction giveTo, GlobalTargetInfo lookTarget)
 {
     Messages.Message("MessageGiftGivenButNotAppreciated".Translate(giveTo.Name), lookTarget, MessageTypeDefOf.NegativeEvent);
 }