video recorder request; points; apply motion overflow

This commit is contained in:
Frank 2015-03-26 13:48:12 -04:00
parent 334cb21762
commit dca094220b
8 changed files with 58 additions and 19 deletions

0
__init__.py Normal file
View File

View File

@ -124,10 +124,10 @@ class Account:
def get_current_interval(self):
return self.interval[self.interval_index]
def increment_interval_index(self):
index = self.interval_index + 1
if index >= len(self.interval):
index = 0
def increment_interval_index(self, increment=1):
index = self.interval_index + increment
while index >= len(self.interval):
index -= len(self.interval)
self.interval_index = index
def reset_interval(self):

View File

@ -94,6 +94,7 @@ class Configuration(RawConfigParser):
set_option(section, "file-extension", "png", False)
section = "video-recordings"
add_section(section)
set_option(section, "enable", "no", False)
set_option(section, "rel-path", "vids", False)
set_option(section, "directory-name-format", "%Y%m%d%H%M%S", False)
set_option(section, "file-extension", "png", False)
@ -388,7 +389,9 @@ class TypeDeclarations(dict):
"video-recordings": {"path": ["rel-path", "path"],
"int": "framerate"},
"int": "framerate",
"bool": "enable"},
"setup": {"list": ["classifiers", "resource-search-path",
"requirements", "data-exclude",

View File

@ -54,7 +54,8 @@ class Game(GameChild):
self.update()
else:
self.interpolator.gui.update()
self.video_recorder.update()
if self.video_recorder.requested:
self.video_recorder.update()
def run(self):
self.mainloop.run()

View File

@ -123,3 +123,4 @@ class Note(Samples):
self.fadeout(fadeout)
if channel and panning:
channel.set_volume(*panning)
return channel

View File

@ -2,7 +2,6 @@ from os import listdir
from os.path import isfile, join
from sys import exc_info, stdout
from glob import glob
from traceback import print_exc, print_stack
from pygame import Color, Rect, Surface
from pygame.image import load
@ -237,6 +236,11 @@ class Location(Rect):
def reset_motion_overflow(self):
self.motion_overflow.place_at_origin()
def apply_motion_overflow(self, coordinates=None):
if coordinates is None:
coordinates = self.topleft
return self.motion_overflow + coordinates
def hide(self):
self.hidden = True
@ -379,13 +383,14 @@ class Frameset:
if len(self.order) > 1:
self.increment_index()
def increment_index(self):
increment = 1 if not self.reversed else -1
def increment_index(self, increment=None):
if increment is None:
increment = 1 if not self.reversed else -1
index = self.current_index + increment
if index < 0:
index = self.length() - 1
elif index >= self.length():
index = 0
while index < 0:
index += self.length()
while index >= self.length():
index -= self.length()
self.current_index = index
def length(self):

View File

@ -12,11 +12,17 @@ class VideoRecorder(GameChild):
def __init__(self, parent):
GameChild.__init__(self, parent)
self.display_surface = self.get_display_surface()
self.delegate = self.get_delegate()
self.load_configuration()
self.reset()
self.subscribe(self.respond)
self.set_requested()
if self.requested:
self.display_surface = self.get_display_surface()
self.delegate = self.get_delegate()
self.load_configuration()
self.reset()
self.subscribe(self.respond)
def set_requested(self):
self.requested = self.get_configuration("video-recordings")["enable"] \
or self.check_command_line("-enable-video")
def load_configuration(self):
config = self.get_configuration("video-recordings")

View File

@ -1,7 +1,30 @@
from math import sin, cos, atan2
from math import sin, cos, atan2, radians
def get_step(start, end, speed):
x0, y0 = start
x1, y1 = end
angle = atan2(x1 - x0, y1 - y0)
return speed * sin(angle), speed * cos(angle)
def get_endpoint(start, angle, magnitude):
x0, y0 = start
angle = radians(angle)
return x0 + sin(angle) * magnitude, y0 - cos(angle) * magnitude
def rotate_2d(point, center, angle, translate_angle=True):
if translate_angle:
angle = radians(angle)
x, y = point
cx, cy = center
return cos(angle) * (x - cx) - sin(angle) * (y - cy) + cx, \
sin(angle) * (x - cx) + cos(angle) * (y - cy) + cy
def get_points_on_circle(center, radius, count, offset=0):
angle_step = 360.0 / count
points = []
current_angle = 0
for _ in xrange(count):
points.append(rotate_2d((center[0], center[1] - radius), center,
current_angle + offset))
current_angle += angle_step
return points