Beispiel #1
0
        //uses abstract unit of time. Real time values aren't needed, only relative values.
        private static float CalculateTimeNeeded(Pawn pawn, ref LocalTargetInfo target, LocalTargetInfo secondTarget, float firstToSecondTargetDistance, Pawn animal, bool firstTargetNoMount, bool secondTargetNoMount, Area_GU areaDropAnimal)
        {
            float walkDistance = DistanceUtility.QuickDistance(pawn.Position, animal.Position);
            float rideDistance = DistanceUtility.QuickDistance(animal.Position, target.Cell);

            if (firstTargetNoMount && areaDropAnimal != null)
            {
                rideDistance = 0;
                IntVec3 parkLoc = DistanceUtility.getClosestAreaLoc(animal.Position, areaDropAnimal);
                rideDistance += DistanceUtility.QuickDistance(animal.Position, parkLoc);
                walkDistance += DistanceUtility.QuickDistance(parkLoc, target.Cell);
                walkDistance += firstToSecondTargetDistance;
            }
            else if (secondTargetNoMount && secondTarget != null && secondTarget.IsValid && areaDropAnimal != null)
            {
                IntVec3 parkLoc = DistanceUtility.getClosestAreaLoc(target.Cell, areaDropAnimal);
                rideDistance += DistanceUtility.QuickDistance(target.Cell, parkLoc);
                walkDistance += DistanceUtility.QuickDistance(parkLoc, secondTarget.Cell);
            }
            else
            {
                rideDistance += firstToSecondTargetDistance;
            }

            int adjustedTicksPerMove = TicksPerMoveUtility.adjustedTicksPerMove(pawn, animal, true);

            float timeNeeded = walkDistance * pawn.TicksPerMoveDiagonal + rideDistance * adjustedTicksPerMove;

            return(timeNeeded);
        }
Beispiel #2
0
        static void Postfix(Pawn __instance, ref bool diagonal, ref int __result)
        {
            if (Base.Instance.GetExtendedDataStorage() == null)
            {
                return;
            }
            ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(__instance);

            if (pawnData.mount != null)
            {
                __result = TicksPerMoveUtility.adjustedTicksPerMove(__instance, pawnData.mount, diagonal);
            }
        }
        static void Postfix(Pawn __instance, ref bool diagonal, ref int __result)
        {
            if (GiddyUpCore.Base.Instance.GetExtendedDataStorage() == null)
            {
                return;
            }

            ExtendedPawnData pawnData = GiddyUpCore.Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(__instance);

            if (pawnData.caravanMount != null && __instance.ridingCaravanMount() && !__instance.Spawned)
            {
                __result = TicksPerMoveUtility.adjustedTicksPerMove(__instance, pawnData.caravanMount, diagonal);
            }
        }
        public static int adjustTicksPerMove(int num2, int index, List <Pawn> pawns)
        {
            ExtendedDataStorage store = GiddyUpCore.Base.Instance.GetExtendedDataStorage();

            if (store == null || pawns == null || pawns.Count == 0)
            {
                return(num2);
            }
            Pawn pawn = pawns[index];

            ExtendedPawnData pawnData = store.GetExtendedDataFor(pawn);

            if (pawnData != null && pawnData.caravanMount != null && pawn.ridingCaravanMount())
            {
                //Log.Message("Returning adjusted ticks per move: " + "TicsPerMove was: " + num2 + ", but now: " + TicksPerMoveUtility.adjustedTicksPerMove(pawn, pawnData.caravanMount, true));
                return(TicksPerMoveUtility.adjustedTicksPerMove(pawn, pawnData.caravanMount, true));
            }
            else
            {
                //Log.Message("Returning default ticks per move: " + num2);
                return(num2);
            }
        }