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); }
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); }