aboutsummaryrefslogtreecommitdiff
path: root/LightInstallation.py
diff options
context:
space:
mode:
Diffstat (limited to 'LightInstallation.py')
-rw-r--r--LightInstallation.py51
1 files changed, 30 insertions, 21 deletions
diff --git a/LightInstallation.py b/LightInstallation.py
index 87aa629..5882806 100644
--- a/LightInstallation.py
+++ b/LightInstallation.py
@@ -1,8 +1,11 @@
from xml.etree.ElementTree import ElementTree
from pixelcore.Screen import *
from pixelcore.PixelStrip import *
-import pdb, sys, time, Util, thread
+import pdb, sys, time, thread
from pygame.locals import *
+import util.TimeOps as clock
+import util.Config as configGetter
+import util.ComponentRegistry as compReg
from logger import main_log
#Python class to instantiate and drive a Screen through different patterns,
#and effects.
@@ -10,7 +13,7 @@ class LightInstallation:
def __init__(self, configFileName):
main_log.critical("hi russell, i'm sending info to the log files")
main_log.critical("initializing based on file: " + str(configFileName))
- self.timer = Util.Stopwatch()
+ self.timer = clock.Stopwatch()
self.timer.start()
self.inputs = {} #dict of inputs and their bound behaviors, keyed by InputId
self.behaviors = {}
@@ -20,38 +23,43 @@ class LightInstallation:
self.componentDict = {}
self.inputBehaviorRegistry = {} #inputid -> behaviors listening to that
#input
- #give Util a pointer to our componentRegistry and screen so that everyone can use
- #it
- Util.setComponentDict(self.componentDict)
self.screen = Screen()
- Util.setScreen(self.screen)
- config = Util.loadConfigFile(configFileName)
+ compReg.initRegistry()
+ compReg.registerComponent(self.screen, 'Screen') #TODO: move to constants file
+ config = configGetter.loadConfigFile(configFileName)
#read configs from xml
rendererConfig = config.find('RendererConfiguration')
pixelConfig = config.find('PixelConfiguration')
inputConfig = config.find('InputConfiguration')
behaviorConfig = config.find('BehaviorConfiguration')
mapperConfig = config.find('PixelMapperConfiguration')
+
+ installationConfig = config.find('InstallationConfiguration')
#inits
self.initializeScreen(pixelConfig)
self.initializeRenderers(rendererConfig)
self.initializeInputs(inputConfig)
self.initializeBehaviors(behaviorConfig)
self.initializeMapper(mapperConfig)
-
- self.screen.setMapper(self.mapper)
#registration in dict
self.registerComponents(self.renderers)
self.registerComponents(self.inputs)
self.registerComponents(self.behaviors)
+ self.registerComponents(self.mappers)
+ self.configureInstallation(installationConfig)
#Done initializing. Lets start this thing!
self.timer.stop()
print 'Initialization done. Time: ', self.timer.elapsed(), 'ms'
self.mainLoop()
+ def configureInstallation(self, installationConfig):
+ defaults = configGetter.generateArgDict(installationConfig.find('Defaults'))
+ for defaultSelection in defaults:
+ componentToMap = compReg.getComponent(defaults[defaultSelection])
+ compReg.registerComponent(compReg.getComponent(defaults[defaultSelection]),\
+ 'Default'+defaultSelection)
def initializeMapper(self, mapperConfig):
- self.mapper = self.initializeComponent(mapperConfig)[0] #TODO: support
- #multiple mappers
+ self.mappers = self.initializeComponent(mapperConfig)
def initializeScreen(self, layoutConfig):
pixelAssemblers = self.initializeComponent(layoutConfig)
[self.addPixelStrip(l) for l in pixelAssemblers]
@@ -72,14 +80,14 @@ class LightInstallation:
cid = component['Id']
if cid == None:
raise Exception('Components must have Ids!')
- self.componentDict[cid] = component
+ compReg.registerComponent(component)
def initializeComponent(self, config):
components = []
if config != None:
for configItem in config.getchildren():
[module,className] = configItem.find('Class').text.split('.')
exec('from ' + module+'.'+className + ' import *')
- args = Util.generateArgDict(configItem.find('Args'))
+ args = configGetter.generateArgDict(configItem.find('Args'))
args['parentScope'] = self #TODO: we shouldn't give away scope
#like this, find another way.
components.append(eval(className+'(args)')) #TODO: doesn't error
@@ -89,12 +97,12 @@ class LightInstallation:
return True
def mainLoop(self):
#self.screen.allOn()
- lastLoopTime = Util.time()
+ lastLoopTime = clock.time()
refreshInterval = 30
runCount = 10000
while runCount > 0:
runCount -= 1
- loopStart = Util.time()
+ loopStart = clock.time()
responses = self.evaluateBehaviors() #inputs are all queued when they
#happen, so we only need to run the behaviors
self.timer.start()
@@ -102,7 +110,7 @@ class LightInstallation:
response != []]
self.screen.timeStep()
[r.render(self.screen) for r in self.renderers]
- loopElapsed = Util.time()-loopStart
+ loopElapsed = clock.time()-loopStart
sleepTime = max(0,refreshInterval-loopElapsed)
self.timer.stop()
#print self.timer.elapsed()
@@ -124,9 +132,6 @@ class LightInstallation:
self.behaviors = self.initializeComponent(behaviorConfig)
for behavior in self.behaviors:
self.addBehavior(behavior)
- #TODO: we probably don't need this anymore :(
- def topologicalBehaviorSort(self):
- return Util.topologicalSort(self.behaviorDependencies)
#Does work needed to add a behavior: currently -- maps behavior inputs into
#the input behavior registry.
def addBehavior(self, behavior):
@@ -136,8 +141,12 @@ class LightInstallation:
def processResponse(self,inputDict, responseDict):
inputId = inputDict['Id']
boundBehaviorIds = self.inputBehaviorRegistry[inputId]
- [self.componentDict[b].addInput(responseDict) for b in boundBehaviorIds]
-
+ #TODO: fix this, it crashes because inputs get run before beahviors exist
+ try:
+ [compReg.getComponent(b).addInput(responseDict) for b in boundBehaviorIds]
+ except:
+ pass
+ #print 'Behaviors not initialized yet. WAIT!'
def main(argv):
print argv
if len(argv) == 1: