// Token: 0x06000069 RID: 105 RVA: 0x00005238 File Offset: 0x00003438 public static float JPCarryFactor(Pawn pilot, ThingDef JP, ThingDef fuel) { JPWeightUtility.GetTotalPilotWeight(pilot); JPWeightUtility.GetJPCarry(JP, fuel); float carryFactor = Mathf.Min(1f, JPWeightUtility.GetJPCarry(JP, fuel) / JPWeightUtility.GetTotalPilotWeight(pilot) * JPWeightUtility.GetGravityFactor()); return(Mathf.Lerp(0.5f, 1f, carryFactor)); }
// Token: 0x06000028 RID: 40 RVA: 0x00002CB8 File Offset: 0x00000EB8 public void DoJumpJet(Pawn Pilot, IntVec3 targCell) { JPRotatePilot(Pilot, targCell, out var angle); if (JPSkyFallType == null) { JPSkyFallType = "SFJetPack"; } var JPSF = DefDatabase <ThingDef> .GetNamed(JPSkyFallType, false); if (JPSF == null) { JPSF = DefDatabase <ThingDef> .GetNamed("SFJetPack"); JPSkyFallType = "SFJetPack"; } var SFspeed = JPSF.skyfaller.speed; if (SFspeed <= 0f) { SFspeed = 1f; } var distance = Pilot.Position.DistanceTo(targCell); var timeToLand = (int)(distance / SFspeed); angle += 270f; if (angle >= 360f) { angle -= 360f; } int fuelUsed; if (Settings.UseCarry) { fuelUsed = (int)Math.Floor(distance * JPFuelRate / JPWeightUtility.JPCarryFactor(Pilot, def, JPFuelItem)); } else { fuelUsed = (int)Math.Floor(distance * JPFuelRate); } JPFuelAmount -= fuelUsed; var skyfaller = SkyfallerMaker.SpawnSkyfaller(JPSF, targCell, Pilot.Map); skyfaller.ticksToImpact = timeToLand; skyfaller.angle = angle; JPPilotIsDrafted = Pilot.Drafted; Pilot.DeSpawn(); skyfaller.innerContainer.TryAdd(Pilot, false); }
// Token: 0x0600006A RID: 106 RVA: 0x0000528B File Offset: 0x0000348B public static float GetTotalPilotWeight(Pawn pilot) { return(0f + JPWeightUtility.GetPilotWeight(pilot) + JPWeightUtility.GetInventoryWeight(pilot, true) + JPWeightUtility.GetEquipmentWeight(pilot) + JPWeightUtility.GetApparelWeight(pilot)); }
// Token: 0x0600006F RID: 111 RVA: 0x00005468 File Offset: 0x00003668 public static float GetJPCarry(ThingDef JP, ThingDef fuel) { return(JPWeightUtility.GetJPBaseCarry(JP) * JPWeightUtility.GetJPFuelCarryFactor(fuel)); }
// Token: 0x0600002A RID: 42 RVA: 0x00002E28 File Offset: 0x00001028 internal bool FlightCellCheck(Pawn pilot, IntVec3 tCell, int fuel, float fRate, float minJump, float maxJump, out string cantReason) { cantReason = ""; if (!tCell.InBounds(pilot.Map)) { cantReason = "JetPack.JumpReasonInvalid".Translate(); return(false); } if (JPOnCooldown) { cantReason = "JetPack.JumpReasonOnCooldown".Translate(); return(false); } if (!pilot.CanReserve(tCell)) { cantReason = "JetPack.JumpReasonReserved".Translate(); return(false); } if (tCell.Roofed(pilot.Map)) { if (!Settings.RoofPunch) { cantReason = "JetPack.JumpReasonRoofed".Translate(); return(false); } var chkSKF = DefDatabase <ThingDef> .GetNamed(JPSkyFallType, false); if (chkSKF == null || !chkSKF.skyfaller.hitRoof) { cantReason = "JetPack.JumpReasonSFNotRPunch".Translate( chkSKF?.label.CapitalizeFirst()); return(false); } } if (!tCell.Walkable(pilot.Map)) { cantReason = "JetPack.JumpReasonNotWalk".Translate(); return(false); } if (tCell.GetDangerFor(pilot, pilot.Map) == Danger.Deadly) { cantReason = "JetPack.JumpReasonDeadly".Translate(); return(false); } var distance = pilot.Position.DistanceTo(tCell); if (distance < minJump) { cantReason = "JetPack.JumpReasonMinRange".Translate(((int)minJump).ToString()); return(false); } if (distance > maxJump) { cantReason = "JetPack.JumpReasonMaxRange".Translate(((int)maxJump).ToString()); return(false); } if (fRate <= 0f) { cantReason = "JetPack.JumpFuelRateInvalid".Translate(fRate.ToString()); return(false); } float distCanJump; if (Settings.UseCarry) { distCanJump = fuel / fRate * JPWeightUtility.JPCarryFactor(pilot, def, JPFuelItem); } else { distCanJump = fuel / fRate; } if (distCanJump > maxJump) { distCanJump = maxJump; } if (!(distCanJump < distance)) { return(true); } cantReason = "JetPack.JumpNotEnoughfuel".Translate(); return(false); }
// Token: 0x0600002A RID: 42 RVA: 0x00002E28 File Offset: 0x00001028 internal bool FlightCellCheck(Pawn pilot, IntVec3 tCell, int fuel, float fRate, float minJump, float maxJump, out string cantReason) { cantReason = ""; if (!GenGrid.InBounds(tCell, pilot.Map)) { cantReason = Translator.Translate("JetPack.JumpReasonInvalid"); return(false); } if (this.JPOnCooldown) { cantReason = Translator.Translate("JetPack.JumpReasonOnCooldown"); return(false); } if (!ReservationUtility.CanReserve(pilot, tCell, 1, -1, null, false)) { cantReason = Translator.Translate("JetPack.JumpReasonReserved"); return(false); } if (GridsUtility.Roofed(tCell, pilot.Map)) { if (!Settings.RoofPunch) { cantReason = Translator.Translate("JetPack.JumpReasonRoofed"); return(false); } ThingDef chkSKF = DefDatabase <ThingDef> .GetNamed(this.JPSkyFallType, false); if (chkSKF == null || !chkSKF.skyfaller.hitRoof) { cantReason = TranslatorFormattedStringExtensions.Translate("JetPack.JumpReasonSFNotRPunch", (chkSKF != null) ? GenText.CapitalizeFirst(chkSKF.label) : null); return(false); } } if (!GenGrid.Walkable(tCell, pilot.Map)) { cantReason = Translator.Translate("JetPack.JumpReasonNotWalk"); return(false); } if (DangerUtility.GetDangerFor(tCell, pilot, pilot.Map) == Danger.Deadly) { cantReason = Translator.Translate("JetPack.JumpReasonDeadly"); return(false); } float distance = IntVec3Utility.DistanceTo(pilot.Position, tCell); if (distance < minJump) { cantReason = TranslatorFormattedStringExtensions.Translate("JetPack.JumpReasonMinRange", ((int)minJump).ToString()); return(false); } if (distance > maxJump) { cantReason = TranslatorFormattedStringExtensions.Translate("JetPack.JumpReasonMaxRange", ((int)maxJump).ToString()); return(false); } if (fRate <= 0f) { cantReason = TranslatorFormattedStringExtensions.Translate("JetPack.JumpFuelRateInvalid", fRate.ToString()); return(false); } float distCanJump; if (Settings.UseCarry) { distCanJump = (float)fuel / fRate * JPWeightUtility.JPCarryFactor(pilot, this.def, this.JPFuelItem); } else { distCanJump = (float)fuel / fRate; } if (distCanJump > maxJump) { distCanJump = maxJump; } if (distCanJump < distance) { cantReason = Translator.Translate("JetPack.JumpNotEnoughfuel"); return(false); } return(true); }