from os import listdir
from os.path import join
from transistors.GameChild import *
from Slide import *
class Slides(GameChild):
def __init__(self, parent):
GameChild.__init__(self, parent)
self.load()
self.current = 0
def load(self):
slides = []
directory = self.get_resource("introduction-images-path")
for path in sorted(listdir(directory)):
slides.append(Slide(self, join(directory, path)))
self.slides = slides
def reset(self):
self.current = 0
def advance(self):
looped = False
current = self.current + 1
if current >= len(self.slides):
current = 0
looped = True
self.current = current
return not looped
def draw(self):
self.slides[self.current].draw()
from pygame import image
from pygame.transform import smoothscale
from transistors.GameChild import *
class Slide(GameChild):
def __init__(self, parent, path):
GameChild.__init__(self, parent)
self.path = path
self.destination = self.get_screen()
self.load()
def load(self):
size = self.destination.get_size()
self.slide = smoothscale(image.load(self.path), size).convert()
def draw(self):
self.destination.blit(self.slide, (0, 0))
class Parameters:
ints = ["time-limit", "display-frame-duration", "display-wait-duration",
"terrain-size", "orb-size", "orb-padding", "manna-size",
"cells-type-count", "audio-bg-channel", "terrain-border"]
floats = ["territory-initial-coverage"]
tuples = ["display-dimensions"]
paths = ["introduction-images-path", "capture-path"]
str_lists = ["territory-colors", "keys-reset", "keys-capture-screen",
"keys-quit"]
bools = []
import re
import os
from os.path import isfile, join
import pygame
from Parameters import *
class Configuration(dict):
assignment_operator = "="
comments_operator = "#"
field_separator = ","
keys_prefix = "keys_"
true_values = ["yes", "y", "true", "t", "1"]
def __init__(self):
self.set_file_path()
self.parse()
def set_file_path(self):
path = "config"
if not isfile(path):
path = join("/usr/local/share/transistors/", path)
self.file_path = path
def parse(self):
for line in file(self.file_path):
line = line.strip()
if len(line) > 0 and line[0] != self.comments_operator:
(lval, rval) = map(
str.strip, line.split(self.assignment_operator))
if lval in Parameters.ints:
rval = int(rval)
if lval in Parameters.floats:
rval = float(rval)
if lval in Parameters.bools:
rval = True if self.is_true_value(rval) else False
if lval in Parameters.paths:
rval = os.path.join(*rval.split(os.sep))
if lval in Parameters.tuples:
rval = eval(rval)
if lval in Parameters.str_lists:
rval = map(str.strip, rval.split(self.field_separator))
if self.is_key_assignment(lval):
rval = map(lambda key: getattr(pygame, key), rval)
self[lval] = rval
def is_true_value(self, rval):
return rval.lower() in self.true_values
def is_key_assignment(self, lval):
pattern = "^" + self.keys_prefix + "*"
return re.match(pattern, lval) is not None
from transistors.GameChild import *
from transistors.EventDelegate import *
from terrain.Terrain import *
class World(GameChild):
def __init__(self, parent):
GameChild.__init__(self, parent)
self.deactivate()
self.subscribe_to_events()
self.add_terrain()
def subscribe_to_events(self):
self.subscribe_to(EventDelegate.state_change_event,
self.respond_to_state_change)
def respond_to_state_change(self, evt):
if evt.state == "introduction-finished":
self.activate()
def activate(self):
self.active = True
self.set_music()
def set_music(self):
self.get_audio().play_bgm(self.get_resource("world-music-path"))
def deactivate(self):
self.active = False
def add_terrain(self):
width, height = self.get_screen().get_size()
terrain_width = self.get_configuration()["terrain-size"]
terrain = []
for ii in range(width / terrain_width + 1):
for jj in range(height / terrain_width + 1):
terrain.append(Terrain(self, (ii, jj)))
self.terrain = terrain
def update(self):
if self.active:
for terrain in self.terrain:
terrain.update()
from pygame import Surface, Rect, Color
from transistors.GameChild import *
class Terrain(GameChild, Surface):
def __init__(self, parent, coordinates):
GameChild.__init__(self, parent)
self.coordinates = coordinates
self.init_surface()
self.set_rect()
self.set_background()
self.set_clip()
def init_surface(self):
width = self.get_configuration()["terrain-size"]
Surface.__init__(self, (width, width))
def set_rect(self):
rect = self.get_rect()
ii, jj = self.coordinates
offset = self.get_width() / 2
rect.topleft = ii * rect.w - offset, jj * rect.w - offset
self.rect = rect
def set_background(self):
background = Surface(self.get_size())
background.fill(Color(self.get_configuration()["terrain-border-color"]))
self.blit(background, (0, 0))
self.background = background
def set_clip(self):
width = self.get_width() - self.get_configuration()["terrain-border"]
Surface.set_clip(self, Rect(0, 0, width, width))
def update(self):
self.clear()
self.draw()
def clear(self):
self.blit(self.background, (0, 0))
def draw(self):
self.fill(Color("black"))
self.get_screen().blit(self, self.rect)