import random import pygame from level.LevelManager import LevelManager from physics.SpriteManager import SpriteManager, DrawLayers from physics.TickData import TickData from sprite.DynamicSprite import DynamicSprite from sprite.PositionScale import PositionScale from sprite.SpritesheetManager import SpritesheetManager from sprite.Sprite import Sprite from sprite.StaticSprite import StaticSprite from ui_elements.ClickEvent import ClickEvent from ui_elements.KeyEvent import KeyEvent from ui_elements.TextLabel import TextLabel what_to_run = 'physics' def apply_frame_rate(number: float): """ this function calculates a factor that will be multiplied with the physics of the game to provide a constant speed :param number: The number to scale by the factor :return: The scaled number """ return number / (frame_rate / 30) if what_to_run == 'level': csv_parse_test = LevelManager('data/levels') csv_parse_test.load_from_config('data/levels/levels.json') print(csv_parse_test.levels[0]) for row in csv_parse_test.levels[0].tiles: print(row) elif what_to_run == 'physics': screen_transform = PositionScale((0, 0), (4, 4)) pygame.init() screen = pygame.display.set_mode((600, 500)) pygame.display.set_caption("PM GAME") clock = pygame.time.Clock() frame_rate = 59.52 spritesheet_manager = SpritesheetManager("data/sprites", "data/sprites/sprites.json") sprite_manager = SpriteManager() test_1_sprite = DynamicSprite(spritesheet_manager.get_sheet("test_1")) test_1_sprite.position_scale = PositionScale((10, -100), (1, 1)) sprite_manager.add_ui_element(DrawLayers.OBJECTS, test_1_sprite) test_3_sprite = DynamicSprite(spritesheet_manager.get_sheet("test_1")) test_3_sprite.position_scale = PositionScale((130, 100), (1, 1)) test_3_sprite.motion = (-9, -10) sprite_manager.add_ui_element(DrawLayers.OBJECTS, test_3_sprite) test_2_sprite = StaticSprite(spritesheet_manager.get_sheet("test_1")) test_2_sprite.position_scale = PositionScale((10, 80), (1, 1)) sprite_manager.add_ui_element(DrawLayers.OBJECTS, test_2_sprite) text_1 = TextLabel("Frame: 0", 10, 110, 50, alignment="left") text_1.position_scale.scale = (0.1, 0.1) sprite_manager.add_ui_element(DrawLayers.UI, text_1) counter = 0 while True: clock.tick(frame_rate) skip = True pygame_events: list[pygame.event.Event] = pygame.event.get() key_events: list[KeyEvent] = KeyEvent.create_events(pygame_events) click_events: list[ClickEvent] = ClickEvent.create_events(pygame_events, screen_transform) for event in pygame_events: if event.type == pygame.QUIT: pygame.quit() quit() for key_event in key_events: if key_event.is_keymap_down(KeyEvent.KEY_RIGHT): skip = False if skip: continue counter += 1 text_1.set_text(f"Frame: {counter}") screen.fill((0, 0, 0)) sprite_manager.tick(TickData(apply_frame_rate(1), pygame_events, key_events, click_events, screen_transform)) sprite_manager.draw(screen, screen_transform) pygame.display.update() elif what_to_run == 'textlabel': screen_transform = PositionScale((0, 0), (4, 4)) pygame.init() screen = pygame.display.set_mode((800, 800)) pygame.display.set_caption("PM GAME") clock = pygame.time.Clock() test1 = TextLabel("Das ist ein Test", 100, 0, 50, alignment="left") test2 = TextLabel("Das ist ein Test", 100, 50, 50, alignment="left") test3 = TextLabel("Das ist ein Test", 100, 20, 50, alignment="left") test1.position_scale.scale = (0.2, 0.2) test2.position_scale.scale = (0.4, 0.4) test3.position_scale.scale = (0.2, 0.2) test3.visible = False while True: clock.tick(5) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() screen.fill((0, 0, 110)) test1.draw(screen, screen_transform) test2.draw(screen, screen_transform) test3.draw(screen, screen_transform) pygame.display.update() elif what_to_run == 'sprite': screen_transform = PositionScale((0, 0), (4, 4)) pygame.init() screen = pygame.display.set_mode((300, 300)) pygame.display.set_caption("PE GAME") clock = pygame.time.Clock() spritesheet_manager = SpritesheetManager("data/sprites", "data/sprites/sprites.json") test_1_sprite = Sprite(spritesheet_manager.get_sheet("test_1")) test_2_sprite = Sprite(spritesheet_manager.get_sheet("test_1")) test_1_sprite.position_scale = PositionScale((10, 10), (1, 1)) test_2_sprite.position_scale = PositionScale((60, 60), (1, 1)) # test_1_sprite.dump("debug.png") while True: clock.tick(5) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() screen.fill((0, 0, 0)) test_1_sprite.tick(1) test_1_sprite.draw(screen, screen_transform) test_2_sprite.tick(1) test_2_sprite.draw(screen, screen_transform) pygame.display.update() if random.randint(1, 10) == 1: test_1_sprite.set_animation_state(random.choice(["walk_r", "walk_l", "idle", "other_test"])) print(test_1_sprite.animation_state)