46 lines
No EOL
1.7 KiB
Python
46 lines
No EOL
1.7 KiB
Python
import math
|
|
|
|
import pygame
|
|
|
|
|
|
class Spark:
|
|
"""Ein Funken, der von einer Klinge oder einem Projektil ausgeht."""
|
|
|
|
def __init__(self, pos, angle, speed):
|
|
self.pos = list(pos)
|
|
self.angle = angle
|
|
self.speed = speed
|
|
|
|
def update(self):
|
|
# Bewegt den Funken in seine Richtung
|
|
self.pos[0] += math.cos(self.angle) * self.speed
|
|
self.pos[1] += math.sin(self.angle) * self.speed
|
|
|
|
# Macht den Funken langsamer, bis er stehen bleibt
|
|
self.speed = max(0, self.speed - 0.1)
|
|
|
|
# Gibt True zurück, wenn der Funken stillsteht (kann dann gelöscht werden)
|
|
return not self.speed
|
|
|
|
def render(self, surface: pygame.Surface, offset=(0, 0)):
|
|
"""Zeichnet den Funken als kleines, in Flugrichtung gestrecktes Viereck."""
|
|
render_points = [
|
|
(
|
|
self.pos[0] + math.cos(self.angle) * self.speed * 3 - offset[0],
|
|
self.pos[1] + math.sin(self.angle) * self.speed * 3 - offset[1],
|
|
),
|
|
(
|
|
self.pos[0] + math.cos(self.angle + math.pi * 0.5) * self.speed * 0.5 - offset[0],
|
|
self.pos[1] + math.sin(self.angle + math.pi * 0.5) * self.speed * 0.5 - offset[1],
|
|
),
|
|
(
|
|
self.pos[0] + math.cos(self.angle + math.pi) * self.speed * 3 - offset[0],
|
|
self.pos[1] + math.sin(self.angle + math.pi) * self.speed * 3 - offset[1],
|
|
),
|
|
(
|
|
self.pos[0] + math.cos(self.angle - math.pi * 0.5) * self.speed * 0.5 - offset[0],
|
|
self.pos[1] + math.sin(self.angle - math.pi * 0.5) * self.speed * 0.5 - offset[1],
|
|
),
|
|
]
|
|
|
|
pygame.draw.polygon(surface, (255, 255, 180), render_points) # (255, 255, 180) |