コード例 #1
0
        public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
        {
            ArmorRack armorRack = this.parent as ArmorRack;

            if (!selPawn.CanReach(armorRack, PathEndMode.Touch, Danger.Deadly, false, false, TraverseMode.ByPawn))
            {
                FloatMenuOption failer = new FloatMenuOption("CannotUseNoPath".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null);
                yield return(failer);

                yield break;
            }

            var nonViolentOptionYielded = false;

            if (ArmorRackJobUtil.PawnCanEquipWeaponSet(armorRack, selPawn))
            {
                // Transfer to
                var swapWithOption = new FloatMenuOption("ArmorRacks_TransferToRack_FloatMenuLabel".Translate(), delegate
                {
                    var target_info = new LocalTargetInfo(armorRack);
                    var wearRackJob = new Job(ArmorRacksJobDefOf.ArmorRacks_JobTransferToRack, target_info);
                    selPawn.jobs.TryTakeOrderedJob(wearRackJob);
                });
                yield return(FloatMenuUtility.DecoratePrioritizedTask(swapWithOption, selPawn, armorRack, "ReservedBy"));
            }
            else
            {
                yield return(new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel_NonViolent".Translate(), null));

                nonViolentOptionYielded = true;
            }

            if (ForbidUtility.IsForbidden(armorRack, selPawn))
            {
                yield break;
            }

            if (ArmorRackJobUtil.RackHasItems(armorRack))
            {
                if (ArmorRackJobUtil.PawnCanEquipWeaponSet(armorRack, selPawn))
                {
                    // Equip from
                    var equipFromOption = new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel".Translate(), delegate
                    {
                        var target_info = new LocalTargetInfo(armorRack);
                        var wearRackJob = new Job(ArmorRacksJobDefOf.ArmorRacks_JobWearRack, target_info);
                        selPawn.jobs.TryTakeOrderedJob(wearRackJob);
                    });
                    yield return(FloatMenuUtility.DecoratePrioritizedTask(equipFromOption, selPawn, armorRack, "ReservedBy"));
                }
                else if (!nonViolentOptionYielded)
                {
                    yield return(new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel_NonViolent".Translate(), null));
                }
            }
            else
            {
                yield return(new FloatMenuOption("ArmorRacks_WearRack_FloatMenuLabel_Empty".Translate(), null));
            }
        }
コード例 #2
0
        public ArmorRackUseCommand(ArmorRack armorRack, Pawn pawn)
        {
            ArmorRack = armorRack;
            Pawn      = pawn;
            icon      = ContentFinder <Texture2D> .Get(armorRack.def.graphicData.texPath + "_south", false);

            defaultIconColor = armorRack.Stuff.stuffProps.color;
        }
コード例 #3
0
        private void DrawThingRow(ref float y, float width, Thing thing, bool inventory = false)
        {
            Rect rect1 = new Rect(0.0f, y, width, 28f);

            Widgets.InfoCardButton(rect1.width - 24f, y, thing);
            rect1.width -= 24f;

            Rect rect2 = new Rect(rect1.width - 48f, y, 24f, 24f);

            TooltipHandler.TipRegion(rect2, (TipSignal)"DropThing".Translate());
            if (Widgets.ButtonImage(rect2, ContentFinder <Texture2D> .Get("UI/Buttons/Drop", true)))
            {
                SoundDefOf.Tick_High.PlayOneShotOnCamera((Map)null);
                ArmorRack armorRack = SelThing as ArmorRack;
                Thing     droppedThing;
                armorRack.InnerContainer.TryDrop(thing, ThingPlaceMode.Near, out droppedThing);
            }
            rect1.width -= 24f;

            Rect rect3 = rect1;

            rect3.xMin   = rect3.xMax - 60f;
            rect1.width -= 60f;
            if (Mouse.IsOver(rect1))
            {
                GUI.color = ITab_Pawn_Gear.HighlightColor;
                GUI.DrawTexture(rect1, (Texture)TexUI.HighlightTex);
            }

            if ((Object)thing.def.DrawMatSingle != (Object)null &&
                (Object)thing.def.DrawMatSingle.mainTexture != (Object)null)
            {
                Widgets.ThingIcon(new Rect(4f, y, 28f, 28f), thing, 1f);
            }
            Text.Anchor = TextAnchor.MiddleLeft;
            GUI.color   = ITab_Pawn_Gear.ThingLabelColor;
            Rect    rect4 = new Rect(36f, y, rect1.width - 36f, rect1.height);
            string  str1  = thing.LabelCap;
            Apparel ap    = thing as Apparel;

            Text.WordWrap = false;
            Widgets.Label(rect4, str1.Truncate(rect4.width, (Dictionary <string, string>)null));
            Text.WordWrap = true;
            string str2 = thing.DescriptionDetailed;

            if (thing.def.useHitPoints)
            {
                str2 = str2 + "\n" + (object)thing.HitPoints + " / " + (object)thing.MaxHitPoints;
            }
            TooltipHandler.TipRegion(rect1, (TipSignal)str2);
            y += 28f;
        }
コード例 #4
0
        private IEnumerable <Widgets.DropdownMenuElement <BodyTypeDef> > GetBodyDefTypeOptions()
        {
            ArmorRack armorRack       = SelThing as ArmorRack;
            var       allBodyTypeDefs = ArmorRackJobUtil.GetRaceBodyTypes(armorRack.PawnKindDef.race);

            foreach (BodyTypeDef bodyTypeDef in allBodyTypeDefs)
            {
                yield return(new Widgets.DropdownMenuElement <BodyTypeDef>
                {
                    option = new FloatMenuOption(bodyTypeDef.ToString(), delegate()
                    {
                        armorRack.BodyTypeDef = bodyTypeDef;
                    }),
                    payload = null
                });
            }
        }
コード例 #5
0
        private IEnumerable <Widgets.DropdownMenuElement <PawnKindDef> > GetBodyDefOptions()
        {
            ArmorRack armorRack    = SelThing as ArmorRack;
            var       pawnKindDefs = DefDatabase <PawnKindDef> .AllDefs;
            var       labels       = new List <string>();

            foreach (PawnKindDef pawnKindDef in pawnKindDefs)
            {
                Faction faction = FactionUtility.DefaultFactionFrom(pawnKindDef.defaultFactionType);
                if (faction != null && faction == Faction.OfPlayer && labels.Contains(pawnKindDef.race.label) == false)
                {
                    labels.Add(pawnKindDef.race.label);
                    yield return(new Widgets.DropdownMenuElement <PawnKindDef>
                    {
                        option = new FloatMenuOption(pawnKindDef.race.label, delegate()
                        {
                            armorRack.PawnKindDef = pawnKindDef;
                            armorRack.ContentsDrawer.ResolveApparelGraphics();
                        }),
                        payload = null
                    });
                }
            }
        }
コード例 #6
0
 public static bool PawnCanEquipWeaponSet(ArmorRack rack, Pawn pawn)
 {
     return(!(pawn.WorkTagIsDisabled(WorkTags.Violent) && rack.GetStoredWeapon() != null));
 }
コード例 #7
0
 public static bool RackHasItems(ArmorRack rack)
 {
     return(rack.InnerContainer.Count != 0);
 }
コード例 #8
0
        protected override void FillTab()
        {
            Text.Font = GameFont.Small;
            Rect rect     = new Rect(0.0f, 20f, this.size.x, this.size.y - 20f).ContractedBy(10f);
            Rect position = new Rect(rect.x, rect.y, rect.width, rect.height);

            GUI.BeginGroup(position);
            Text.Font = GameFont.Small;
            GUI.color = Color.white;
            Rect outRect  = new Rect(0.0f, 0.0f, position.width, position.height);
            Rect viewRect = outRect;

            Widgets.BeginScrollView(outRect, ref this.scrollPosition, viewRect, true);
            float     num       = 0.0f;
            ArmorRack armorRack = SelThing as ArmorRack;

            Widgets.ListSeparator(ref num, viewRect.width, "Equipment".Translate());
            Thing storedWeapon = armorRack.GetStoredWeapon();

            if (storedWeapon != null)
            {
                this.DrawThingRow(ref num, viewRect.width, storedWeapon, false);
            }

            Widgets.ListSeparator(ref num, viewRect.width, "Apparel".Translate());
            foreach (Apparel apparel in armorRack.GetStoredApparel()
                     .OrderByDescending((ap => ap.def.apparel.bodyPartGroups[0].listOrder)))
            {
                this.DrawThingRow(ref num, viewRect.width, (Thing)apparel, false);
            }

            Widgets.EndScrollView();
            GUI.EndGroup();
            GUI.color   = Color.white;
            Text.Anchor = TextAnchor.UpperLeft;

            Listing_Standard listingStandard2 = new Listing_Standard();
            Rect             rect2            = new Rect(0f, rect.height, 100f, 30f);

            listingStandard2.Begin(rect2);
            Widgets.Dropdown(
                listingStandard2.GetRect(30f),
                armorRack,
                (a => a.PawnKindDef),
                (b => this.GetBodyDefOptions()),
                armorRack.PawnKindDef.race.label
                );
            listingStandard2.End();

            Listing_Standard listingStandard1 = new Listing_Standard();
            Rect             rect1            = new Rect(105.0f, rect.height, 100f, 30f);

            listingStandard1.Begin(rect1);
            Widgets.Dropdown(
                listingStandard1.GetRect(30f),
                armorRack,
                (a => a.BodyTypeDef),
                (b => GetBodyDefTypeOptions()),
                armorRack.BodyTypeDef.ToString()
                );
            listingStandard1.End();
        }
コード例 #9
0
 public ArmorRackContentsDrawer(ArmorRack armorRack)
 {
     ArmorRack       = armorRack;
     ApparelGraphics = new List <ApparelGraphicRecord>();
 }
コード例 #10
0
 public MechanizedArmorRackContentsDrawer(ArmorRack armorRack) : base(armorRack)
 {
 }