diff --git a/examples/dokk/dokk.py b/examples/dokk/dokk.py index 553dd2571ab4dcc843238cf3669f83f70a637cc5..e1c510fbcc4ba9d3cf71d6b1496cfa76df795bda 100644 --- a/examples/dokk/dokk.py +++ b/examples/dokk/dokk.py @@ -44,6 +44,5 @@ class Dokk(object): def _LoadLevel(self): if self._current_level is not None: self._current_level.Close() - self.gl_win.ClearHUDObjects() self._current_level = level.Level(self.levels_[self._current_index]) self.gl_win.SetLevel(self._current_level) diff --git a/examples/dokk/level.py b/examples/dokk/level.py index a9e8b3e22180c6fe7074cce92c006e67dc1d3c06..85236e4ddd443cdefddd1de78b6bbef2b402326c 100644 --- a/examples/dokk/level.py +++ b/examples/dokk/level.py @@ -1,12 +1,12 @@ import os import time from PyQt4 import QtCore, QtGui -from ost import io, gfx, qa, geom +from ost import io, gfx, geom from ligand import Ligand from surface import Surface from protein import Protein from score_updater import ScoreUpdater -from config import * +from config import Config, TopTen from dokk import Dokk from level_messages import LevelIntro from level_messages import LevelEnd @@ -17,20 +17,17 @@ class Level(QtCore.QObject): def __init__(self, name, parent=None): QtCore.QObject.__init__(self,parent) self.name_=name - self.Load() - self.hud = None self.endtime = 0 self.stop_time = 0 + + self.Load() + self.LoadHUD() self.timer = QtCore.QTimer() self.timer.setSingleShot(True) self.connect(self.timer,QtCore.SIGNAL("timeout()"),self.Finished) - self.li = LevelIntro(self.config) - self.connect(self.li,QtCore.SIGNAL("Finished()"),self._IntroEnd) - self.le = None - self.hni = None - self.level_info = LevelInfo(self) + Dokk().gl_win.SetLockInput(True) self._started = False self.emit(QtCore.SIGNAL("Stopped()")) @@ -52,6 +49,17 @@ class Level(QtCore.QObject): self.su = ScoreUpdater(self) self.transform_ = gfx.Scene().GetTransform() + def LoadHUD(self): + self.hud_level_intro = LevelIntro(self.config) + self.connect(self.hud_level_intro,QtCore.SIGNAL("Finished()"),self._IntroEnd) + self.hud_level_end_tt = LevelEnd(self.config.TT) + self.connect(self.hud_level_end_tt,QtCore.SIGNAL("Finished()"),self._FinishEnd) + self.hud_level_end_ntt = LevelEnd(self.config.NTT) + self.connect(self.hud_level_end_ntt,QtCore.SIGNAL("Finished()"),self._FinishEnd) + self.hud_name_input = HUDNameInput() + self.connect(self.hud_name_input,QtCore.SIGNAL("Finished()"),self._FinishEnterName) + self.level_info = LevelInfo(self) + def RotateAxis(self, axis, angle): self.ligand.RotateAxis(axis, angle) @@ -103,24 +111,30 @@ class Level(QtCore.QObject): def Reset(self): self.endtime = 0 self.stop_time = 0 + self.CleanHUD() + self.ResetPos() + self.emit(QtCore.SIGNAL("Stopped()")) + + def CleanHUD(self): + self.hud_level_end_tt.Stop() + self.hud_level_end_ntt.Stop() + self.hud_level_intro.Stop() + self.hud_name_input.Stop() Dokk().gl_win.ClearHUDObjects() - if self.le is not None: - self.le.Stop() - self.li.Stop() - self.hni = None - + + def ResetPos(self): self.ligand.Reset() gfx.Scene().SetTransform(self.transform_) gfx.Scene().SetCenter(self.surface.go.GetCenter()) gfx.Scene().RequestRedraw() - self.su.UpdateScores() + self.UpdateScores() def Solve(self): self.ligand.Solve() gfx.Scene().SetTransform(self.transform_) gfx.Scene().SetCenter(self.surface.go.GetCenter()) gfx.Scene().RequestRedraw() - self.su.UpdateScores() + self.UpdateScores() def Finished(self): self._started = False @@ -128,26 +142,22 @@ class Level(QtCore.QObject): self.stop_time = time.time() Dokk().gl_win.SetLockInput(True) if self.GetRank() > 0: - self.le = LevelEnd(self.config.TT) + self.hud_level_end_tt.Start() else: - self.le = LevelEnd(self.config.NTT) - self.connect(self.le,QtCore.SIGNAL("Finished()"),self._FinishEnd) - self.le.Start() - + self.hud_level_end_ntt.Start() + def Begin(self): self.Reset() - self.su.UpdateScores() - self.li.Start() + self.UpdateScores() + self.hud_level_intro.Start() self._started = True - self.emit(QtCore.SIGNAL("Started()")) + self.emit(QtCore.SIGNAL("Started()")) def Close(self): gfx.Scene().SetTransform(self.transform_) self.emit(QtCore.SIGNAL("Closed()")) - if self.le is not None: - self.le.Stop() - self.li.Stop() self._started = False + self.CleanHUD() self.surface.Close() self.protein.Close() self.ligand.Close() @@ -157,16 +167,15 @@ class Level(QtCore.QObject): Dokk().gl_win.SetLockInput(False) self.timer.start(int(self.config.Level["TIME"])) self.endtime = float(time.time()+(int(self.config.Level["TIME"]))/1000.0) + self.emit(QtCore.SIGNAL("Started()")) def _FinishEnd(self): if bool(int(self.config.Level["SAVE"])) and self.GetRank()>0: - self.hni = HUDNameInput() - self.connect(self.hni,QtCore.SIGNAL("Finished()"),self._FinishEnterName) + self.hud_name_input.Start() else: self.Reset() self.emit(QtCore.SIGNAL("Stopped()")) def _FinishEnterName(self): - self.topten.SetValue(self.hni.GetName(),self.GetScore()) - self.Reset() - self.emit(QtCore.SIGNAL("Stopped()")) + self.topten.SetValue(self.hud_name_input.GetName(),self.GetScore()) + self.Reset() \ No newline at end of file diff --git a/examples/dokk/level_info.py b/examples/dokk/level_info.py index ab1b48e2df3c19d50705215a4951ff856dafc095..934a4beae4589108ccfec043b42c1bfd53690dc1 100644 --- a/examples/dokk/level_info.py +++ b/examples/dokk/level_info.py @@ -13,34 +13,35 @@ class LevelInfo(QtCore.QObject): self.highscore = HighScore(level.topten) self.level_info = LevelDetails(level.config.Level["NAME"],level.config.Level["DIFFICULTY"]) - self.connect(level,QtCore.SIGNAL("Start()"),self.Finish) + self.connect(level,QtCore.SIGNAL("Started()"),self.Finish) self.connect(level,QtCore.SIGNAL("Stopped()"),self.Start) - self.connect(level,QtCore.SIGNAL("Closed()"),self.Close) + self.connect(level,QtCore.SIGNAL("Closed()"),self.Finish) self.connect(self.timer,QtCore.SIGNAL("timeout()"),self.Timeout) - self.closed = False + self.start = False def Start(self): + self.start = True self.timer.start(1000) def Finish(self): + self.start = False self.highscore.Finish() self.level_info.Finish() def Timeout(self): - if not self.closed: + if self.start: self.highscore.Start() self.level_info.Start() - - def Close(self): - self.closed = True - self.Finish() - + class HighScore(QtCore.QObject): def __init__(self, topten, parent=None): QtCore.QObject.__init__(self, parent) self.topten = topten - + + self.hud_text = None + self.hud_bg = None + def Start(self): text = "%-2s%5s%-6s%5s%+6s"%("#", "", "Name", "", "Score") i=1 @@ -50,35 +51,41 @@ class HighScore(QtCore.QObject): i += 1 data = self.topten.GetData(i) rect = QtCore.QRect(QtCore.QPoint(60, 200), QtCore.QSize(24*20, (i+2)*30)) - self.bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200)) - dokk.Dokk().gl_win.AddHUDObject(self.bg) + self.hud_bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200)) + dokk.Dokk().gl_win.AddHUDObject(self.hud_bg) self.hud_text = RectTextHUDObject(text, rect=rect, time=-1, font=QtGui.QFont("Courier",20)) dokk.Dokk().gl_win.AddHUDObject(self.hud_text) def Finish(self): - dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text) - dokk.Dokk().gl_win.RemoveHUDObject(self.bg) + if self.hud_text: + dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text) + if self.hud_bg: + dokk.Dokk().gl_win.RemoveHUDObject(self.hud_bg) class LevelDetails(QtCore.QObject): def __init__(self, name, difficulty, parent=None): QtCore.QObject.__init__(self, parent) self.name = name self.difficulty = difficulty - + + self.hud_name_text = None + self.hud_diffi_text = None + self.hud_bg = None + def Start(self): name_len = len(self.name) xpos = dokk.Dokk().gl_win.Width()/2 - (name_len*30)/2 rect = QtCore.QRect(QtCore.QPoint(xpos, 55), QtCore.QSize(name_len*30, 105)) - self.bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200)) - dokk.Dokk().gl_win.AddHUDObject(self.bg) + self.hud_bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200)) + dokk.Dokk().gl_win.AddHUDObject(self.hud_bg) text = "%s\n"%self.name - self.name_text = RectTextHUDObject(text, rect=rect, time=-1, font=QtGui.QFont("Verdana",30)) + self.hud_name_text = RectTextHUDObject(text, rect=rect, time=-1, font=QtGui.QFont("Verdana",30)) text = "%s"%self.difficulty - self.diffi_text = TextHUDObject(text, QtCore.QPoint(dokk.Dokk().gl_win.Width()/2 - (len(text)*12)/2, 135), time=-1, font=QtGui.QFont("Courier",15)) - dokk.Dokk().gl_win.AddHUDObject(self.name_text) - dokk.Dokk().gl_win.AddHUDObject(self.diffi_text) + self.hud_diffi_text = TextHUDObject(text, QtCore.QPoint(dokk.Dokk().gl_win.Width()/2 - (len(text)*12)/2, 135), time=-1, font=QtGui.QFont("Courier",15)) + dokk.Dokk().gl_win.AddHUDObject(self.hud_name_text) + dokk.Dokk().gl_win.AddHUDObject(self.hud_diffi_text) def Finish(self): - dokk.Dokk().gl_win.RemoveHUDObject(self.diffi_text) - dokk.Dokk().gl_win.RemoveHUDObject(self.name_text) - dokk.Dokk().gl_win.RemoveHUDObject(self.bg) \ No newline at end of file + dokk.Dokk().gl_win.RemoveHUDObject(self.hud_diffi_text) + dokk.Dokk().gl_win.RemoveHUDObject(self.hud_name_text) + dokk.Dokk().gl_win.RemoveHUDObject(self.hud_bg) \ No newline at end of file diff --git a/examples/dokk/name_enter.py b/examples/dokk/name_enter.py index aba55ab8b40c6bdae427fe3aa6d0892b70712b6d..c0090a99328de53409c80fa893f7e8852354a181 100644 --- a/examples/dokk/name_enter.py +++ b/examples/dokk/name_enter.py @@ -13,9 +13,10 @@ class NameEnter(QtCore.QObject): QtCore.QObject.__init__(self, parent) self.spnav = gui.SpnavInput.GetQThread() self.spnav.start() - QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) - QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) - + + self.Reset() + + def Reset(self): self.letter_pos = 0 self.al_len = len(ALPHABET) self.letter_score = 0 @@ -25,8 +26,6 @@ class NameEnter(QtCore.QObject): self.name_len = len(self.name) self.name_score = 0 - self.int = 0 - def InputChanged(self, tx,ty,tz,rx,ry,rz): if(abs(tx) > abs(tz)): self.name_score += tx @@ -52,6 +51,15 @@ class NameEnter(QtCore.QObject): def GetName(self): return self.name + def Start(self): + self.Reset() + QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) + QtCore.QObject.connect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + + def Stop(self): + QtCore.QObject.disconnect(self.spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.InputChanged) + QtCore.QObject.disconnect(self.spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.ToggleInputMode) + def __SetLetterPos(self): self.letter_pos = self.letter_pos % self.al_len self.__SetName() @@ -74,9 +82,15 @@ class HUDNameInput(QtCore.QObject): QtCore.QObject.__init__(self, parent) self.ne = NameEnter() self.connect(self.ne,QtCore.SIGNAL("Changed()"),self.Update) - self.connect(self.ne,QtCore.SIGNAL("Finished()"),self.Finished) + self.connect(self.ne,QtCore.SIGNAL("Finished()"),self.Finish) self.huds = list() - + + self.hud_text = None + self.bg = None + + def Start(self): + self.ne.Start() + del(self.huds[:]) rect = QtCore.QRect(QtCore.QPoint(60, 60), QtCore.QSize(dokk.Dokk().gl_win.Width()-120, 220)) self.bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200)) dokk.Dokk().gl_win.AddHUDObject(self.bg) @@ -106,9 +120,15 @@ class HUDNameInput(QtCore.QObject): else: self.huds[i].color = QtGui.QColor(255,255,255) - def Finished(self): + def Stop(self): + self.ne.Stop() for hud in self.huds: dokk.Dokk().gl_win.RemoveHUDObject(hud) - dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text) - dokk.Dokk().gl_win.RemoveHUDObject(self.bg) + if self.hud_text: + dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text) + if self.bg: + dokk.Dokk().gl_win.RemoveHUDObject(self.bg) + + def Finish(self): + self.Stop() self.emit(QtCore.SIGNAL("Finished()")) \ No newline at end of file diff --git a/examples/dokk/spnav_input.py b/examples/dokk/spnav_input.py index 898411554b45caf5225f8806c1d75d1e70a996f2..82b873d747359a62570370f8d711ed5ac151eb5e 100644 --- a/examples/dokk/spnav_input.py +++ b/examples/dokk/spnav_input.py @@ -75,6 +75,8 @@ class SpnavInputDevice(QtCore.QObject): self.rot_hud.text= "Rotation Enabled: %s"%self.rot self.rot_hud.time = 2000 self.rot_hud.Reset() + elif button == 7: + self.level.Reset() elif button == 10: self.level.Finished() elif button == 11: @@ -82,4 +84,4 @@ class SpnavInputDevice(QtCore.QObject): elif button == 12: self.level.Solve() elif button == 13: - self.level.Reset() + self.level.ResetPos()