From 7a4f06d15b0fe9bd22996af6a1ca2c3ca5ca3e3f Mon Sep 17 00:00:00 2001 From: dxiao Date: Sun, 13 Feb 2011 19:00:44 -0500 Subject: Added a vertical bars animation to C5Sign-dxiao --- behaviors/VerticalBar.py | 30 +++ config/C5Sign-dxiao.xml | 396 ++++++++++++++++++++++++++++++++++++++ config/C5Sign.xml | 2 +- inputs/ContinuousLocationInput.py | 19 ++ pixelmappers/C5SignMapper.py | 8 +- 5 files changed, 452 insertions(+), 3 deletions(-) create mode 100644 behaviors/VerticalBar.py create mode 100644 config/C5Sign-dxiao.xml create mode 100644 inputs/ContinuousLocationInput.py diff --git a/behaviors/VerticalBar.py b/behaviors/VerticalBar.py new file mode 100644 index 0000000..e1a67fe --- /dev/null +++ b/behaviors/VerticalBar.py @@ -0,0 +1,30 @@ +from operationscore.Behavior import * +class VerticalBar(Behavior): + + def processResponse(self, inputs, recurs): + + ret = [] + for inputset in inputs: + #import pdb; pdb.set_trace() + + if 'xLoc' not in inputset: + inputset['xLoc'] = inputset['Location'][0] + xLoc = inputset['xLoc'] + + condition = '{x} == ' + str(xLoc) + + if self['Combine']: + inputset['Location'] += ',' + condition + else: + inputset['Location'] = condition + + ret.append(inputset) + + return (ret, []) + + def setLastOutput(self, output): + + coutput = Behavior.deepCopyPacket(output) + for data in coutput: + data['Location'] = data['xLoc'] + return coutput diff --git a/config/C5Sign-dxiao.xml b/config/C5Sign-dxiao.xml new file mode 100644 index 0000000..38eb40c --- /dev/null +++ b/config/C5Sign-dxiao.xml @@ -0,0 +1,396 @@ + + + + + simplemap + + + + layouts/C5SignLayout.xml + + + + + pixelmappers.C5SignMapper + + c5signmapper + 20 + + + + + pixelmappers.SimpleMapper + + simplemap + 20 + + + + pixelmappers.GaussianMapper + + gaussmap + 30 + 0.1 + 7 + 1 + + + + + + renderers/C5Renderer.xml + + + renderers/Pygame.xml + + + + + + inputs.OSCInput + + osc + 1234 + 10 + + + + + inputs.UDPInput + + udp + 3344 + 50 + + + + inputs.ContinuousCenterInput + + center + 1800 + + + + + inputs.ContinuousLocationInput + + centerleft + left + center + 1800 + + + + + + + + + + touchosc + + behaviors.TouchOSC + + + behaviors/RandomColor.xml + + + + + + behaviors.BehaviorChain + + OSCTouchChase + + osc + + + touchosc + decay + + gaussmap + False + + + + behaviors/PixelDecay.xml + + + behaviors/SingleFrame.xml + + + + behaviors/PixelDecay.xml + + .001 + + + + + behaviors.XYMove + + xymove + 1 + 1 + + + + behaviors.RestrictLocation + + xbounce + {val}*-1 + XStep + {x}<2 or {x}>48 + + + + behaviors.RestrictLocation + + ybounce + {val}*-1 + YStep + {y}<2 or {y}>24 + + + + behaviors.BehaviorChain + + movebounce + + xymove + ybounce + xbounce + + + + + behaviors.ModifyParam + + ysin + YStep + Sensor + 4*math.sin({x}/float(40)) + + + + behaviors.DebugBehavior + + debug + 0 + + pygamekey + udp + + + + + behaviors.AllPixels + + square + 20 + + + + behaviors/LoopAndDie.xml + + 160 + + + + behaviors.BehaviorChain + + runcolordecay + + pygameclick + + + colorchange + mover + + decay + + {'mover':'movebounce'} + False + gaussmap + + + + behaviors.ResponseMover + + mover + + + + behaviors.RandomWalk + + randmovement + 2 + + + + behaviors/Accelerate.xml + + + behaviors.EchoBehavior + + echo + 0 + False + + + + behaviors.ColorShift + + colorshift + + + + behaviors.BehaviorChain + + mousechaser + + + + echo + innercircle + outercircle + singleframe + + False + + + + behaviors.Circle + + innercircle + 0 + True + + + + behaviors.Circle + + outercircle + 3 + True + + + + behaviors.ModifyParam + + incrinner + {val}+.3 + innercircleRadius + + + + behaviors.ModifyParam + + incrouter + {val}+.3 + outercircleRadius + + + + behaviors.BehaviorChain + + circle_expand + + innercircle + outercircle + incrinner + incrouter + recursivedecay + + + + + behaviors.BehaviorChain + + expandingcirlces + + centerleft + + + colorchange + mover + decay + + {'mover':'circle_expand'} + False + + + + + behaviors.ModifyParam + + incrVertBarLoc + xLoc + {val}+1 + + + + behaviors.VerticalBar + + vertBar + + + + behaviors.BehaviorChain + + bar_move + + vertBar + incrVertBarLoc + recursivedecay + + + + + behaviors.BehaviorChain + + scanningbars + + centerleft + + + colorchange + mover + slowdecay + + {'mover':'bar_move'} + True + + + + + behaviors/RunningBehavior.xml + + + diff --git a/config/C5Sign.xml b/config/C5Sign.xml index 02bd0a2..45e42de 100644 --- a/config/C5Sign.xml +++ b/config/C5Sign.xml @@ -10,7 +10,7 @@ - pixelmappers.SimpleMapper + pixelmappers.C5SignMapper simplemap 20 diff --git a/inputs/ContinuousLocationInput.py b/inputs/ContinuousLocationInput.py new file mode 100644 index 0000000..f39bd9b --- /dev/null +++ b/inputs/ContinuousLocationInput.py @@ -0,0 +1,19 @@ +import util.TimeOps as clock +import util.ComponentRegistry as compReg +import util.Strings as Strings +from operationscore.Input import * +class ContinuousLocationInput(Input): + '''Continuously returns one of nine positions on the screen as specified by the xloc + and yloc arguments, which can take values 'min', 'max', and 'center'. ''' + def inputInit(self): + xvals = {} + yvals = {} + xvals['left'], yvals['bottom'], xvals['right'], yvals['top'] = compReg.getComponent('Screen').getSize() + (xvals['center'], yvals['center']) = ((xvals['left']+xvals['right']) / 2, (yvals['top']+yvals['bottom']) / 2) + + self.location = (xvals[self['xloc']], yvals[self['yloc']]) + + def sensingLoop(self): + print (self.location) + self.respond({Strings.LOCATION: self.location}) + diff --git a/pixelmappers/C5SignMapper.py b/pixelmappers/C5SignMapper.py index 79ebe1a..24631c4 100644 --- a/pixelmappers/C5SignMapper.py +++ b/pixelmappers/C5SignMapper.py @@ -1,6 +1,7 @@ from operationscore.PixelMapper import * import util.Geo as Geo import sys +import math class C5SignMapper(PixelMapper): """C5SignMapper is a modification to SimpleMapper which maps events to the nearest Pixel. In addtion, it also maps sign artifacts (letters, logo, etc) @@ -99,7 +100,9 @@ class C5SignMapper(PixelMapper): [eventLocation, signPart] = eventLocSplit signParts = signPart.split('.') pixelLocs = signPosition[signParts[0]][signParts[1]] - screen = [p for p in screen if (p.location in pixelLocs)] + screenPixels = [p for p in screen if (p.location in pixelLocs)] + else: + screenPixels = [p for p in screen] #{x}>5,{y}