public static void MakeShipWreckCrashingAt(IntVec3 dropCenter, List<List<Thing>> thingsGroups, int openDelay = 120, bool canInstaDropDuringInit = true, bool leaveSlag = false, bool canRoofPunch = false) { // Set a var to store drop cell IntVec3 intVec; // If we cant find a dropspot if (!DropCellFinder.TryFindDropSpotNear(dropCenter, out intVec, true, canRoofPunch)) { // Log an error Log.Warning(string.Concat("DropThingsNear in RA failed to find a place to drop ", " near ", dropCenter, ". Dropping on random square instead.")); // Try another way to get a drop spot CellFinderLoose.RandomCellWith(cell => cell.Walkable()); } // Setup a new container for contents and config var cargo = new DropPodInfo(); // Loop over things passed in params foreach (var group in thingsGroups) { // Foreach thing we find foreach (var thing in group) { // Add it to the info container cargo.containedThings.Add(thing); } } // Set the open delay on the info container cargo.openDelay = openDelay; // Call the main method to create the ship var wreck = (ShipWreckFlying)ThingMaker.MakeThing(ThingDef.Named("ShipWreckFlying")); // Set its content to what was passed in params wreck.cargo = cargo; // Spawn the falling ship part GenSpawn.Spawn(wreck, dropCenter); }
public static void DropThingGroupsNear( IntVec3 dropCenter, List<List<Thing>> thingsGroups, int openDelay = DropPodInfo.DefaultOpenDelay, bool canInstaDropDuringInit = true, bool leaveSlag = false ) { IntVec3 dropSpot; foreach( var group in thingsGroups ) { if( !CellFinder.TryFindDropPodSpotNear( dropCenter, out dropSpot ) ) { Log.Warning("DropThingsNear failed to find a place to drop " + group.FirstOrDefault() + " near " + dropCenter + ". Dropping on random square instead." ); dropSpot = GenCellFinder.RandomCellWith( sq=>sq.Walkable() ); } //Forbid all the things if possible foreach( Thing t in group ) { ThingWithComponents tComp = t as ThingWithComponents; if( tComp != null && tComp.GetComp<CompForbiddable>() != null ) tComp.GetComp<CompForbiddable>().forbidden = true; } if( canInstaDropDuringInit && Find.TickManager.tickCount < 2 ) { //Dropping before game start: just insta-spawn foreach( Thing t in group ) { GenPlace.TryPlaceThing(t, dropSpot, ThingPlaceMode.Near); } } else { DropPodInfo podInfo = new DropPodInfo(); foreach( Thing t in group ) { podInfo.containedThings.Add(t); } podInfo.openDelay = openDelay; podInfo.leaveSlag = leaveSlag; DropPodUtility.MakeDropPodAt( dropSpot, podInfo ); } } }
public static void MakeDropPodCrashingAt(IntVec3 loc, DropPodInfo cargo) { // Create a new falling drop pod var dropPodCrashing = (DropPodFlying)ThingMaker.MakeThing(ThingDef.Named("DropPodFlying")); // Set its content to what was passed in params dropPodCrashing.cargo = cargo; // Spawn the falling drop pod GenSpawn.Spawn(dropPodCrashing, loc); }
public static void MakeDropPodAt( IntVec3 loc, DropPodInfo info ) { DropPodIncoming inc = (DropPodIncoming)ThingMaker.MakeThing( ThingDef.Named("DropPodIncoming") ); inc.contents = info; GenSpawn.Spawn(inc, loc ); }