unfiltered ticks; success indicator
This commit is contained in:
parent
7cdca64d51
commit
ac8c9089b8
|
@ -2,9 +2,9 @@ from GameChild import GameChild
|
|||
|
||||
class Animation(GameChild):
|
||||
|
||||
def __init__(self, parent, method=None, interval=None):
|
||||
def __init__(self, parent, method=None, interval=None, unfiltered=False):
|
||||
GameChild.__init__(self, parent)
|
||||
self.time_filter = self.get_game().time_filter
|
||||
self.unfiltered = unfiltered
|
||||
self.default_method = method or self.build_frame
|
||||
self.accounts = {}
|
||||
self.register(self.default_method, interval=interval)
|
||||
|
@ -20,7 +20,7 @@ class Animation(GameChild):
|
|||
interval = kwargs["interval"]
|
||||
for method in args:
|
||||
if method not in self.accounts:
|
||||
self.accounts[method] = Account(interval, self.time_filter)
|
||||
self.accounts[method] = Account(interval, self)
|
||||
else:
|
||||
self.accounts[method].set_interval(interval)
|
||||
|
||||
|
@ -65,8 +65,9 @@ class Animation(GameChild):
|
|||
|
||||
class Account:
|
||||
|
||||
def __init__(self, interval, time_filter):
|
||||
self.time_filter = time_filter
|
||||
def __init__(self, interval, animation):
|
||||
self.animation = animation
|
||||
self.time_filter = animation.get_game().time_filter
|
||||
self.set_interval(interval)
|
||||
self.set_delay(0)
|
||||
self.set_play_once(False)
|
||||
|
@ -75,7 +76,7 @@ class Account:
|
|||
self.halt()
|
||||
|
||||
def set_interval(self, interval):
|
||||
if isinstance(interval, int):
|
||||
if isinstance(interval, int) or isinstance(interval, str):
|
||||
interval = [interval]
|
||||
self.interval = interval
|
||||
|
||||
|
@ -97,7 +98,10 @@ class Account:
|
|||
|
||||
def update(self):
|
||||
if self.playing:
|
||||
ticks = self.time_filter.get_ticks()
|
||||
if self.animation.unfiltered:
|
||||
ticks = self.time_filter.get_unfiltered_ticks()
|
||||
else:
|
||||
ticks = self.time_filter.get_ticks()
|
||||
self.update_delay(ticks)
|
||||
if not self.delay:
|
||||
interval = self.interval
|
||||
|
|
|
@ -52,6 +52,8 @@ class Game(GameChild):
|
|||
self.delegate.dispatch()
|
||||
if not self.interpolator.is_gui_active():
|
||||
self.update()
|
||||
else:
|
||||
self.interpolator.gui.update()
|
||||
self.video_recorder.update()
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -7,6 +7,7 @@ from pygame.locals import *
|
|||
|
||||
from GameChild import GameChild
|
||||
from Sprite import Sprite
|
||||
from Animation import Animation
|
||||
|
||||
class Interpolator(list, GameChild):
|
||||
|
||||
|
@ -21,7 +22,11 @@ class Interpolator(list, GameChild):
|
|||
config = self.get_configuration()
|
||||
if config.has_section("interpolate"):
|
||||
for name, value in config.get_section("interpolate").iteritems():
|
||||
self.append(Nodeset(name, value))
|
||||
self.add_nodeset(name, value)
|
||||
|
||||
def add_nodeset(self, name, value, method=None):
|
||||
self.append(Nodeset(name, value, method))
|
||||
return len(self) - 1
|
||||
|
||||
def is_gui_active(self):
|
||||
return self.gui_enabled and self.gui.active
|
||||
|
@ -37,8 +42,8 @@ class Nodeset(list):
|
|||
if isinstance(nodes, str):
|
||||
self.parse_raw(nodes)
|
||||
else:
|
||||
self.parse_list(nodes)
|
||||
self.interpolation_method = method
|
||||
self.parse_list(nodes)
|
||||
self.set_splines()
|
||||
|
||||
def parse_raw(self, raw):
|
||||
|
@ -175,21 +180,24 @@ class LinearSpline(Spline):
|
|||
return self.m * (t - self.x) + self.y
|
||||
|
||||
|
||||
class GUI(GameChild):
|
||||
class GUI(Animation):
|
||||
|
||||
B_DUPLICATE, B_WRITE, B_DELETE, B_LINEAR, B_CUBIC = range(5)
|
||||
|
||||
def __init__(self, parent):
|
||||
GameChild.__init__(self, parent)
|
||||
Animation.__init__(self, parent, unfiltered=True)
|
||||
self.audio = self.get_audio()
|
||||
self.display = self.get_game().display
|
||||
self.display_surface = self.get_display_surface()
|
||||
self.time_filter = self.get_game().time_filter
|
||||
self.delegate = self.get_delegate()
|
||||
self.success_indicator_active = True
|
||||
self.success_indicator_blink_count = 0
|
||||
self.load_configuration()
|
||||
self.font = Font(None, self.label_size)
|
||||
self.prompt = Prompt(self)
|
||||
self.set_background()
|
||||
self.set_success_indicator()
|
||||
self.set_plot_rect()
|
||||
self.set_marker_frame()
|
||||
self.set_buttons()
|
||||
|
@ -200,6 +208,7 @@ class GUI(GameChild):
|
|||
self.subscribe(self.respond_to_command)
|
||||
self.subscribe(self.respond_to_mouse_down, MOUSEBUTTONDOWN)
|
||||
self.subscribe(self.respond_to_key, KEYDOWN)
|
||||
self.register(self.show_success_indicator, interval=100)
|
||||
|
||||
def load_configuration(self):
|
||||
config = self.get_configuration("interpolator-gui")
|
||||
|
@ -216,6 +225,13 @@ class GUI(GameChild):
|
|||
surface.fill((0, 0, 0))
|
||||
self.background = surface
|
||||
|
||||
def set_success_indicator(self):
|
||||
surface = Surface((10, 10))
|
||||
surface.fill((0, 255, 0))
|
||||
rect = surface.get_rect()
|
||||
rect.topleft = self.display_surface.get_rect().topleft
|
||||
self.success_indicator, self.success_indicator_rect = surface, rect
|
||||
|
||||
def set_plot_rect(self):
|
||||
margin = self.margin
|
||||
self.plot_rect = self.display_surface.get_rect().inflate(-margin,
|
||||
|
@ -240,17 +256,18 @@ class GUI(GameChild):
|
|||
buttons.append(Button(self, text[ii], x))
|
||||
x += buttons[-1].location.w + 10
|
||||
|
||||
def set_nodeset_index(self, increment=None):
|
||||
def set_nodeset_index(self, increment=None, index=None):
|
||||
parent = self.parent
|
||||
if not increment:
|
||||
index = 0
|
||||
else:
|
||||
index = self.nodeset_index + increment
|
||||
limit = len(parent) - 1
|
||||
if index > limit:
|
||||
if index is None:
|
||||
if not increment:
|
||||
index = 0
|
||||
elif index < 0:
|
||||
index = limit
|
||||
else:
|
||||
index = self.nodeset_index + increment
|
||||
limit = len(parent) - 1
|
||||
if index > limit:
|
||||
index = 0
|
||||
elif index < 0:
|
||||
index = limit
|
||||
self.nodeset_index = index
|
||||
self.set_nodeset_label()
|
||||
|
||||
|
@ -357,6 +374,7 @@ class GUI(GameChild):
|
|||
if bi is not None:
|
||||
if bi == self.B_WRITE:
|
||||
self.get_configuration().write()
|
||||
self.play(self.show_success_indicator)
|
||||
elif bi in (self.B_LINEAR, self.B_CUBIC):
|
||||
nodeset = self.get_nodeset()
|
||||
if bi == self.B_LINEAR:
|
||||
|
@ -366,7 +384,7 @@ class GUI(GameChild):
|
|||
self.store_in_configuration()
|
||||
redraw = True
|
||||
elif bi == self.B_DUPLICATE:
|
||||
pass
|
||||
self.prompt.activate("", self.add_nodeset)
|
||||
elif bi == self.B_DELETE and len(self.parent) > 1:
|
||||
self.parent.remove(self.get_nodeset())
|
||||
self.set_nodeset_index(1)
|
||||
|
@ -429,6 +447,14 @@ class GUI(GameChild):
|
|||
node))
|
||||
config.set("interpolate", nodeset.name, code)
|
||||
|
||||
def add_nodeset(self, name):
|
||||
nodeset = self.get_nodeset()
|
||||
self.set_nodeset_index(index=self.parent.add_nodeset(\
|
||||
name, nodeset, nodeset.interpolation_method))
|
||||
self.store_in_configuration()
|
||||
self.draw()
|
||||
return True
|
||||
|
||||
def collide_markers(self, pos):
|
||||
for marker in self.markers:
|
||||
if marker.location.collidepoint(pos):
|
||||
|
@ -511,6 +537,19 @@ class GUI(GameChild):
|
|||
prompt.update()
|
||||
prompt.draw_text()
|
||||
|
||||
def show_success_indicator(self):
|
||||
self.draw()
|
||||
if self.success_indicator_blink_count > 1:
|
||||
self.success_indicator_blink_count = 0
|
||||
self.halt(self.show_success_indicator)
|
||||
else:
|
||||
if self.success_indicator_active:
|
||||
self.display_surface.blit(self.success_indicator,
|
||||
self.success_indicator_rect)
|
||||
if self.success_indicator_active:
|
||||
self.success_indicator_blink_count += 1
|
||||
self.success_indicator_active = not self.success_indicator_active
|
||||
|
||||
|
||||
class Marker(Sprite):
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ class TimeFilter(GameChild):
|
|||
|
||||
def __init__(self, parent):
|
||||
GameChild.__init__(self, parent)
|
||||
self.ticks = self.last_ticks = get_ticks()
|
||||
self.ticks = self.unfiltered_ticks = self.last_ticks = get_ticks()
|
||||
self.open()
|
||||
|
||||
def close(self):
|
||||
|
@ -18,6 +18,9 @@ class TimeFilter(GameChild):
|
|||
def get_ticks(self):
|
||||
return self.ticks
|
||||
|
||||
def get_unfiltered_ticks(self):
|
||||
return self.unfiltered_ticks
|
||||
|
||||
def get_last_ticks(self):
|
||||
return self.last_ticks
|
||||
|
||||
|
@ -29,4 +32,5 @@ class TimeFilter(GameChild):
|
|||
self.last_frame_duration = duration = ticks - self.last_ticks
|
||||
if not self.closed:
|
||||
self.ticks += duration
|
||||
self.unfiltered_ticks += duration
|
||||
self.last_ticks = ticks
|
||||
|
|
Loading…
Reference in New Issue