DismountInBase() public static method

public static DismountInBase ( Pawn pawn, Vehicle_Cart cart ) : Job
pawn Pawn
cart Vehicle_Cart
return Job
コード例 #1
0
 private static Job GetVehicle(Pawn pawn, Job job, WorkTypeDef worktag)
 {
     if (!ToolsForHaulUtility.IsDriver(pawn))
     {
         if (ToolsForHaulUtility.Cart.Count > 0 || ToolsForHaulUtility.CartTurret.Count > 0)
         {
             Thing vehicle = RightTools.GetRightVehicle(pawn, worktag);
             if (vehicle != null)
             {
                 job = new Job(HaulJobDefOf.Mount)
                 {
                     targetA = vehicle,
                 };
             }
         }
     }
     else
     {
         if (!ToolsForHaulUtility.IsDriverOfThisVehicle(pawn, RightTools.GetRightVehicle(pawn, worktag)))
         {
             job = ToolsForHaulUtility.DismountInBase(pawn, MapComponent_ToolsForHaul.currentVehicle[pawn]);
         }
     }
     return(job);
 }
コード例 #2
0
        public override ThinkResult TryIssueJobPackage(Pawn pawn)
        {
            Job         job     = TryGiveTerminalJob(pawn);
            bool        jobNull = job == null;
            ThinkResult result;

            if (pawn.mindState.IsIdle)
            {
                //if (previousPawnWeapons.ContainsKey(pawn))
                //{
                //    Apparel_Toolbelt toolbelt = ToolsForHaulUtility.TryGetToolbelt(pawn);
                //    Pawn wearer = toolbelt.wearer;
                //    if (wearer.equipment.Primary != null)
                //        toolbelt.slotsComp.SwapEquipment(previousPawnWeapons[pawn]);
                //    else
                //    {
                //        wearer.equipment.AddEquipment(previousPawnWeapons[pawn]);
                //        toolbelt.slotsComp.slots.Remove(previousPawnWeapons[pawn]);
                //    }
                //    previousPawnWeapons.Remove(pawn);
                //}
                if (ToolsForHaulUtility.IsDriver(pawn))
                {
                    job = ToolsForHaulUtility.DismountInBase(pawn, MapComponent_ToolsForHaul.currentVehicle[pawn]);
                }
            }



            if (jobNull)
            {
                result = ThinkResult.NoJob;
            }
            else
            {
                if (pawn.Faction == Faction.OfPlayer)
                {
                    if (job.def == JobDefOf.DoBill)
                    {
                        RightTools.EquipRigthTool(pawn, job.RecipeDef.workSpeedStat);
                    }

                    if (job.def == JobDefOf.Hunt)
                    {
                        RightTools.EquipRigthTool(pawn, StatDefOf.AccuracyLong);
                        job = GetVehicle(pawn, job, WorkTypeDefOf.Hunting);
                    }

                    if (job.def == JobDefOf.FinishFrame || job.def == JobDefOf.Deconstruct || job.def == JobDefOf.Repair || job.def == JobDefOf.BuildRoof || job.def == JobDefOf.RemoveRoof || job.def == JobDefOf.RemoveFloor)
                    {
                        RightTools.EquipRigthTool(pawn, StatDefOf.ConstructionSpeed);
                        if (ToolsForHaulUtility.Cart.Count > 0 || ToolsForHaulUtility.CartTurret.Count > 0)
                        {
                            Thing vehicle = RightTools.GetRightVehicle(pawn, WorkTypeDefOf.Construction);
                            if (vehicle != null && pawn.Position.DistanceToSquared(vehicle.Position) < pawn.Position.DistanceToSquared(job.targetA.Cell))
                            {
                                job = GetVehicle(pawn, job, WorkTypeDefOf.Construction);
                            }
                        }
                    }

                    if (job.def == JobDefOf.CutPlant || job.def == JobDefOf.Harvest)
                    {
                        RightTools.EquipRigthTool(pawn, StatDefOf.PlantWorkSpeed);
                    }

                    if (job.def == JobDefOf.Mine)
                    {
                        RightTools.EquipRigthTool(pawn, StatDefOf.MiningSpeed);
                    }

                    if (job.def == JobDefOf.TendPatient)
                    {
                        RightTools.EquipRigthTool(pawn, StatDefOf.BaseHealingQuality);
                    }
                }

                result = new ThinkResult(job, this);
            }

            return(result);
        }
コード例 #3
0
        public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn)
        {
            Action action_Dismount;
            Action action_Mount;
            Action action_DismountInBase;
            Action action_MakeMount;
            Action action_Deconstruct;

            // do nothing if not of colony
            if (Faction != Faction.OfPlayer)
            {
                yield break;
            }

            foreach (FloatMenuOption fmo in base.GetFloatMenuOptions(myPawn))
            {
                yield return(fmo);
            }

            action_Mount = () =>
            {
                Job jobNew = new Job(HaulJobDefOf.Mount);
                Find.Reservations.ReleaseAllForTarget(this);
                jobNew.targetA = this;
                myPawn.jobs.StartJob(jobNew, JobCondition.InterruptForced);
            };
            action_DismountInBase = () =>
            {
                Job jobNew = ToolsForHaulUtility.DismountInBase(mountableComp.Driver, MapComponent_ToolsForHaul.currentVehicle[mountableComp.Driver]);

                myPawn.jobs.StartJob(jobNew, JobCondition.InterruptForced);
            };
            action_Dismount = () =>
            {
                if (!myPawn.Position.InBounds())
                {
                    mountableComp.DismountAt(myPawn.Position);
                    return;
                }

                mountableComp.DismountAt(myPawn.Position - def.interactionCellOffset.RotatedBy(myPawn.Rotation));
                myPawn.Position = myPawn.Position.RandomAdjacentCell8Way();
                // mountableComp.DismountAt(myPawn.Position - VehicleDef.interactionCellOffset.RotatedBy(myPawn.Rotation));
            };

            action_MakeMount = () =>
            {
                Pawn worker = null;
                Job  jobNew = new Job(HaulJobDefOf.MakeMount);
                Find.Reservations.ReleaseAllForTarget(this);
                jobNew.maxNumToCarry = 1;
                jobNew.targetA       = this;
                jobNew.targetB       = myPawn;
                foreach (Pawn colonyPawn in Find.MapPawns.FreeColonistsSpawned)
                {
                    if (colonyPawn.CurJob.def != jobNew.def && (worker == null || (worker.Position - myPawn.Position).LengthHorizontal > (colonyPawn.Position - myPawn.Position).LengthHorizontal))
                    {
                        worker = colonyPawn;
                    }
                }
                if (worker == null)
                {
                    Messages.Message("NoWorkForMakeMount".Translate(), MessageSound.RejectInput);
                }
                else
                {
                    worker.jobs.StartJob(jobNew, JobCondition.InterruptForced);
                }
            };



            action_Deconstruct = () =>
            {
                Find.Reservations.ReleaseAllForTarget(this);
                Find.Reservations.Reserve(myPawn, this);
                Find.DesignationManager.AddDesignation(new Designation(this, DesignationDefOf.Deconstruct));
                Job job = new Job(JobDefOf.Deconstruct, this);
                myPawn.jobs.StartJob(job, JobCondition.InterruptForced);
            };
            bool alreadyMounted = false;

            if (!mountableComp.IsMounted)
            {
                foreach (Vehicle_Turret cart in ToolsForHaulUtility.CartTurret)
                {
                    if (cart.mountableComp.Driver == myPawn)
                    {
                        alreadyMounted = true;
                    }
                }

                if (myPawn.Faction == Faction.OfPlayer && (myPawn.RaceProps.IsMechanoid || myPawn.RaceProps.Humanlike) && !alreadyMounted && !this.IsForbidden(myPawn.Faction))
                {
                    yield return(new FloatMenuOption("Mount".Translate(LabelShort), action_Mount));
                }

                yield return(new FloatMenuOption("Deconstruct".Translate(LabelShort), action_Deconstruct));
            }
            else if (myPawn == mountableComp.Driver)
            {
                yield return(new FloatMenuOption("Dismount".Translate(LabelShort), action_Dismount));
            }
            yield return(new FloatMenuOption("DismountInBase".Translate(LabelShort), action_DismountInBase));
        }