From 100379ccdba93858ee861af2e6831a31e868a54d Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Mon, 12 Apr 2010 12:14:18 +0000
Subject: [PATCH] dokk (the docking game):  - Moving Camera when game not
 started  - Added Goal to game

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1969 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 examples/dokk/datafiles/dengue/level.ini      |  3 +-
 examples/dokk/datafiles/dengue/top_ten.ini    |  4 +++
 examples/dokk/datafiles/glyoxalase/level.ini  |  3 +-
 .../dokk/datafiles/glyoxalase/top_ten.ini     |  4 +++
 examples/dokk/datafiles/retinol/level.ini     |  5 ++--
 examples/dokk/datafiles/thrombin/level.ini    |  7 +++--
 examples/dokk/datafiles/thrombin/top_ten.ini  |  4 +++
 examples/dokk/datafiles/thrombinNoH/level.ini |  3 +-
 examples/dokk/glwin.py                        | 30 +++++++++----------
 examples/dokk/level.py                        |  9 ++++++
 examples/dokk/level_info.py                   | 11 +++++--
 examples/dokk/spnav_input.py                  | 10 +++----
 12 files changed, 62 insertions(+), 31 deletions(-)

diff --git a/examples/dokk/datafiles/dengue/level.ini b/examples/dokk/datafiles/dengue/level.ini
index 2dc60d754..3e666df05 100644
--- a/examples/dokk/datafiles/dengue/level.ini
+++ b/examples/dokk/datafiles/dengue/level.ini
@@ -3,6 +3,7 @@ NAME: Dengue Virus
 DIFFICULTY: Easy
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/dengue/top_ten.ini b/examples/dokk/datafiles/dengue/top_ten.ini
index e69de29bb..c9383bdcb 100644
--- a/examples/dokk/datafiles/dengue/top_ten.ini
+++ b/examples/dokk/datafiles/dengue/top_ten.ini
@@ -0,0 +1,4 @@
+[1]
+score = 2.11296811104
+name = STU
+
diff --git a/examples/dokk/datafiles/glyoxalase/level.ini b/examples/dokk/datafiles/glyoxalase/level.ini
index 00bff0f11..c971889d6 100644
--- a/examples/dokk/datafiles/glyoxalase/level.ini
+++ b/examples/dokk/datafiles/glyoxalase/level.ini
@@ -3,6 +3,7 @@ NAME: Glyoxalase
 DIFFICULTY: Chuck Norris like..
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/glyoxalase/top_ten.ini b/examples/dokk/datafiles/glyoxalase/top_ten.ini
index e69de29bb..4206ef2bc 100644
--- a/examples/dokk/datafiles/glyoxalase/top_ten.ini
+++ b/examples/dokk/datafiles/glyoxalase/top_ten.ini
@@ -0,0 +1,4 @@
+[1]
+score = 2.234915483
+name = STU
+
diff --git a/examples/dokk/datafiles/retinol/level.ini b/examples/dokk/datafiles/retinol/level.ini
index bb8537a0a..a6f78d513 100644
--- a/examples/dokk/datafiles/retinol/level.ini
+++ b/examples/dokk/datafiles/retinol/level.ini
@@ -1,8 +1,9 @@
 [Level]
 NAME: Retinol Bindung
-DIFFICULTY: Chuck Norris like..
+DIFFICULTY: Hard
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/datafiles/thrombin/level.ini b/examples/dokk/datafiles/thrombin/level.ini
index 82b8c9afa..7541f228f 100644
--- a/examples/dokk/datafiles/thrombin/level.ini
+++ b/examples/dokk/datafiles/thrombin/level.ini
@@ -3,6 +3,7 @@ NAME: Thrombin
 DIFFICULTY: Medium
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -18,10 +19,10 @@ TEXTTIME1: 5000
 TEXT2: Mit diesem Spiel wird Ihnen demonstriert wie ein...
 TEXTTIME2: 1000
 
-TEXT3: Sie k�nnen mit dem 3D-Input Device den Liganden sowohl drehen als auch verschieben.
+TEXT3: Sie k�nnen mit dem 3D-Input Device den Liganden sowohl drehen als auch verschieben.
 TEXTTIME3: 3000
  
-TEXT4: Falls Fragen bestehen, k�nnen Sie sich gerne an eine unserer Fachkr�fte wenden.
+TEXT4: Falls Fragen bestehen, k�nnen Sie sich gerne an eine unserer Fachkr�fte wenden.
 TEXTTIME4: 3000
 
 TEXT5: So nun kann es los gehen.
@@ -128,4 +129,4 @@ FRAMESKIP: 12
 RMSD: 0
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+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..fd278ffe3 100644
--- a/examples/dokk/datafiles/thrombin/top_ten.ini
+++ b/examples/dokk/datafiles/thrombin/top_ten.ini
@@ -0,0 +1,4 @@
+[1]
+score = 45.1562461853
+name = GAA
+
diff --git a/examples/dokk/datafiles/thrombinNoH/level.ini b/examples/dokk/datafiles/thrombinNoH/level.ini
index db51d6dfb..fae1fcdf4 100644
--- a/examples/dokk/datafiles/thrombinNoH/level.ini
+++ b/examples/dokk/datafiles/thrombinNoH/level.ini
@@ -3,6 +3,7 @@ NAME: Thrombin no H
 DIFFICULTY: Mittelschwer
 TIME: 60000
 SAVE: 1
+GOAL: 0.0
 
 [Intro]
 TEXTTIME: 3000
@@ -104,4 +105,4 @@ ROTZ:0.3
 FRAMESKIP: 5
 
 [Name]
-TEXT: Bitte geben Sie ihr K�rzel ein:
+TEXT: Bitte geben Sie ihr K�rzel ein:
diff --git a/examples/dokk/glwin.py b/examples/dokk/glwin.py
index f57b52cd5..2f3ade599 100644
--- a/examples/dokk/glwin.py
+++ b/examples/dokk/glwin.py
@@ -62,6 +62,7 @@ class DokkGLCanvas(QGLWidget):
     painter.drawText(QPoint(self.width()-100, 20), "%.0f seconds left" % self.dokk.GetLevel().GetRemainingTime())
     if self.hud is not None:
       self.hud.Paint(painter)
+    self.dokk.GetLevel().CheckSolved()
       
   def resizeGL(self, w, h):
     gfx.Scene().Resize(w, h)
@@ -70,9 +71,9 @@ class DokkGLCanvas(QGLWidget):
     self.last_point_=QPoint(event.x(), event.y())
 
   def mouseMoveEvent(self, event):
+    delta=QPoint(event.x(), event.y())-self.last_point_
+    self.last_point_=QPoint(event.x(), event.y())
     if not self._lock_input:
-      delta=QPoint(event.x(), event.y())-self.last_point_
-      self.last_point_=QPoint(event.x(), event.y())
       if event.buttons() & Qt.LeftButton:
         tf=gfx.Scene().GetTransform()      
         if event.modifiers() & Qt.ShiftModifier:
@@ -88,23 +89,22 @@ class DokkGLCanvas(QGLWidget):
             self.dokk.GetLevel().RotateAxis(tf.GetRot().GetRow(1), delta.x()*0.005)
         self.dokk.GetLevel().UpdateScores()
         self.update()
-      elif event.buttons() & Qt.RightButton:
-        if delta.y()!=0:
-          gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
-                                           gfx.INPUT_COMMAND_ROTX, delta.y()*0.5),
-                            False)
-        if delta.x()!=0:
-          gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
-                                           gfx.INPUT_COMMAND_ROTY, delta.x()*0.5),
-                            False)
-        self.update()
+    if event.buttons() & Qt.RightButton:
+      if delta.y()!=0:
+        gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
+                                         gfx.INPUT_COMMAND_ROTX, delta.y()*0.5),
+                          False)
+      if delta.x()!=0:
+        gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE,
+                                         gfx.INPUT_COMMAND_ROTY, delta.x()*0.5),
+                          False)
+      self.update()
   def mouseDoubleClickEvent(self, event):
     if not self._lock_input:
       self.dokk.GetLevel().SetPivot(event.x(), self.height()-event.y())
   def wheelEvent(self, event):
-    if not self._lock_input:
-      self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0,gfx.TRANSFORM_VIEW,
-                0.1*(-event.delta()))
+    self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0,gfx.TRANSFORM_VIEW,
+              0.1*(-event.delta()))
 
 
   def OnTransform(self,com, indx, trg, val):
diff --git a/examples/dokk/level.py b/examples/dokk/level.py
index 76b4bdb30..edbede190 100644
--- a/examples/dokk/level.py
+++ b/examples/dokk/level.py
@@ -111,6 +111,7 @@ class Level(QtCore.QObject):
   def Reset(self):
     self.endtime = 0
     self.stop_time = 0
+    self._started = False
     self.timer.stop()
     self.CleanHUD()
     self.ResetPos()
@@ -164,6 +165,14 @@ class Level(QtCore.QObject):
     self.protein.Close()
     self.ligand.Close()
 
+  def CheckSolved(self):
+    goal = float(self.config.Level["GOAL"])
+    if self.GetRMSD()< goal:
+      self.Finished()
+    
+  def IsStarted(self):
+    return self._started
+  
   def _IntroEnd(self):
     if self._started:
       Dokk().gl_win.SetLockInput(False)
diff --git a/examples/dokk/level_info.py b/examples/dokk/level_info.py
index 934a4beae..759147ef1 100644
--- a/examples/dokk/level_info.py
+++ b/examples/dokk/level_info.py
@@ -11,7 +11,10 @@ class LevelInfo(QtCore.QObject):
     self.timer = QtCore.QTimer()
     self.timer.setSingleShot(True)
     
-    self.highscore = HighScore(level.topten)
+    if bool(int(level.config.Level["SAVE"])):
+      self.highscore = HighScore(level.topten)
+    else:
+      self.highscore = None
     self.level_info = LevelDetails(level.config.Level["NAME"],level.config.Level["DIFFICULTY"])
     self.connect(level,QtCore.SIGNAL("Started()"),self.Finish)
     self.connect(level,QtCore.SIGNAL("Stopped()"),self.Start)
@@ -25,12 +28,14 @@ class LevelInfo(QtCore.QObject):
     
   def Finish(self):
     self.start = False
-    self.highscore.Finish()
+    if self.highscore:
+      self.highscore.Finish()
     self.level_info.Finish()
     
   def Timeout(self):
     if self.start:
-      self.highscore.Start()
+      if self.highscore:
+        self.highscore.Start()
       self.level_info.Start()
    
       
diff --git a/examples/dokk/spnav_input.py b/examples/dokk/spnav_input.py
index b0eed4b54..d079fe6c4 100644
--- a/examples/dokk/spnav_input.py
+++ b/examples/dokk/spnav_input.py
@@ -66,7 +66,11 @@ class SpnavInputDevice(QtCore.QObject):
       dokk.Dokk().NextLevel()
     elif button == 6:
       QtGui.QApplication.exit()
-        
+    elif button == 13:
+      self.level.ResetPos()
+    elif button == 12 and not self.level.IsStarted():
+      self.level.Solve()
+    
     if (not self._lock_input):
       if button == 0:
         self.trans = not self.trans
@@ -84,7 +88,3 @@ class SpnavInputDevice(QtCore.QObject):
         self.level.Finished()
       elif button == 11:
         self.level.Finished()
-      elif button == 12:
-        self.level.Solve()
-      elif button == 13:
-        self.level.ResetPos()
-- 
GitLab