Add requiredSkills tooltip

This commit is contained in:
cncfanatics
2010-10-31 00:08:27 +02:00
parent 12f33159a7
commit 661dfc66a1
2 changed files with 53 additions and 1 deletions

View File

@@ -20,7 +20,7 @@
import wx import wx
import service import service
from gui import characterEditor as ce from gui import characterEditor as ce
from gui import shipBrowser as sb from gui import bitmapLoader
from gui import fittingView as fv from gui import fittingView as fv
import gui.mainFrame import gui.mainFrame
@@ -39,6 +39,14 @@ class CharacterSelection(wx.Panel):
self.refreshCharacterList() self.refreshCharacterList()
self.skillReqsStaticBitmap = wx.StaticBitmap(self)
mainSizer.Add(self.skillReqsStaticBitmap, 0, wx.ALIGN_CENTER_VERTICAL)
self.cleanSkills = bitmapLoader.getBitmap("skill_big", "icons")
self.redSkills = bitmapLoader.getBitmap("skillRed_big", "icons")
self.greenSkills = bitmapLoader.getBitmap("skillGreen_big", "icons")
self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills)
self.Bind(wx.EVT_CHOICE, self.charChanged) self.Bind(wx.EVT_CHOICE, self.charChanged)
self.mainFrame.Bind(ce.CHAR_LIST_UPDATED, self.refreshCharacterList) self.mainFrame.Bind(ce.CHAR_LIST_UPDATED, self.refreshCharacterList)
self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged)
@@ -101,6 +109,18 @@ class CharacterSelection(wx.Panel):
currCharID = choice.GetClientData(choice.GetCurrentSelection()) currCharID = choice.GetClientData(choice.GetCurrentSelection())
fit = cFit.getFit(event.fitID) fit = cFit.getFit(event.fitID)
newCharID = fit.character.ID if fit is not None else None newCharID = fit.character.ID if fit is not None else None
if event.fitID is None:
self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills)
else:
sCharacter = service.Character.getInstance()
reqs = sCharacter.checkRequirements(fit)
if len(reqs) == 0:
self.skillReqsStaticBitmap.SetBitmap(self.greenSkills)
self.skillReqsStaticBitmap.SetToolTip(None)
else:
tip = self._buildSkillsTooltip(reqs)
self.skillReqsStaticBitmap.SetBitmap(self.redSkills)
self.skillReqsStaticBitmap.SetToolTipString(tip.strip())
if newCharID == None: if newCharID == None:
cChar = service.Character.getInstance() cChar = service.Character.getInstance()
@@ -109,3 +129,12 @@ class CharacterSelection(wx.Panel):
self.selectChar(newCharID) self.selectChar(newCharID)
event.Skip() event.Skip()
def _buildSkillsTooltip(self, reqs, tabulationLevel = 0):
tip = ""
for name, info in reqs.iteritems():
level, more = info
tip += "%s%s: %d\n" % (" " * tabulationLevel, name, level)
tip += self._buildSkillsTooltip(more, tabulationLevel + 1)
return tip

View File

@@ -21,6 +21,7 @@ import eos.db
import eos.types import eos.types
import copy import copy
import service import service
import itertools
class Character(): class Character():
instance = None instance = None
@@ -138,3 +139,25 @@ class Character():
def getImplants(self, charID): def getImplants(self, charID):
char = eos.db.getCharacter(charID) char = eos.db.getCharacter(charID)
return char.implants return char.implants
def checkRequirements(self, fit):
toCheck = []
reqs = {}
for thing in itertools.chain(fit.modules, fit.drones, (fit.ship,)):
for attr in ("item", "charge"):
subThing = getattr(thing, attr, None)
if subThing is not None:
self._checkRequirements(fit, fit.character, subThing, reqs)
return reqs
def _checkRequirements(self, fit, char, subThing, reqs):
for req, level in subThing.requiredSkills.iteritems():
name = req.name
info = reqs.get(name)
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, subs)
self._checkRequirements(fit, char, req, subs)
return reqs