From 38c8be995ba2303ee23d7053f05e431beacce22e Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Fri, 24 Jan 2020 17:56:07 +0300 Subject: [PATCH] Add even more condensed tooltip version (not used yet) --- gui/characterSelection.py | 25 ++++++++++++++++++++++++- service/character.py | 16 +++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/gui/characterSelection.py b/gui/characterSelection.py index 841e6c7e3..03b294ad0 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -232,6 +232,8 @@ class CharacterSelection(wx.Panel): sCharacter = Character.getInstance() self.reqs = sCharacter.checkRequirements(fit) + + sCharacter.skillReqsDict = {'charname': fit.character.name, 'skills': []} if len(self.reqs) == 0: self.needsSkills = False @@ -303,7 +305,6 @@ class CharacterSelection(wx.Panel): if tabulationLevel == 0: for item, subReqs in reqs.items(): skillsMap = self._buildSkillsTooltipCondensed(subReqs, item.name, 1, skillsMap) - sorted(skillsMap, key=skillsMap.get) else: for name, info in reqs.items(): level, ID, more = info @@ -323,3 +324,25 @@ class CharacterSelection(wx.Panel): skillsMap = self._buildSkillsTooltipCondensed(more, currItem, tabulationLevel + 1, skillsMap) return skillsMap + + def _buildSkillsTooltipSuperCondensed(self, reqs, currItem="", tabulationLevel=0, skillsMap=None): + allReqs = {} + implicitReqs = {} + + def traverseReqs(itemReqs, topLevel=True): + for skillName, (skillLevel, skillTypeID, subReqs) in itemReqs.items(): + if (skillTypeID, skillName) not in allReqs or allReqs[(skillTypeID, skillName)] < skillLevel: + allReqs[(skillTypeID, skillName)] = skillLevel + if not topLevel and (skillTypeID not in implicitReqs or implicitReqs[skillTypeID] < skillLevel): + implicitReqs[skillTypeID] = skillLevel + traverseReqs(subReqs, topLevel=False) + + for item, itemReqs in reqs.items(): + traverseReqs(itemReqs) + + newReqs = {} + for (skillTypeID, skillName), skillLevel in allReqs.items(): + if skillTypeID not in implicitReqs or implicitReqs[skillTypeID] < skillLevel: + newReqs[skillName] = skillLevel, skillTypeID + + return newReqs diff --git a/service/character.py b/service/character.py index e750cb7f6..38d2fde10 100644 --- a/service/character.py +++ b/service/character.py @@ -442,13 +442,13 @@ class Character: if subThing is not None: if isinstance(thing, es_Fighter) and attr == "charge": continue - self._checkRequirements(fit, fit.character, subThing, subReqs) + self._checkRequirements(fit.character, subThing, subReqs) if subReqs: reqs[subThing] = subReqs return reqs - def _checkRequirements(self, fit, char, subThing, reqs): + def _checkRequirements(self, char, subThing, reqs): for req, level in subThing.requiredSkills.items(): name = req.name ID = req.ID @@ -456,10 +456,20 @@ class Character: currLevel, subs = info if info is not None else 0, {} if level > currLevel and (char is None or char.getSkill(req).level < level): reqs[name] = (level, ID, subs) - self._checkRequirements(fit, char, req, subs) + self._checkRequirements(char, req, subs) return reqs + def getShit(self, reqs, condensed=None): + if condensed is None: + condensed = {} + for name, (level, ID, subs) in reqs: + if name not in condensed or condensed[name] < level: + condensed[name] = level + + + + class UpdateAPIThread(threading.Thread): def __init__(self, charID, callback):