Sinus wave with cubes

wave.vpb
 1import math
 2
 3# a sinus wave
 4class vrWave:
 5    speed = math.pi / 10.0
 6    pieces = 200
 7    def __init__(self, id = 0, shift = 0.0):
 8        self.shift = shift
 9        self.nodes = self._queryNodes(id)
10        self.step()
11
12    def step(self):
13        piece = math.pi / len(self.nodes)
14        for i in range(len(self.nodes)):
15            node = self.nodes[i]
16            pos = self.shift + i * piece
17            z = math.fabs(math.sin(pos))
18            setTransformNodeScale(node, 1.0, 1.0, z)
19        self.shift += vrWave.speed
20        if self.shift > math.pi:
21            self.shift = 0.0
22
23    def _queryNodes(self, id):
24        nodes = []
25        for i in range(vrWave.pieces):
26            name = "wave {}/{}".format(id, i + 1)
27            node = findNode(name, False)
28            nodes.append(node)
29        return nodes;
30
31# creation and animation of all waves
32class vrWaveAnimation(vrTimer):
33    waveCount = 20
34    def __init__(self):
35        super(vrWaveAnimation, self).__init__()
36        self.waves = []
37        for i in range(vrWaveAnimation.waveCount):
38            shift = math.pi * i / vrWaveAnimation.waveCount
39            wave = vrWave(i + 1, shift)
40            self.waves.append(wave)
41        super(vrWaveAnimation, self).connect(self._step)
42
43    def run(self):
44        super(vrWaveAnimation, self).setActive(True)
45
46    def stop(self):
47        super(vrWaveAnimation, self).setActive(False)
48
49    def __del__(self):
50        self.stop()
51
52    def _step(self):
53        for wave in self.waves:
54            wave.step()
55
56animation = vrWaveAnimation()
57animation.run()