Ejemplo n.º 1
0
        // 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);
        }