MCPcopy Create free account
hub / github.com/csaez/mscreen / ParticleSystem

Class ParticleSystem

tests/test_stress.py:82–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

80
81
82class ParticleSystem(object):
83 def __init__(self):
84 super(ParticleSystem, self).__init__()
85 self.time = -1
86 self._states = list()
87 self.addState()
88 self.clear()
89
90 def clear(self):
91 self.particles = list()
92 mscreen.clear()
93
94 def addPoint(self, state=0):
95 p = Particle()
96 p.id = len(self.particles)
97 p.state = state
98 self.particles.append(p)
99 return p
100
101 def addState(self):
102 index = len(self._states)
103 forces = list()
104 emitters = list()
105 ageLimit = None
106 self._states.append([forces, emitters, ageLimit])
107 return index
108
109 def addForce(self, force, state=0):
110 self._states[state][0].append(force)
111
112 def addEmitter(self, emitter, state=0):
113 self._states[state][1].append(emitter)
114
115 def setAgeLimit(self, value, state=0):
116 self._states[state][2] = value
117
118 def simulate(self, time):
119 if time == 1 and time != self.time:
120 self.clear()
121 self.time = 1
122 return
123 if time <= self.time:
124 return
125
126 for state in self._states:
127 emitters = state[1]
128 for e in emitters:
129 for _ in range(e.rate):
130 p = self.addPoint()
131 p.position = om2.MVector(e.position)
132 p.velocity = om2.MVector(e.initialVelocity)
133
134 for p in self.particles:
135 if p is None:
136 continue
137 # update velocity
138 forces = self._states[p.state][0]
139 for f in forces:

Callers 1

test_stress.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected