Skip to content
Snippets Groups Projects
Commit ad96201e authored by stefan's avatar stefan
Browse files

dokk (the docking game):

 -simplified hud usage
 -position reset on + key

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1956 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 2ba0249e
No related branches found
No related tags found
No related merge requests found
...@@ -44,6 +44,5 @@ class Dokk(object): ...@@ -44,6 +44,5 @@ class Dokk(object):
def _LoadLevel(self): def _LoadLevel(self):
if self._current_level is not None: if self._current_level is not None:
self._current_level.Close() self._current_level.Close()
self.gl_win.ClearHUDObjects()
self._current_level = level.Level(self.levels_[self._current_index]) self._current_level = level.Level(self.levels_[self._current_index])
self.gl_win.SetLevel(self._current_level) self.gl_win.SetLevel(self._current_level)
import os import os
import time import time
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from ost import io, gfx, qa, geom from ost import io, gfx, geom
from ligand import Ligand from ligand import Ligand
from surface import Surface from surface import Surface
from protein import Protein from protein import Protein
from score_updater import ScoreUpdater from score_updater import ScoreUpdater
from config import * from config import Config, TopTen
from dokk import Dokk from dokk import Dokk
from level_messages import LevelIntro from level_messages import LevelIntro
from level_messages import LevelEnd from level_messages import LevelEnd
...@@ -17,20 +17,17 @@ class Level(QtCore.QObject): ...@@ -17,20 +17,17 @@ class Level(QtCore.QObject):
def __init__(self, name, parent=None): def __init__(self, name, parent=None):
QtCore.QObject.__init__(self,parent) QtCore.QObject.__init__(self,parent)
self.name_=name self.name_=name
self.Load()
self.hud = None
self.endtime = 0 self.endtime = 0
self.stop_time = 0 self.stop_time = 0
self.Load()
self.LoadHUD()
self.timer = QtCore.QTimer() self.timer = QtCore.QTimer()
self.timer.setSingleShot(True) self.timer.setSingleShot(True)
self.connect(self.timer,QtCore.SIGNAL("timeout()"),self.Finished) 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) Dokk().gl_win.SetLockInput(True)
self._started = False self._started = False
self.emit(QtCore.SIGNAL("Stopped()")) self.emit(QtCore.SIGNAL("Stopped()"))
...@@ -52,6 +49,17 @@ class Level(QtCore.QObject): ...@@ -52,6 +49,17 @@ class Level(QtCore.QObject):
self.su = ScoreUpdater(self) self.su = ScoreUpdater(self)
self.transform_ = gfx.Scene().GetTransform() 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): def RotateAxis(self, axis, angle):
self.ligand.RotateAxis(axis, angle) self.ligand.RotateAxis(axis, angle)
...@@ -103,24 +111,30 @@ class Level(QtCore.QObject): ...@@ -103,24 +111,30 @@ class Level(QtCore.QObject):
def Reset(self): def Reset(self):
self.endtime = 0 self.endtime = 0
self.stop_time = 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() 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() self.ligand.Reset()
gfx.Scene().SetTransform(self.transform_) gfx.Scene().SetTransform(self.transform_)
gfx.Scene().SetCenter(self.surface.go.GetCenter()) gfx.Scene().SetCenter(self.surface.go.GetCenter())
gfx.Scene().RequestRedraw() gfx.Scene().RequestRedraw()
self.su.UpdateScores() self.UpdateScores()
def Solve(self): def Solve(self):
self.ligand.Solve() self.ligand.Solve()
gfx.Scene().SetTransform(self.transform_) gfx.Scene().SetTransform(self.transform_)
gfx.Scene().SetCenter(self.surface.go.GetCenter()) gfx.Scene().SetCenter(self.surface.go.GetCenter())
gfx.Scene().RequestRedraw() gfx.Scene().RequestRedraw()
self.su.UpdateScores() self.UpdateScores()
def Finished(self): def Finished(self):
self._started = False self._started = False
...@@ -128,26 +142,22 @@ class Level(QtCore.QObject): ...@@ -128,26 +142,22 @@ class Level(QtCore.QObject):
self.stop_time = time.time() self.stop_time = time.time()
Dokk().gl_win.SetLockInput(True) Dokk().gl_win.SetLockInput(True)
if self.GetRank() > 0: if self.GetRank() > 0:
self.le = LevelEnd(self.config.TT) self.hud_level_end_tt.Start()
else: else:
self.le = LevelEnd(self.config.NTT) self.hud_level_end_ntt.Start()
self.connect(self.le,QtCore.SIGNAL("Finished()"),self._FinishEnd)
self.le.Start()
def Begin(self): def Begin(self):
self.Reset() self.Reset()
self.su.UpdateScores() self.UpdateScores()
self.li.Start() self.hud_level_intro.Start()
self._started = True self._started = True
self.emit(QtCore.SIGNAL("Started()")) self.emit(QtCore.SIGNAL("Started()"))
def Close(self): def Close(self):
gfx.Scene().SetTransform(self.transform_) gfx.Scene().SetTransform(self.transform_)
self.emit(QtCore.SIGNAL("Closed()")) self.emit(QtCore.SIGNAL("Closed()"))
if self.le is not None:
self.le.Stop()
self.li.Stop()
self._started = False self._started = False
self.CleanHUD()
self.surface.Close() self.surface.Close()
self.protein.Close() self.protein.Close()
self.ligand.Close() self.ligand.Close()
...@@ -157,16 +167,15 @@ class Level(QtCore.QObject): ...@@ -157,16 +167,15 @@ class Level(QtCore.QObject):
Dokk().gl_win.SetLockInput(False) Dokk().gl_win.SetLockInput(False)
self.timer.start(int(self.config.Level["TIME"])) self.timer.start(int(self.config.Level["TIME"]))
self.endtime = float(time.time()+(int(self.config.Level["TIME"]))/1000.0) self.endtime = float(time.time()+(int(self.config.Level["TIME"]))/1000.0)
self.emit(QtCore.SIGNAL("Started()"))
def _FinishEnd(self): def _FinishEnd(self):
if bool(int(self.config.Level["SAVE"])) and self.GetRank()>0: if bool(int(self.config.Level["SAVE"])) and self.GetRank()>0:
self.hni = HUDNameInput() self.hud_name_input.Start()
self.connect(self.hni,QtCore.SIGNAL("Finished()"),self._FinishEnterName)
else: else:
self.Reset() self.Reset()
self.emit(QtCore.SIGNAL("Stopped()")) self.emit(QtCore.SIGNAL("Stopped()"))
def _FinishEnterName(self): def _FinishEnterName(self):
self.topten.SetValue(self.hni.GetName(),self.GetScore()) self.topten.SetValue(self.hud_name_input.GetName(),self.GetScore())
self.Reset() self.Reset()
\ No newline at end of file
self.emit(QtCore.SIGNAL("Stopped()"))
...@@ -13,34 +13,35 @@ class LevelInfo(QtCore.QObject): ...@@ -13,34 +13,35 @@ class LevelInfo(QtCore.QObject):
self.highscore = HighScore(level.topten) self.highscore = HighScore(level.topten)
self.level_info = LevelDetails(level.config.Level["NAME"],level.config.Level["DIFFICULTY"]) 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("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.connect(self.timer,QtCore.SIGNAL("timeout()"),self.Timeout)
self.closed = False self.start = False
def Start(self): def Start(self):
self.start = True
self.timer.start(1000) self.timer.start(1000)
def Finish(self): def Finish(self):
self.start = False
self.highscore.Finish() self.highscore.Finish()
self.level_info.Finish() self.level_info.Finish()
def Timeout(self): def Timeout(self):
if not self.closed: if self.start:
self.highscore.Start() self.highscore.Start()
self.level_info.Start() self.level_info.Start()
def Close(self):
self.closed = True
self.Finish()
class HighScore(QtCore.QObject): class HighScore(QtCore.QObject):
def __init__(self, topten, parent=None): def __init__(self, topten, parent=None):
QtCore.QObject.__init__(self, parent) QtCore.QObject.__init__(self, parent)
self.topten = topten self.topten = topten
self.hud_text = None
self.hud_bg = None
def Start(self): def Start(self):
text = "%-2s%5s%-6s%5s%+6s"%("#", "", "Name", "", "Score") text = "%-2s%5s%-6s%5s%+6s"%("#", "", "Name", "", "Score")
i=1 i=1
...@@ -50,14 +51,16 @@ class HighScore(QtCore.QObject): ...@@ -50,14 +51,16 @@ class HighScore(QtCore.QObject):
i += 1 i += 1
data = self.topten.GetData(i) data = self.topten.GetData(i)
rect = QtCore.QRect(QtCore.QPoint(60, 200), QtCore.QSize(24*20, (i+2)*30)) 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)) self.hud_bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200))
dokk.Dokk().gl_win.AddHUDObject(self.bg) dokk.Dokk().gl_win.AddHUDObject(self.hud_bg)
self.hud_text = RectTextHUDObject(text, rect=rect, time=-1, font=QtGui.QFont("Courier",20)) self.hud_text = RectTextHUDObject(text, rect=rect, time=-1, font=QtGui.QFont("Courier",20))
dokk.Dokk().gl_win.AddHUDObject(self.hud_text) dokk.Dokk().gl_win.AddHUDObject(self.hud_text)
def Finish(self): def Finish(self):
if self.hud_text:
dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text) dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text)
dokk.Dokk().gl_win.RemoveHUDObject(self.bg) if self.hud_bg:
dokk.Dokk().gl_win.RemoveHUDObject(self.hud_bg)
class LevelDetails(QtCore.QObject): class LevelDetails(QtCore.QObject):
def __init__(self, name, difficulty, parent=None): def __init__(self, name, difficulty, parent=None):
...@@ -65,20 +68,24 @@ class LevelDetails(QtCore.QObject): ...@@ -65,20 +68,24 @@ class LevelDetails(QtCore.QObject):
self.name = name self.name = name
self.difficulty = difficulty self.difficulty = difficulty
self.hud_name_text = None
self.hud_diffi_text = None
self.hud_bg = None
def Start(self): def Start(self):
name_len = len(self.name) name_len = len(self.name)
xpos = dokk.Dokk().gl_win.Width()/2 - (name_len*30)/2 xpos = dokk.Dokk().gl_win.Width()/2 - (name_len*30)/2
rect = QtCore.QRect(QtCore.QPoint(xpos, 55), QtCore.QSize(name_len*30, 105)) 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)) self.hud_bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200))
dokk.Dokk().gl_win.AddHUDObject(self.bg) dokk.Dokk().gl_win.AddHUDObject(self.hud_bg)
text = "%s\n"%self.name 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 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)) 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.name_text) dokk.Dokk().gl_win.AddHUDObject(self.hud_name_text)
dokk.Dokk().gl_win.AddHUDObject(self.diffi_text) dokk.Dokk().gl_win.AddHUDObject(self.hud_diffi_text)
def Finish(self): def Finish(self):
dokk.Dokk().gl_win.RemoveHUDObject(self.diffi_text) dokk.Dokk().gl_win.RemoveHUDObject(self.hud_diffi_text)
dokk.Dokk().gl_win.RemoveHUDObject(self.name_text) dokk.Dokk().gl_win.RemoveHUDObject(self.hud_name_text)
dokk.Dokk().gl_win.RemoveHUDObject(self.bg) dokk.Dokk().gl_win.RemoveHUDObject(self.hud_bg)
\ No newline at end of file \ No newline at end of file
...@@ -13,9 +13,10 @@ class NameEnter(QtCore.QObject): ...@@ -13,9 +13,10 @@ class NameEnter(QtCore.QObject):
QtCore.QObject.__init__(self, parent) QtCore.QObject.__init__(self, parent)
self.spnav = gui.SpnavInput.GetQThread() self.spnav = gui.SpnavInput.GetQThread()
self.spnav.start() 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.letter_pos = 0
self.al_len = len(ALPHABET) self.al_len = len(ALPHABET)
self.letter_score = 0 self.letter_score = 0
...@@ -25,8 +26,6 @@ class NameEnter(QtCore.QObject): ...@@ -25,8 +26,6 @@ class NameEnter(QtCore.QObject):
self.name_len = len(self.name) self.name_len = len(self.name)
self.name_score = 0 self.name_score = 0
self.int = 0
def InputChanged(self, tx,ty,tz,rx,ry,rz): def InputChanged(self, tx,ty,tz,rx,ry,rz):
if(abs(tx) > abs(tz)): if(abs(tx) > abs(tz)):
self.name_score += tx self.name_score += tx
...@@ -52,6 +51,15 @@ class NameEnter(QtCore.QObject): ...@@ -52,6 +51,15 @@ class NameEnter(QtCore.QObject):
def GetName(self): def GetName(self):
return self.name 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): def __SetLetterPos(self):
self.letter_pos = self.letter_pos % self.al_len self.letter_pos = self.letter_pos % self.al_len
self.__SetName() self.__SetName()
...@@ -74,9 +82,15 @@ class HUDNameInput(QtCore.QObject): ...@@ -74,9 +82,15 @@ class HUDNameInput(QtCore.QObject):
QtCore.QObject.__init__(self, parent) QtCore.QObject.__init__(self, parent)
self.ne = NameEnter() self.ne = NameEnter()
self.connect(self.ne,QtCore.SIGNAL("Changed()"),self.Update) 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.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)) 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)) self.bg = RectHUDObject(-1,rect, bg_color=QtGui.QColor(128,128,128,200))
dokk.Dokk().gl_win.AddHUDObject(self.bg) dokk.Dokk().gl_win.AddHUDObject(self.bg)
...@@ -106,9 +120,15 @@ class HUDNameInput(QtCore.QObject): ...@@ -106,9 +120,15 @@ class HUDNameInput(QtCore.QObject):
else: else:
self.huds[i].color = QtGui.QColor(255,255,255) self.huds[i].color = QtGui.QColor(255,255,255)
def Finished(self): def Stop(self):
self.ne.Stop()
for hud in self.huds: for hud in self.huds:
dokk.Dokk().gl_win.RemoveHUDObject(hud) dokk.Dokk().gl_win.RemoveHUDObject(hud)
if self.hud_text:
dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text) dokk.Dokk().gl_win.RemoveHUDObject(self.hud_text)
if self.bg:
dokk.Dokk().gl_win.RemoveHUDObject(self.bg) dokk.Dokk().gl_win.RemoveHUDObject(self.bg)
def Finish(self):
self.Stop()
self.emit(QtCore.SIGNAL("Finished()")) self.emit(QtCore.SIGNAL("Finished()"))
\ No newline at end of file
...@@ -75,6 +75,8 @@ class SpnavInputDevice(QtCore.QObject): ...@@ -75,6 +75,8 @@ class SpnavInputDevice(QtCore.QObject):
self.rot_hud.text= "Rotation Enabled: %s"%self.rot self.rot_hud.text= "Rotation Enabled: %s"%self.rot
self.rot_hud.time = 2000 self.rot_hud.time = 2000
self.rot_hud.Reset() self.rot_hud.Reset()
elif button == 7:
self.level.Reset()
elif button == 10: elif button == 10:
self.level.Finished() self.level.Finished()
elif button == 11: elif button == 11:
...@@ -82,4 +84,4 @@ class SpnavInputDevice(QtCore.QObject): ...@@ -82,4 +84,4 @@ class SpnavInputDevice(QtCore.QObject):
elif button == 12: elif button == 12:
self.level.Solve() self.level.Solve()
elif button == 13: elif button == 13:
self.level.Reset() self.level.ResetPos()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment