diff --git a/gui/builtinItemStatsViews/itemSkills.py b/gui/builtinItemStatsViews/itemSkills.py index 4612ab3ac..d9c3bfa28 100644 --- a/gui/builtinItemStatsViews/itemSkills.py +++ b/gui/builtinItemStatsViews/itemSkills.py @@ -41,6 +41,7 @@ class ItemSkills(wx.Panel): ("Cargo", "cargo"), ("Implants", "appliedImplants"), ("Boosters", "boosters"), + ("Necessary", "necessary"), ] for label, key in components: @@ -123,6 +124,9 @@ class ItemSkills(wx.Panel): for thing in items: self._collectAffectingSkills(thing, char, skillsMap) + + if self.checkboxes["necessary"].GetValue(): + self._collectRequiredSkills(items, char, skillsMap) skillsList = "" for skillName in sorted(skillsMap): @@ -158,6 +162,7 @@ class ItemSkills(wx.Panel): self.checkboxes["cargo"].Enable(len(fit.cargo) > 0) self.checkboxes["appliedImplants"].Enable(len(fit.appliedImplants) > 0) self.checkboxes["boosters"].Enable(len(fit.boosters) > 0) + self.checkboxes["necessary"].Enable(True) def _collectAffectingSkills(self, thing, char, skillsMap): for attr in ("item", "charge"): @@ -184,3 +189,32 @@ class ItemSkills(wx.Panel): skillsMap[skillName] = afflictor.level elif skillsMap[skillName] < afflictor.level: skillsMap[skillName] = afflictor.level + + def _collectRequiredSkills(self, items, char, skillsMap): + """Collect required skills from items (necessary to use them)""" + for thing in items: + for attr in ("item", "charge"): + if attr == "charge" and isinstance(thing, es_Fighter): + continue + subThing = getattr(thing, attr, None) + if subThing is None: + continue + if isinstance(thing, es_Fighter) and attr == "charge": + continue + + if hasattr(subThing, "requiredSkills"): + for reqSkill, level in subThing.requiredSkills.items(): + skillName = reqSkill.name + charSkill = char.getSkill(reqSkill) if char else None + charLevel = charSkill.level if charSkill else 0 + + if charLevel > 0: + if skillName not in skillsMap: + skillsMap[skillName] = charLevel + elif skillsMap[skillName] < charLevel: + skillsMap[skillName] = charLevel + else: + if skillName not in skillsMap: + skillsMap[skillName] = level + elif skillsMap[skillName] < level: + skillsMap[skillName] = level