public static bool canCarrySidearmInstance(ThingWithComps sidearmThing, Pawn pawn, out string errString) { //nicked from EquipmentUtility.CanEquip CompBladelinkWeapon compBladelinkWeapon = sidearmThing.TryGetComp <CompBladelinkWeapon>(); if (compBladelinkWeapon != null && compBladelinkWeapon.bondedPawn != null && compBladelinkWeapon.bondedPawn != pawn) { errString = "BladelinkBondedToSomeoneElse".Translate(); return(false); } if (EquipmentUtility.IsBiocoded(sidearmThing) && pawn != sidearmThing.TryGetComp <CompBiocodableWeapon>().CodedPawn) { errString = "BiocodedCodedForSomeoneElse".Translate(); return(false); } ThingStuffPair sidearm = sidearmThing.toThingStuffPair(); return(canCarrySidearmType(sidearm, pawn, out errString)); }
public void DrawIconForWeapon(Pawn pawn, GoldfishModule pawnMemory, ThingWithComps weapon, bool isDuplicate, Rect contentRect, Vector2 iconOffset) { if (weapon is null || weapon.def is null || weapon.def.uiIcon is null) { return; } ThingStuffPair weaponType = weapon.toThingStuffPair(); var iconRect = new Rect(contentRect.x + iconOffset.x, contentRect.y + iconOffset.y, IconSize, IconSize); //var iconColor = iconBaseColor; string hoverText; if (pawn.Drafted) { if (pawnMemory.ForcedWeaponWhileDrafted == weapon.toThingStuffPair()) { hoverText = "DrawSidearm_gizmoTooltipForcedWhileDrafted"; } else { hoverText = "DrawSidearm_gizmoTooltipWhileDrafted"; } } else { if (pawnMemory.ForcedWeapon == weapon.toThingStuffPair()) { hoverText = "DrawSidearm_gizmoTooltipForced"; } else { if (weapon.def.IsRangedWeapon) { if (pawnMemory.DefaultRangedWeapon == weaponType) { hoverText = "DrawSidearm_gizmoTooltipRangedDefault"; } else { hoverText = "DrawSidearm_gizmoTooltipRanged"; } } else { if (pawnMemory.PreferredMeleeWeapon == weaponType) { hoverText = "DrawSidearm_gizmoTooltipMeleePreferred"; } else { hoverText = "DrawSidearm_gizmoTooltipMelee"; } } } } TooltipHandler.TipRegion(iconRect, string.Format(hoverText.Translate(), weapon.toThingStuffPair().getLabel())); MouseoverSounds.DoRegion(iconRect, SoundDefOf.Mouseover_Command); Texture2D drawPocket; if (pawnMemory.RememberedWeapons.Contains(weapon.toThingStuffPair())) { drawPocket = TextureResources.drawPocket; } else { drawPocket = TextureResources.drawPocketTemp; } if (Mouse.IsOver(iconRect)) { LessonAutoActivator.TeachOpportunity(SidearmsDefOf.Concept_SidearmsDropping, OpportunityType.GoodToKnow); if (pawn.Drafted) { LessonAutoActivator.TeachOpportunity(SidearmsDefOf.Concept_SimpleSidearmsAdvancedDrafted, OpportunityType.GoodToKnow); } else { if (weapon.def.IsRangedWeapon) { LessonAutoActivator.TeachOpportunity(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, OpportunityType.GoodToKnow); } else { LessonAutoActivator.TeachOpportunity(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, OpportunityType.GoodToKnow); } } GUI.color = iconMouseOverColor; GUI.DrawTexture(iconRect, drawPocket); //Graphics.DrawTexture(iconRect, TextureResources.drawPocket, new Rect(0, 0, 1f, 1f), 0, 0, 0, 0, iconMouseOverColor); } else { GUI.color = iconBaseColor; GUI.DrawTexture(iconRect, drawPocket); //Graphics.DrawTexture(iconRect, TextureResources.drawPocket, new Rect(0, 0, 1f, 1f), 0, 0, 0, 0, iconBaseColor); } Texture resolvedIcon; if (!weapon.def.uiIconPath.NullOrEmpty()) { resolvedIcon = weapon.def.uiIcon; } else { resolvedIcon = weapon.Graphic.ExtractInnerGraphicFor(weapon).MatSingle.mainTexture; } GUI.color = weapon.DrawColor; GUI.DrawTexture(iconRect, resolvedIcon); GUI.color = Color.white; if (!isDuplicate) { GUI.color = Color.white; if (pawnMemory.ForcedWeaponWhileDrafted == weaponType) { GUI.DrawTexture(iconRect, TextureResources.forcedDrafted); } if (pawnMemory.ForcedWeapon == weaponType) { GUI.DrawTexture(iconRect, TextureResources.forcedAlways); } if (weaponType.thing.IsRangedWeapon & pawnMemory.DefaultRangedWeapon == weaponType) { GUI.DrawTexture(iconRect, TextureResources.defaultRanged); } else if (pawnMemory.PreferredMeleeWeapon == weaponType) { GUI.DrawTexture(iconRect, TextureResources.preferredMelee); } GUI.color = Color.white; } UIHighlighter.HighlightOpportunity(iconRect, "SidearmInInventory"); if (weapon.def.IsRangedWeapon) { UIHighlighter.HighlightOpportunity(iconRect, "SidearmInInventoryRanged"); } else { UIHighlighter.HighlightOpportunity(iconRect, "SidearmInInventoryMelee"); } if (Widgets.ButtonInvisible(iconRect, true)) { interactedWith = SidearmsListInteraction.Weapon; interactionWeapon = weapon; interactionWeaponIsDuplicate = isDuplicate; } }