Ninja-Jump-and-run/scripts/spark.py

46 lines
1.7 KiB
Python
Raw Permalink Normal View History

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)