Files
PyTaiko/libs/bg_objects/bg_normal.py
Anthony Samms 0720f9d539 fix backgrounds
2025-11-20 09:38:47 -05:00

136 lines
5.9 KiB
Python

import random
from libs.animation import Animation
from libs.texture import TextureWrapper
class BGNormal:
@staticmethod
def create(tex: TextureWrapper, index: int, path: str = 'background'):
map = [BGNormal1, BGNormal2, BGNormal3, BGNormal4, BGNormal5]
selected_obj = map[index]
return selected_obj(tex, index, path)
class BGNormalBase:
def __init__(self, tex: TextureWrapper, index: int, path: str):
self.name = "bg_" + str(index)
self.tex = tex
tex.load_zip(path, f'bg_normal/{self.name}')
def update(self, current_time_ms: float):
pass
def draw(self, tex: TextureWrapper):
tex.draw_texture(self.name, 'background')
class BGNormal1(BGNormalBase):
def __init__(self, tex: TextureWrapper, index: int, path: str):
super().__init__(tex, index, path)
self.flicker = tex.get_animation(9)
def update(self, current_time_ms: float):
self.flicker.update(current_time_ms)
def draw(self, tex: TextureWrapper):
tex.draw_texture(self.name, 'background')
tex.draw_texture(self.name, 'overlay', fade=self.flicker.attribute)
class BGNormal2(BGNormalBase):
def __init__(self, tex: TextureWrapper, index: int, path: str):
super().__init__(tex, index, path)
self.flicker = tex.get_animation(9)
def update(self, current_time_ms: float):
self.flicker.update(current_time_ms)
def draw(self, tex: TextureWrapper):
tex.draw_texture(self.name, 'background')
tex.draw_texture(self.name, 'overlay', fade=self.flicker.attribute)
class BGNormal3(BGNormalBase):
def __init__(self, tex: TextureWrapper, index: int, path: str):
super().__init__(tex, index, path)
self.flicker = tex.get_animation(10)
def update(self, current_time_ms):
self.flicker.update(current_time_ms)
def draw(self, tex: TextureWrapper):
tex.draw_texture(self.name, 'background')
tex.draw_texture(self.name, 'center')
tex.draw_texture(self.name, 'overlay')
tex.draw_texture(self.name, 'lamps', index=0)
tex.draw_texture(self.name, 'lamps', index=1, mirror='horizontal')
tex.draw_texture(self.name, 'light_orange', index=0, fade=self.flicker.attribute)
tex.draw_texture(self.name, 'light_orange', index=1, fade=self.flicker.attribute)
tex.draw_texture(self.name, 'light_red', fade=self.flicker.attribute)
tex.draw_texture(self.name, 'light_green', fade=self.flicker.attribute)
tex.draw_texture(self.name, 'light_orange', index=2, fade=self.flicker.attribute)
tex.draw_texture(self.name, 'light_yellow', index=0, fade=self.flicker.attribute)
tex.draw_texture(self.name, 'light_yellow', index=1, fade=self.flicker.attribute)
tex.draw_texture(self.name, 'side_l')
tex.draw_texture(self.name, 'side_l_2')
tex.draw_texture(self.name, 'side_r')
class BGNormal4(BGNormalBase):
class Petal:
def __init__(self, tex: TextureWrapper):
self.spawn_point = self.random_excluding_range(tex.screen_width)
duration = random.randint(1400, 2000)
self.move_x = Animation.create_move(duration, total_distance=random.randint(int(-300 * tex.screen_scale), int(300 * tex.screen_scale)))
self.move_y = Animation.create_move(duration, total_distance=tex.screen_height//2)
self.move_x.start()
self.move_y.start()
def random_excluding_range(self, screen_width):
while True:
num = random.randint(0, screen_width)
if num < 260 or num > 540:
return num
def update(self, current_time_ms):
self.move_x.update(current_time_ms)
self.move_y.update(current_time_ms)
def draw(self, name: str, tex: TextureWrapper):
tex.draw_texture(name, 'petal', x=self.spawn_point + self.move_x.attribute, y=tex.screen_height//2+self.move_y.attribute, fade=0.75)
def __init__(self, tex: TextureWrapper, index: int, path: str):
super().__init__(tex, index, path)
self.flicker = tex.get_animation(11)
self.turtle_move = tex.get_animation(12)
self.turtle_change = tex.get_animation(13)
self.petals = {self.Petal(tex), self.Petal(tex), self.Petal(tex), self.Petal(tex), self.Petal(tex)}
def update(self, current_time_ms: float):
self.flicker.update(current_time_ms)
self.turtle_move.update(current_time_ms)
self.turtle_change.update(current_time_ms)
for petal in self.petals:
petal.update(current_time_ms)
if petal.move_y.is_finished:
self.petals.remove(petal)
self.petals.add(self.Petal(self.tex))
def draw(self, tex: TextureWrapper):
tex.draw_texture(self.name, 'background')
tex.draw_texture(self.name, 'chara')
tex.draw_texture(self.name, 'turtle', frame=self.turtle_change.attribute, x=self.turtle_move.attribute)
tex.draw_texture(self.name, 'overlay')
for petal in self.petals:
petal.draw(self.name, tex)
class BGNormal5(BGNormalBase):
def __init__(self, tex: TextureWrapper, index: int, path: str):
super().__init__(tex, index, path)
self.flicker = tex.get_animation(14)
def update(self, current_time_ms: float):
self.flicker.update(current_time_ms)
def draw(self, tex: TextureWrapper):
tex.draw_texture(self.name, 'background')
for i in range(10):
tex.draw_texture(self.name, 'paper_lamp', frame=9-i, index=i)
for i in range(10):
tex.draw_texture(self.name, 'light_overlay', index=i, fade=self.flicker.attribute)
tex.draw_texture(self.name, 'overlay', fade=0.75)
tex.draw_texture(self.name, 'lamp_overlay', index=0, fade=0.75)
tex.draw_texture(self.name, 'lamp_overlay', index=1, fade=0.75)
tex.draw_texture(self.name, 'lamp', index=0)
tex.draw_texture(self.name, 'lamp', index=1)