Sinus wave with cubes
wave.py
import math
# a sinus wave
class vrWave:
    speed = math.pi / 10.0
    pieces = 200
    def __init__(self, id = 0, shift = 0.0):
        self.shift = shift
        self.nodes = self._queryNodes(id)
        self.step()
    def step(self):
        piece = math.pi / len(self.nodes)
        for i in range(len(self.nodes)):
            node = self.nodes[i]
            pos = self.shift + i * piece
            z = math.fabs(math.sin(pos))
            setTransformNodeScale(node, 1.0, 1.0, z)
        self.shift += vrWave.speed
        if self.shift > math.pi:
            self.shift = 0.0
    def _queryNodes(self, id):
        nodes = []
        for i in range(vrWave.pieces):
            name = "wave {}/{}".format(id, i + 1)
            node = findNode(name, False)
            nodes.append(node)
        return nodes;
# creation and animation of all waves
class vrWaveAnimation(vrTimer):
    waveCount = 20
    def __init__(self):
        super(vrWaveAnimation, self).__init__()
        self.waves = []
        for i in range(vrWaveAnimation.waveCount):
            shift = math.pi * i / vrWaveAnimation.waveCount
            wave = vrWave(i + 1, shift)
            self.waves.append(wave)
        super(vrWaveAnimation, self).connect(self._step)
    def run(self):
        super(vrWaveAnimation, self).setActive(True)
    def stop(self):
        super(vrWaveAnimation, self).setActive(False)
    def __del__(self):
        self.stop()
    def _step(self):
        for wave in self.waves:
            wave.step()
animation = vrWaveAnimation()
animation.run()