def get_keypad(numRings, rng): """places rings at the 9 'keypad' positions""" positions = ( RingTracks.center, RingTracks.up, RingTracks.down, RingTracks.left, RingTracks.right, RingTracks.ul, RingTracks.ur, RingTracks.lr, RingTracks.ll, ) tracks = [] usedPositions = [None,] posScale = 0.7 + (rng.random() * 0.2) for i in range(0, numRings): # choose an unused position pos = None while pos in usedPositions: pos = rng.choice(positions) usedPositions.append(pos) # scale the positions scaledPos = [0,0] scaledPos[0] = pos[0] * posScale scaledPos[1] = pos[1] * posScale action = RingAction.RingActionStaticPos(scaledPos) track = RingTrack.RingTrack([action], [1.]) tracks.append(track) # no per-track time offsets; period doesn't matter either return tracks, None, 1.
def get_keypad(numRings, rng): positions = (RingTracks.center, RingTracks.up, RingTracks.down, RingTracks.left, RingTracks.right, RingTracks.ul, RingTracks.ur, RingTracks.lr, RingTracks.ll) tracks = [] usedPositions = [None] posScale = 0.7 + rng.random() * 0.2 for i in range(0, numRings): pos = None while pos in usedPositions: pos = rng.choice(positions) usedPositions.append(pos) scaledPos = [0, 0] scaledPos[0] = pos[0] * posScale scaledPos[1] = pos[1] * posScale action = RingAction.RingActionStaticPos(scaledPos) track = RingTrack.RingTrack([action], [1.0]) tracks.append(track) return tracks, None, 1.0
def get_plus(numRings, rng): """make rings move in and out from center in a plus pattern""" up = RingTracks.getPlusUpRingActions down = RingTracks.getPlusDownRingActions left = RingTracks.getPlusLeftRingActions right = RingTracks.getPlusRightRingActions actionSets = { # this pattern is not used for 1 ring 2: [[up, down], [left, right]], 3: [[up, left, right], [left, up, down], [down, left, right], [right, up, down]], 4: [[up, down, left, right]], } tracks = [] actionSet = rng.choice(actionSets[numRings]) for i in range(0, numRings): actions, durations = actionSet[i]() track = RingTrack.RingTrack(actions, durations) tracks.append(track) return tracks, [0] * numRings, plusPeriod
def __get_Slots(numRings, rng, vertical=1): tracks = [] tOffsets = [] # calculate fixed positions (X for vertical, Y for horizontal) fpTab = [] for i in range(numRings): fpTab.append(PythonUtil.lineupPos(i, numRings, 2./3)) # move all of the fixed positions by a random amount, # staying within bounds offset = 1 - fpTab[-1] offset = (rng.random() * (offset*2)) - offset fpTab = map(lambda x: x+offset, fpTab) for i in range(0,numRings): if vertical: getActionsFunc = RingTracks.getVerticalSlotActions else: getActionsFunc = RingTracks.getHorizontalSlotActions actions, durations = getActionsFunc(fpTab[i]) track = RingTrack.RingTrack(actions, durations) tracks.append(track) tOffsets.append((float(i)/numRings) * .5) return tracks, tOffsets, fullCirclePeriod
def get_horizInfinity(numRings, rng): tracks = [] for i in range(0, numRings): (actions, durations) = RingTracks.getHorizontalInfinityRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) return (tracks, infinityTOffsets[numRings - 1], infinityPeriod)
def get_vertInfinity(numRings, rng): tracks = [] for i in range(0, numRings): actions, durations = RingTracks.getVerticalInfinityRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) return (tracks, infinityTOffsets[numRings - 1], infinityPeriod)
def get_horizInfinity(numRings, rng): """make the rings move in a sideways 8 pattern""" tracks = [] for i in range(0, numRings): actions, durations = RingTracks.getHorizontalInfinityRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) return tracks, infinityTOffsets[numRings-1], infinityPeriod
def get_evenCircle(numRings, rng): tracks = [] tOffsets = [] for i in range(0, numRings): (actions, durations) = RingTracks.getCircleRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) tOffsets.append(float(i) / numRings) return (tracks, tOffsets, fullCirclePeriod)
def get_evenCircle_withStationaryCenterRings(numRings, rng): tracks = [] tOffsets = [] numCenterRings = rng.randint(1, numRings - 1) positions = getTightCircleStaticPositions(numCenterRings) for i in range(0, numCenterRings): action = RingAction.RingActionStaticPos(positions[i]) track = RingTrack.RingTrack([action]) tracks.append(track) tOffsets.append(0) numOuterRings = numRings - numCenterRings for i in range(0, numOuterRings): actions, durations = RingTracks.getCircleRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) tOffsets.append(float(i) / numOuterRings) return (tracks, tOffsets, fullCirclePeriod)
def get_followCircle(numRings, rng): tracks = [] tOffsets = [] for i in range(0, numRings): actions, durations = RingTracks.getCircleRingActions() track = RingTrack.RingTrack(actions, durations) delay = 0.12 tracks.append(track) tOffsets.append(float(i) * delay) return (tracks, tOffsets, fullCirclePeriod)
def get_evenCircle(numRings, rng): """make the rings move in a circle, evenly spaced""" tracks = [] tOffsets = [] for i in range(0, numRings): actions, durations = RingTracks.getCircleRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) tOffsets.append(float(i)/numRings) return tracks, tOffsets, fullCirclePeriod
def get_followCircle(numRings, rng): """make the rings follow each other closely in a circle""" tracks = [] tOffsets = [] for i in range(0, numRings): actions, durations = RingTracks.getCircleRingActions() track = RingTrack.RingTrack(actions, durations) delay = 0.12 tracks.append(track) tOffsets.append(float(i)*delay) return tracks, tOffsets, fullCirclePeriod
def get_evenCircle_withStationaryCenterRings(numRings, rng): """make some rings move in a circle, evenly spaced, with others in a small, stationary circle around (0,0)""" tracks = [] tOffsets = [] numCenterRings = rng.randint(1,numRings-1) # add the stationary center rings positions = getTightCircleStaticPositions(numCenterRings) for i in range(0, numCenterRings): action = RingAction.RingActionStaticPos(positions[i]) track = RingTrack.RingTrack([action]) tracks.append(track) tOffsets.append(0) numOuterRings = numRings - numCenterRings for i in range(0, numOuterRings): actions, durations = RingTracks.getCircleRingActions() track = RingTrack.RingTrack(actions, durations) tracks.append(track) tOffsets.append(float(i)/numOuterRings) return tracks, tOffsets, fullCirclePeriod
def get_plus(numRings, rng): up = RingTracks.getPlusUpRingActions down = RingTracks.getPlusDownRingActions left = RingTracks.getPlusLeftRingActions right = RingTracks.getPlusRightRingActions actionSets = {2: [[up, down], [left, right]], 3: [[up, left, right], [left, up, down], [down, left, right], [right, up, down]], 4: [[up, down, left, right]]} tracks = [] actionSet = rng.choice(actionSets[numRings]) for i in range(0, numRings): actions, durations = actionSet[i]() track = RingTrack.RingTrack(actions, durations) tracks.append(track) return ( tracks, [0] * numRings, plusPeriod)
def __get_Slots(numRings, rng, vertical = 1): tracks = [] tOffsets = [] fpTab = [] for i in range(numRings): fpTab.append(PythonUtil.lineupPos(i, numRings, 2.0 / 3)) offset = 1 - fpTab[-1] offset = rng.random() * offset * 2 - offset fpTab = map(lambda x: x + offset, fpTab) for i in range(0, numRings): if vertical: getActionsFunc = RingTracks.getVerticalSlotActions else: getActionsFunc = RingTracks.getHorizontalSlotActions (actions, durations) = getActionsFunc(fpTab[i]) track = RingTrack.RingTrack(actions, durations) tracks.append(track) tOffsets.append((float(i) / numRings) * 0.5) return (tracks, tOffsets, fullCirclePeriod)