Tried to make it faster but now it doesnt run.
This commit is contained in:
parent
aba7f137fb
commit
e0415d31e8
1 changed files with 71 additions and 3 deletions
|
@ -103,6 +103,7 @@ class FallingSand:
|
|||
setattr(self.settings, "save", lambda: save_dataclass_json(self.settings, "settings.json"))
|
||||
|
||||
self.fps = self.settings.fps
|
||||
self.sand_particles = []
|
||||
self.falling_sand_particles = []
|
||||
self.rainbow_data = [[255, 40, 40], 0]
|
||||
self.rainbow_steps = [(1, True), (0, False), (2, True), (1, False), (0, True), (2, False)]
|
||||
|
@ -152,8 +153,7 @@ class FallingSand:
|
|||
if not self.running:
|
||||
return
|
||||
|
||||
for particle in self.falling_sand_particles:
|
||||
particle.update()
|
||||
self.update_sand_particles()
|
||||
|
||||
self.matrix.close()
|
||||
|
||||
|
@ -197,6 +197,74 @@ class FallingSand:
|
|||
self.sand_surface.blit(old_sand_surface, (0, 0))
|
||||
self.matrix = pygame.PixelArray(self.sand_surface)
|
||||
|
||||
def update_sand_particles(self):
|
||||
i = 0
|
||||
|
||||
for particle in self.falling_sand_particles:
|
||||
old_pos, color, not_moving = particle
|
||||
ox, oy = old_pos
|
||||
|
||||
if oy >= self.sand_surface.get_height() - 4:
|
||||
self.falling_sand_particles.remove(particle)
|
||||
break
|
||||
|
||||
print(len(self.falling_sand_particles))
|
||||
|
||||
x, y = old_pos
|
||||
|
||||
if self.matrix[ox, oy + 1] == self.sand_surface.map_rgb(self.gray):
|
||||
y += 1
|
||||
|
||||
elif (
|
||||
self.matrix[ox - 1, oy + 2] == self.sand_surface.map_rgb(self.gray)
|
||||
and self.matrix[ox + 1, oy + 2] == self.sand_surface.map_rgb(self.gray)
|
||||
):
|
||||
if true_false_random():
|
||||
x -= 1
|
||||
y += 2
|
||||
|
||||
else:
|
||||
x += 1
|
||||
y += 2
|
||||
|
||||
elif self.matrix[ox - 1, oy + 2] == self.sand_surface.map_rgb(self.gray):
|
||||
x -= 1
|
||||
y += 2
|
||||
|
||||
elif self.matrix[ox + 1, oy + 2] == self.sand_surface.map_rgb(self.gray):
|
||||
x += 1
|
||||
y += 2
|
||||
|
||||
else:
|
||||
if not_moving == 32:
|
||||
if self.mouse_pressed[0]:
|
||||
not_moving = 0
|
||||
|
||||
else:
|
||||
self.falling_sand_particles.remove(particle)
|
||||
|
||||
break
|
||||
|
||||
else:
|
||||
if self.mouse_pressed[0]:
|
||||
not_moving = 0
|
||||
|
||||
else:
|
||||
not_moving += 1
|
||||
|
||||
break
|
||||
|
||||
not_moving = 0
|
||||
pos = (x, y)
|
||||
|
||||
self.falling_sand_particles.pop(i)
|
||||
self.falling_sand_particles.append((pos, color, not_moving))
|
||||
|
||||
self.matrix[ox, oy] = self.gray
|
||||
self.matrix[x, y] = color
|
||||
|
||||
i += 1
|
||||
|
||||
def spawn_sand(self, position):
|
||||
for ax in range(-8, 9):
|
||||
color = self.rainbow()
|
||||
|
@ -207,7 +275,7 @@ class FallingSand:
|
|||
by += ay
|
||||
|
||||
if self.matrix[bx, by] == self.sand_surface.map_rgb(self.gray) and bx % 2 == 0 and by % 2 == 0:
|
||||
self.falling_sand_particles.append(FallingSandParticle(self, (bx, by), color))
|
||||
self.falling_sand_particles.append(((bx, by), color, 0)) # pos, color, not_moving
|
||||
|
||||
def rainbow(self):
|
||||
color = self.rainbow_data[0]
|
||||
|
|
Loading…
Reference in a new issue