From 6e98678e9a0b03c3dbbca303d9fc40e3a74029a8 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Thu, 8 Apr 2010 12:47:42 +0000 Subject: [PATCH] Dokk (the docking game): -Added name input screen for top ten git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1944 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- examples/dokk/datafiles/thrombin/level.ini | 5 +- examples/dokk/datafiles/thrombin/top_ten.ini | 4 + examples/dokk/datafiles/thrombinNoH/level.ini | 26 ++-- .../dokk/datafiles/thrombinNoH/top_ten.ini | 28 +++++ examples/dokk/hud.py | 31 +++-- examples/dokk/name_enter.py | 114 ++++++++++++++++++ 6 files changed, 178 insertions(+), 30 deletions(-) create mode 100644 examples/dokk/name_enter.py diff --git a/examples/dokk/datafiles/thrombin/level.ini b/examples/dokk/datafiles/thrombin/level.ini index db9c25972..b8486b580 100644 --- a/examples/dokk/datafiles/thrombin/level.ini +++ b/examples/dokk/datafiles/thrombin/level.ini @@ -2,6 +2,7 @@ NAME: Thrombin DIFFICULTY: Medium TIME: 60000 +SAVE: 1 [Intro] TEXTTIME: 3000 @@ -125,4 +126,6 @@ FRAMESKIP: 12 [Goal] RMSD: 0 -SAVE: True + +[Name] +TEXT: Bitte geben Sie ihr K�rzel ein: diff --git a/examples/dokk/datafiles/thrombin/top_ten.ini b/examples/dokk/datafiles/thrombin/top_ten.ini index e69de29bb..d0f47e95f 100644 --- a/examples/dokk/datafiles/thrombin/top_ten.ini +++ b/examples/dokk/datafiles/thrombin/top_ten.ini @@ -0,0 +1,4 @@ +[1] +score = 1.39103358587 +name = STU + diff --git a/examples/dokk/datafiles/thrombinNoH/level.ini b/examples/dokk/datafiles/thrombinNoH/level.ini index 1a7bc3088..1df706dbf 100644 --- a/examples/dokk/datafiles/thrombinNoH/level.ini +++ b/examples/dokk/datafiles/thrombinNoH/level.ini @@ -2,6 +2,7 @@ NAME: Thrombin DIFFICULTY: Medium TIME: 60000 +SAVE: 1 [Intro] TEXTTIME: 3000 @@ -70,23 +71,17 @@ TEXTCOLORRED: 255 TEXTCOLORGREEN: 0 TEXTCOLORBLUE: 0 TEXTSIZE: 16 -TEXT_COUNT: 2 +TEXT_COUNT: 1 -TEXT1: Bravo, sie wurden $RANKer! -TEXTTIME1: 4000 +TEXT1: Bravo, Sie wurden $RANKer! + RMSD: $RMSD + Zeitmalus: $TIMEMALUS + Endergebnis: $SCORE +TEXTTIME1: 2000 TEXTCOLORRED1: 0 TEXTCOLORGREEN1: 255 TEXTCOLORBLUE1: 64 -TEXTSIZE1: 100 - -TEXT2: RMSD: $RMSD - Zeitmalus: $TIMEMALUS - Endergebnis: $SCORE -TEXTTIME2: 8000 -TEXTCOLORRED2: 0 -TEXTCOLORGREEN2: 255 -TEXTCOLORBLUE2: 0 -TEXTSIZE2: 100 +TEXTSIZE1: 80 [Box] XMIN:-25 @@ -108,6 +103,5 @@ ROTZ:0.3 [Score] FRAMESKIP: 5 -[Goal] -RMSD: 0 -SAVE: True +[Name] +TEXT: Bitte geben Sie ihr K�rzel ein: diff --git a/examples/dokk/datafiles/thrombinNoH/top_ten.ini b/examples/dokk/datafiles/thrombinNoH/top_ten.ini index e69de29bb..61f8003ff 100644 --- a/examples/dokk/datafiles/thrombinNoH/top_ten.ini +++ b/examples/dokk/datafiles/thrombinNoH/top_ten.ini @@ -0,0 +1,28 @@ +[1] +score = 0.5437265475591 +name = STU + +[3] +score = 1.00718728701 +name = SAA + +[2] +score = 1.0 +name = 2AA + +[5] +score = 1.51238689423 +name = TOB + +[4] +score = 1.08293996255 +name = STU + +[7] +score = 59.7783283631 +name = STU + +[6] +score = 2.04023006757 +name = STU + diff --git a/examples/dokk/hud.py b/examples/dokk/hud.py index d5ad7a7d2..31319fa6d 100644 --- a/examples/dokk/hud.py +++ b/examples/dokk/hud.py @@ -36,12 +36,14 @@ class HUDObject(QObject): self.timer = QTimer() self.timer.setSingleShot(True) self.hud = None + self.endtime = None QObject.connect(self.timer, SIGNAL("timeout()"), self.Timeout) def Appended(self, hud): self.hud = hud - self.timer.start(self.time) - self.endtime = float(time.time()+(self.time)/1000.0) + if self.time >= 0: + self.timer.start(self.time) + self.endtime = float(time.time()+(self.time)/1000.0) def Timeout(self): self.timer.stop() @@ -64,9 +66,10 @@ class TextHUDObject(HUDObject): self.font = font def Paint(self, painter): - rem_time = (self.endtime-float(time.time()))*1000.0 - if rem_time > 0: - self.color.setAlpha((rem_time/self.time)*255) + if self.endtime is not None: + rem_time = (self.endtime-float(time.time()))*1000.0 + if rem_time > 0: + self.color.setAlpha((rem_time/self.time)*255) painter.setPen(QPen(self.color, Qt.SolidLine)) painter.setFont(self.font) if self.pos is not None: @@ -84,9 +87,10 @@ class RectTextHUDObject(HUDObject): self.font = font def Paint(self, painter): - rem_time = (self.endtime-float(time.time()))*1000.0 - if rem_time > 0: - self.color.setAlpha((rem_time/self.time)*255) + if self.endtime is not None: + rem_time = (self.endtime-float(time.time()))*1000.0 + if rem_time > 0: + self.color.setAlpha((rem_time/self.time)*255) painter.setPen(QPen(self.color, Qt.SolidLine)) painter.setFont(self.font) painter.drawText(self.rect, self.align, self.text) @@ -100,11 +104,12 @@ class RectHUDObject(HUDObject): self.border_color = border_color def Paint(self, painter): - rem_time = (self.endtime-float(time.time()))*1000.0 - if self.fade and rem_time > 0: - alpha = (rem_time/self.time)*255 - self.bg_color.setAlpha(alpha) - self.border_color.setAlpha(alpha) + if self.fade: + rem_time = (self.endtime-float(time.time()))*1000.0 + if rem_time >0: + alpha = (rem_time/self.time)*255 + self.bg_color.setAlpha(alpha) + self.border_color.setAlpha(alpha) painter.setPen(self.border_color) painter.setBrush(self.bg_color) painter.drawRect(self.rect) diff --git a/examples/dokk/name_enter.py b/examples/dokk/name_enter.py new file mode 100644 index 000000000..aba55ab8b --- /dev/null +++ b/examples/dokk/name_enter.py @@ -0,0 +1,114 @@ +import dokk +from PyQt4 import QtCore, QtGui +from hud import * +from ost import gui + + +ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'] +LETTER_BREAK = 3000 +NAME_BREAK = 8000 + +class NameEnter(QtCore.QObject): + def __init__(self, parent=None): + 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.letter_pos = 0 + self.al_len = len(ALPHABET) + self.letter_score = 0 + + self.name = "AAA" + self.name_pos = 0 + 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 + if(self.name_score > NAME_BREAK): + self.name_pos +=1 + self.__SetNamePos() + elif(self.name_score < -NAME_BREAK): + self.name_pos -=1 + self.__SetNamePos() + else: + self.letter_score += tz + if(self.letter_score > LETTER_BREAK): + self.letter_pos +=1 + self.__SetLetterPos() + elif(self.letter_score < -LETTER_BREAK): + self.letter_pos -=1 + self.__SetLetterPos() + + def ToggleInputMode(self, button): + if button == 10: + self.emit(QtCore.SIGNAL("Finished()")) + + def GetName(self): + return self.name + + def __SetLetterPos(self): + self.letter_pos = self.letter_pos % self.al_len + self.__SetName() + self.letter_score = 0 + + def __SetNamePos(self): + self.name_pos = self.name_pos % self.name_len + for i in range(0,self.al_len): + if ALPHABET[i] == self.name[self.name_pos]: + self.letter_pos = i + self.name_score = 0 + self.emit(QtCore.SIGNAL("Changed()")) + + def __SetName(self): + self.name = self.name[0:self.name_pos] + ALPHABET[self.letter_pos] + self.name[self.name_pos+1:] + self.emit(QtCore.SIGNAL("Changed()")) + +class HUDNameInput(QtCore.QObject): + def __init__(self, parent=None): + 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.huds = list() + + 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) + self.hud_text = RectTextHUDObject(dokk.Dokk().GetLevel().config.Name["TEXT"], rect=rect, time=-1,font = QtGui.QFont("Verdana",30)) + dokk.Dokk().gl_win.AddHUDObject(self.hud_text) + + font = QtGui.QFont("Courier", 30) + xpos = (dokk.Dokk().gl_win.Width()/2) - ((len(self.ne.GetName())*30)/2) + for i in range(0,len(self.ne.GetName())): + hud_obj = TextHUDObject(self.ne.GetName()[i], QtCore.QPoint(xpos,250), -1,font = font) + if self.ne.name_pos == i: + hud_obj.color = QtGui.QColor(255,255,0) + else: + hud_obj.color = QtGui.QColor(255,255,255) + self.huds.append(hud_obj) + dokk.Dokk().gl_win.AddHUDObject(hud_obj) + xpos += 30 + + def GetName(self): + return self.ne.GetName() + + def Update(self): + for i in range(0,len(self.ne.GetName())): + self.huds[i].text = self.ne.GetName()[i] + if self.ne.name_pos == i: + self.huds[i].color = QtGui.QColor(255,255,0) + else: + self.huds[i].color = QtGui.QColor(255,255,255) + + def Finished(self): + 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) + self.emit(QtCore.SIGNAL("Finished()")) \ No newline at end of file -- GitLab