diff --git a/src/GuitarScene.py b/src/GuitarScene.py index 629a06545..07d0dd199 100644 --- a/src/GuitarScene.py +++ b/src/GuitarScene.py @@ -2268,6 +2268,7 @@ def resetVariablesToDefaults(self): for player in self.playerList: player.reset() self.stage.reset() + self.stage.rockmeter.reset() self.enteredCode = [] self.jurgPlayer = [False for i in self.playerList] #Jurgen hasn't played the restarted song =P diff --git a/src/Rockmeter.py b/src/Rockmeter.py index 53fbe0cf1..ac1fecb28 100644 --- a/src/Rockmeter.py +++ b/src/Rockmeter.py @@ -121,8 +121,8 @@ def boardWidth(self, x): return player.boardWidth / math.sqrt((self.stage.scene.camera.origin[1] + x)**2+((self.stage.scene.camera.origin[2] + x)-0.5)**2) * scaleCoef def __init__(self, stage, section): - self.stage = stage #The rockmeter - self.engine = stage.engine #Game Engine + self.stage = stage #The rockmeter + self.engine = stage.engine #Game Engine self.config = stage.config #the rockmeter.ini self.section = section #the section of the rockmeter.ini involving this layer @@ -416,6 +416,27 @@ def __init__(self, layer, section): self.condition = True + def smoothstep(self, min, max, x): + if x < min: + return 0 + if x > max: + return 1 + def f(x): + return -2 * x**3 + 3*x**2 + return f((x - min) / (max - min)) + + def triggerPick(self): + if not self.stage.lastPickPos: + return 0.0 + t = position - self.stage.lastPickPos + return (1.0 - self.smoothstep(0, 500.0, t)) + + def triggerMiss(self): + if not self.stage.lastMissPos: + return 0.0 + t = position - self.stage.lastMissPos + return (1.0 - self.smoothstep(0, 500.0, t)) + def update(self): pass @@ -850,6 +871,12 @@ def __init__(self, guitarScene, configFileName, coOp = False): self.createImage(self.section, i) break + self.reset() + + def reset(self): + self.playedNotes = [] + self.averageNotes = [0.0] + #adds a layer to the rockmeter's list def addLayer(self, layer, number, shared = False): if shared: @@ -991,7 +1018,16 @@ def updateVars(self, playerNum): #force bassgroove to false if it's not enabled if not scene.bassGrooveEnabled: bassgroove = False - + + def triggerPick(self, pos, notes): + if notes: + self.lastPickPos = pos + self.playedNotes = self.playedNotes[-3:] + [sum(notes) / float(len(notes))] + self.averageNotes[-1] = sum(self.playedNotes) / float(len(self.playedNotes)) + + def triggerMiss(self, pos): + self.lastMissPos = pos + def render(self, visibility): self.updateTime() diff --git a/src/Stage.py b/src/Stage.py index 19e6be3fc..63411e896 100644 --- a/src/Stage.py +++ b/src/Stage.py @@ -569,10 +569,12 @@ def triggerPick(self, pos, notes): self.lastPickPos = pos self.playedNotes = self.playedNotes[-3:] + [sum(notes) / float(len(notes))] self.averageNotes[-1] = sum(self.playedNotes) / float(len(self.playedNotes)) - + self.rockmeter.triggerPick(pos, notes) + def triggerMiss(self, pos): self.lastMissPos = pos - + self.rockmeter.triggerMiss(pos) + def triggerQuarterBeat(self, pos, quarterBeat): self.lastQuarterBeatPos = pos self.quarterBeat = quarterBeat