annotate pytouhou/game/particle.pyx @ 791:a29122662cde

utils: Simplify translate_2d and align Mat4 to 16 bytes This lowers the amount of instructions from 61 to 32 on PowerPC with AltiVec, and from 25 to 14 on amd64 with AVX2.
author Link Mauve <linkmauve@linkmauve.fr>
date Sat, 17 Jan 2026 14:19:58 +0100
parents cd8a2baf468c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
631
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
1 # -*- encoding: utf-8 -*-
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
2 ##
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
3 ## Copyright (C) 2015 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
4 ##
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
5 ## This program is free software; you can redistribute it and/or modify
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
6 ## it under the terms of the GNU General Public License as published
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
7 ## by the Free Software Foundation; version 3 only.
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
8 ##
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
9 ## This program is distributed in the hope that it will be useful,
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
12 ## GNU General Public License for more details.
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
13 ##
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
14
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
15 from pytouhou.game.game cimport Game
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
16
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
17
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
18 cdef class Particle(Effect):
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
19 def __init__(self, pos, index, anm, long amp, Game game, bint reverse=False, long duration=24):
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
20 Effect.__init__(self, pos, index, anm)
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
21
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
22 self.frame = 0
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
23 self.duration = duration
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
24
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
25 random_pos = (self.x + amp * game.prng.rand_double() - amp / 2,
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
26 self.y + amp * game.prng.rand_double() - amp / 2)
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
27
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
28 if not reverse:
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
29 self.pos_interpolator = Interpolator((self.x, self.y), 0,
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
30 random_pos, duration, formula=(lambda x: 2. * x - x ** 2))
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
31 else:
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
32 self.pos_interpolator = Interpolator(random_pos, 0,
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
33 (self.x, self.y), duration, formula=(lambda x: 2. * x - x ** 2))
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
34 self.x, self.y = random_pos
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
35
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
36
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
37 cpdef update(self):
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
38 Effect.update(self)
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
39
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
40 self.pos_interpolator.update(self.frame)
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
41 self.x, self.y = self.pos_interpolator.values
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
42
cd8a2baf468c Move Particle to its own module, to not pollute pytouhou.game.effect.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
43 self.frame += 1