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()