From 17eb9ca55f87c87a0ba47d81cd46e9e06caefe89 Mon Sep 17 00:00:00 2001 From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Sat, 1 Jul 2023 21:13:37 -0400 Subject: [PATCH] menu uses sdl2 now --- effect.py | 6 +- fruit.py | 13 +-- game.py | 2 +- image.png | Bin 0 -> 4695 bytes main.py | 22 +++-- menu.py | 128 +++++++++++++++++----------- out.prof | Bin 226850 -> 0 bytes player.py | 29 ++----- rect.py | 18 ++++ setup.py | 246 +++++++++++++----------------------------------------- test.py | 33 ++++++++ 11 files changed, 215 insertions(+), 282 deletions(-) create mode 100644 image.png delete mode 100644 out.prof create mode 100644 rect.py create mode 100644 test.py diff --git a/effect.py b/effect.py index 0035c3a..ba608dd 100644 --- a/effect.py +++ b/effect.py @@ -24,7 +24,7 @@ class BloodEffect: pygame.transform.rotate(pygame.transform.scale(frame, (int(self.radius * 2), int(self.radius * 2))), self.angle) for frame in random.choice(self.blood_frames)] if color is None: - color = random.choice(COLORS) + color = random.choice(EFFECT_COLORS) else: color = color for frame in self.frames: @@ -67,7 +67,7 @@ class BloodSplatter: color_frames = [dict(), dict()] - for c in COLORS: + for c in EFFECT_COLORS: for i, f in enumerate(blood_frames): c_f = f.copy() px_array = pygame.PixelArray(c_f) @@ -90,7 +90,7 @@ class BloodSplatter: self.alpha = 255 if color is None: - color = random.choice(COLORS) + color = random.choice(EFFECT_COLORS) self.frame = pygame.transform.rotate( pygame.transform.scale(self.color_frames[img_index][color], (int(self.radius * 2), int(self.radius * 2))), diff --git a/fruit.py b/fruit.py index 1c9e6f4..90128ec 100644 --- a/fruit.py +++ b/fruit.py @@ -36,10 +36,9 @@ class Fruit: self.image = pygame.transform.scale(random.choice(self.HEADS), (self.radius * 2, self.radius * 2)) self.angle = lerp(0, 360, random.random()) self.direction = random.choice([-1, 1]) - # self.angle = 0 - # self.direction = 0 self.width, self.height = (self.radius * 2, self.radius * 2) + self.fruit_txt = Texture.from_surface(renderer, self.image) def update(self, delta): # self.previous_position = self.position.copy() - self.velocity / 1000 * 30 @@ -52,12 +51,6 @@ class Fruit: return pygame.Rect(self.position - pygame.Vector2(self.radius / 2, self.radius / 2), pygame.Vector2(self.radius, self.radius)) - def draw(self, surf): - # rotated_image = pygame.transform.rotate(self.image, self.angle) - # new_rect = rotated_image.get_rect(center=self.image.get_rect(topleft=(self.position.x - self.radius, self.position.y - self.radius)).center) - # surf.blit(rotated_image, new_rect.topleft) - # pygame.draw.circle(surf, BLACK, self.position, self.radius) + def draw(self): if self.position.y - self.radius <= HEIGHT: - rotated_image, position = rotate_center(self.image, self.angle, self.position) - self.width, self.height = rotated_image.get_size() - surf.blit(rotated_image, position) + self.fruit_txt.draw(None, self.position - pygame.Vector2(self.radius,self.radius), angle=self.angle, origin=None) diff --git a/game.py b/game.py index 7fab447..eb3ecd6 100644 --- a/game.py +++ b/game.py @@ -121,7 +121,7 @@ class Game: for hit, mouse_direction, mouse_position in hits: - color = random.choice(COLORS) + color = random.choice(EFFECT_COLORS) self.effects[0].append( BloodSplatter(hit.position, hit.radius, determine_angle(hit.position, hit.position + mouse_direction),color)) self.effects[1].append(BloodEffect(hit.position, hit.radius,lighten(color, 0.15))) diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..73e6ada04baf51a389c83c7824212a69f84b1a97 GIT binary patch literal 4695 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 YsxVu-=5XC}1_lNOPgg&ebxsLQ038wW%K!iX literal 0 HcmV?d00001 diff --git a/main.py b/main.py index a76124d..f1051cc 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,8 @@ -from game import Game +# from game import Game from menu import Menu from setup import * + FPS = 60 clock = pygame.time.Clock() @@ -10,18 +11,23 @@ scene = Menu() is_running = True while is_running: delta = clock.tick(FPS) + renderer.clear() + + status = scene.update(delta) - scene.draw(screen) + scene.draw() + fps_text = font.render(f"FPS {int(clock.get_fps())}", True, WHITE) - screen.blit(fps_text, (WIDTH - fps_text.get_width() - 7, 0)) + fps_text_txt = Texture.from_surface(renderer, fps_text) + fps_text_txt.draw(None, (WIDTH - fps_text.get_width() - 7, 0)) - pygame.display.update() + renderer.present() if status == COMMAND_EXIT: is_running = False - elif status == COMMAND_START: - scene = Game() - elif status == COMMAND_MENU: - scene = Menu() + # elif status == COMMAND_START: + # scene = Game() + # elif status == COMMAND_MENU: + # scene = Menu() pygame.quit() diff --git a/menu.py b/menu.py index 74e6020..e7254e2 100644 --- a/menu.py +++ b/menu.py @@ -1,14 +1,12 @@ -import random - -import pygame - from setup import * from player import Player from fruit import Fruit from effect import SlashEffect, SplitEffect, BloodEffect, FadeOutEffect, BloodSplatter +from rect import Rect class Menu: + # Creating background image background = pygame.Surface((WIDTH, HEIGHT)) tile_cols = 4 tile_rows = 4 @@ -17,36 +15,60 @@ class Menu: for x in range(tile_cols): for y in range(tile_rows): background.blit(background_tile, (x * WIDTH / tile_cols, y * HEIGHT / tile_rows)) + bg_txt = Texture.from_surface(renderer, background) - slash_sounds = [pygame.mixer.Sound(f"assets/sounds/Swishes/long-medium-swish-44324.wav"), - pygame.mixer.Sound(f"assets/sounds/Swishes/swing-6045.wav"), - pygame.mixer.Sound(f"assets/sounds/Swishes/swish-sound-94707.wav"), - ] + # Slash sound effects + slash_sounds = [ + pygame.mixer.Sound(f"assets/sounds/Swishes/long-medium-swish-44324.wav"), + pygame.mixer.Sound(f"assets/sounds/Swishes/swing-6045.wav"), + pygame.mixer.Sound(f"assets/sounds/Swishes/swish-sound-94707.wav"), + ] def __init__(self): - self.background_music = pygame.mixer.music.load( - "assets/sounds/Of Far Different Nature - Ethnic Beat (CC-BY).ogg") + # Music + pygame.mixer.music.load("assets/sounds/Of Far Different Nature - Ethnic Beat (CC-BY).ogg") pygame.mixer.music.set_volume(0.5) pygame.mixer.music.play(-1) pygame.mixer.music.pause() + # Player self.player = Player() + + # Fruit self.fruit = Fruit() self.fruit.position = pygame.Vector2(WIDTH / 2, HEIGHT * 1.5 / 2.5) self.fruit.angle = 0 self.fruit.image = pygame.transform.scale(pygame.image.load("assets/fruits/58.png"), (self.fruit.radius * 2, self.fruit.radius * 2)) - + # Effects self.effects = [] + # Text surfaces self.title_surface = font_large.render("Fruit Shinobi", True, WHITE) self.tutorial_surface = font.render("Drag to slice the fruit", True, WHITE) self.controls_surface = font_small.render("Press M to unmute music", True, WHITE) - self.credit_surface = font_small.render("Made by: Skullheadx", True, WHITE) + + self.title_txt = Texture.from_surface(renderer, self.title_surface) + self.tutorial_txt = Texture.from_surface(renderer, self.tutorial_surface) + self.controls_txt = Texture.from_surface(renderer, self.controls_surface) + self.credit_txt = Texture.from_surface(renderer, self.credit_surface) + + # Rect textures + self.tutorial_surface_pos = ( + WIDTH / 2, HEIGHT * 2 / 3 + self.tutorial_surface.get_height() / 2 + self.fruit.get_rect().height + 30) + + self.r1 = Rect(self.tutorial_surface.get_rect(center=self.tutorial_surface_pos).inflate(25, 25), DARK_GRAY, 10) + self.r2 = Rect(self.tutorial_surface.get_rect(center=self.tutorial_surface_pos).inflate(25, 25), BLACK, 10, 5) + + self.r3 = Rect(self.title_surface.get_rect(center=(WIDTH / 2, HEIGHT / 3)).inflate(50, 50), GRAY, 10) + self.r4 = Rect(self.title_surface.get_rect(center=(WIDTH / 2, HEIGHT / 3)).inflate(50, 50), BLACK, 10, 5) + + # blacked out self.blacked_out = False def update(self, delta): + # Event handling for event in pygame.event.get(): if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE): pygame.mixer.music.stop() @@ -57,30 +79,41 @@ class Menu: pygame.mixer.music.pause() else: pygame.mixer.music.unpause() + + # Update player self.player.update(delta) + # Update fruit if not self.blacked_out: - hit_status = self.player.hits(self.fruit) - if hit_status and SplitEffect.should_split(self.fruit.image, self.fruit.angle, self.fruit.position, self.player.previous_mouse_pos, self.player.mouse_direction): - color = random.choice(COLORS) - self.effects.append(BloodEffect(self.fruit.position, self.fruit.radius,lighten(color, 0.15))) - - half1, half2, pos1, pos2 = SplitEffect.split_image(self.fruit.image, self.fruit.angle, self.fruit.position, self.player.previous_mouse_pos, - self.player.mouse_direction) - + hit_status = self.player.hits(self.fruit) # Check if player hits fruit + # Check if fruit should split + if hit_status and SplitEffect.should_split(self.fruit.image, self.fruit.angle, self.fruit.position, + self.player.previous_mouse_pos, self.player.mouse_direction): + # Split fruit + color = random.choice(EFFECT_COLORS) + n1, n2 = SplitEffect.find_normals(self.player.mouse_direction.normalize() * 5) + + self.effects.append(BloodEffect(self.fruit.position, self.fruit.radius, lighten(color, 0.15))) + half1, half2, pos1, pos2 = SplitEffect.split_image(self.fruit.image, self.fruit.angle, + self.fruit.position, self.player.previous_mouse_pos, + self.player.mouse_direction) self.effects.append(BloodSplatter(self.fruit.position, self.fruit.radius, determine_angle(self.fruit.position, - self.fruit.position + self.player.mouse_direction),color)) - self.effects.append(SlashEffect(self.fruit.position, self.fruit.angle)) + self.fruit.position + self.player.mouse_direction), + color)) - n1, n2 = SplitEffect.find_normals(self.player.mouse_direction.normalize()) - c = 5 - self.effects.append(SplitEffect(pos1, half1, pygame.Vector2(0,0), n1 * c)) - self.effects.append(SplitEffect(pos2, half2, pygame.Vector2(0,0), n2 * c)) + self.effects.append(SplitEffect(pos1, half1, pygame.Vector2(0, 0), n1)) + self.effects.append(SplitEffect(pos2, half2, pygame.Vector2(0, 0), n2)) + self.effects.append(SlashEffect(self.fruit.position, self.fruit.angle)) + # Play slash sound pygame.mixer.Sound.play(random.choice(self.slash_sounds)) + + # cue fadeout self.blacked_out = True self.effects.append(FadeOutEffect()) + + # Update effects for effect in self.effects: effect_status = effect.update(delta) if effect_status: @@ -88,28 +121,27 @@ class Menu: return COMMAND_START self.effects.remove(effect) - def draw(self, surf): - surf.blit(self.background, (0, 0)) + def draw(self): + self.bg_txt.draw(None, (0, 0)) + if not self.blacked_out: - self.fruit.draw(surf) + self.fruit.draw() + + self.r1.draw() + self.r2.draw() + + self.tutorial_txt.draw(None, self.tutorial_surface.get_rect( + center=self.tutorial_surface_pos)) + + self.r3.draw() + self.r4.draw() + + self.title_txt.draw(None, self.title_surface.get_rect(center=(WIDTH / 2, HEIGHT / 3))) + + self.controls_txt.draw(None, self.controls_surface.get_rect(bottomleft=(10, HEIGHT - 10))) + self.credit_txt.draw(None, self.credit_surface.get_rect(bottomright=(WIDTH - 10, HEIGHT - 10))) + + self.player.draw() - tutorial_surface_pos = ( - WIDTH / 2, HEIGHT * 2 / 3 + self.tutorial_surface.get_height() / 2 + self.fruit.get_rect().height + 30) - pygame.draw.rect(surf, DARK_GRAY, self.tutorial_surface.get_rect(center=tutorial_surface_pos).inflate(25, 25), - border_radius=10) - pygame.draw.rect(surf, BLACK, self.tutorial_surface.get_rect(center=tutorial_surface_pos).inflate(25, 25), 5, - border_radius=10) - surf.blit(self.tutorial_surface, self.tutorial_surface.get_rect( - center=tutorial_surface_pos)) - - pygame.draw.rect(surf, GRAY, self.title_surface.get_rect(center=(WIDTH / 2, HEIGHT / 3)).inflate(50, 50), - border_radius=10) - pygame.draw.rect(surf, BLACK, self.title_surface.get_rect(center=(WIDTH / 2, HEIGHT / 3)).inflate(50, 50), 5, - border_radius=10) - surf.blit(self.title_surface, self.title_surface.get_rect(center=(WIDTH / 2, HEIGHT / 3))) - - surf.blit(self.controls_surface, self.controls_surface.get_rect(bottomleft=(10, HEIGHT - 10))) - surf.blit(self.credit_surface, self.credit_surface.get_rect(bottomright=(WIDTH - 10, HEIGHT - 10))) - self.player.draw(surf) for effect in self.effects: - effect.draw(surf) + effect.draw() diff --git a/out.prof b/out.prof deleted file mode 100644 index 9d6452d944dc41cba8c968903c5c9de8ae10f25e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226850 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%0Db&gP{gwg#xHC06O~|mH|K~h!=r~ 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®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

a{?+F7RZMW2nb{rvP*+swJf8 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

iY8~z``E>UK; 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 diff --git a/player.py b/player.py index 91a6e83..7883670 100644 --- a/player.py +++ b/player.py @@ -74,27 +74,10 @@ class Player: return True return False - def draw(self, surf): - # for line in self.lines: - # pygame.draw.circle(surf, BLUE, line[0], 5) - # # pygame.draw.rect(surf, RED, hitbox) - # pygame.draw.line(surf, GREEN, line[0], line[1], 4) - # mx, my = line[1] - line[0] - # if mx == 0: - # mx = 0.01 - # m = my / mx - # c = line[0].y - m * line[0].x - # - # x1 = line[0].x - # y1 = m * x1 + c - # x2 = line[1].x - # y2 = m * x2 + c - # - # pygame.draw.line(surf, RED, (x1, y1), (x2, y2), 4) - # pygame.draw.rect(surf, RED, hitbox) - # pygame.draw.line(surf, RED, line[0], line[1], 4) - # for pos, time in self.sliced_points: - # pygame.draw.circle(surf, RED, pos, 3) + def draw(self): + renderer.draw_color = LIGHT_GRAY if len(self.sliced_points) > 1: - pygame.draw.lines(surf, BLACK, False, [a for a, b in self.sliced_points], 6) - pygame.draw.lines(surf, LIGHT_GRAY, False, [a for a, b in self.sliced_points], 4) + for i in range(len(self.sliced_points) - 1): + renderer.draw_line(self.sliced_points[i][0], self.sliced_points[i + 1][0]) + renderer.draw_line(self.previous_mouse_pos, self.previous_mouse_pos - self.mouse_direction) + diff --git a/rect.py b/rect.py new file mode 100644 index 0000000..7c0fbf6 --- /dev/null +++ b/rect.py @@ -0,0 +1,18 @@ +from setup import * + + +def get_rect_txt(rect, color, border_radius, thickness=0): + r = pygame.Surface((rect.width, rect.height), pygame.SRCALPHA) + pygame.draw.rect(r, color, (0, 0, rect.width, rect.height), border_radius=border_radius, + width=thickness) + return Texture.from_surface(renderer, r) + + +class Rect: + + def __init__(self, rect, color, border_radius=0, thickness=0): + self.position = pygame.Vector2(rect.x, rect.y) + self.texture = get_rect_txt(rect, color, border_radius, thickness) + + def draw(self): + self.texture.draw(None, self.position) diff --git a/setup.py b/setup.py index 9b85da7..3ff1d53 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ import pygame +from pygame._sdl2 import Window, Renderer, Texture import random import os import math @@ -6,7 +7,9 @@ from functools import cache pygame.init() WIDTH, HEIGHT = pygame.display.Info().current_w, pygame.display.Info().current_h -screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.FULLSCREEN) +display = pygame.display.set_mode((WIDTH, HEIGHT)) +window = Window.from_display_module() +renderer = Renderer(window) SCALE = pygame.Vector2(WIDTH / 1536, HEIGHT / 864) @@ -20,76 +23,61 @@ font = pygame.font.Font("assets/font/go3v2.ttf", int(60 * SCALE.x)) font_large = pygame.font.Font("assets/font/go3v2.ttf", int(100 * SCALE.x)) # colors -WHITE = (255, 255, 255) -LIGHT_GRAY = (211, 211, 211) -GRAY = (128, 128, 128) -DARK_GRAY = (25, 25, 25) -BLACK = (0, 0, 0) - -RED = (255, 0, 0) -GREEN = (0, 255, 0) -BLUE = (0, 0, 255) -ORANGE = (255, 165, 0) -YELLOW = (255, 255, 0) -PURPLE = (128, 0, 128) - -BROWN = (139, 69, 19) -DARK_BROWN = (119, 49, 0) - -DARK_RED = (139, 0, 0) -DARK_GREEN = (0, 100, 0) -DARK_BLUE = (0, 0, 139) -DARK_ORANGE = (255, 140, 0) -DARK_YELLOW = (255, 215, 0) -DARK_PURPLE = (75, 0, 130) - -DEFAULT_COLORS = [ - RED, - GREEN, - BLUE, - ORANGE, - YELLOW, - PURPLE, - DARK_RED, - DARK_GREEN, - DARK_BLUE, - DARK_ORANGE, - DARK_YELLOW, - DARK_PURPLE -] - -COLORS = [ - (252, 166, 168), - (247, 203, 168), - (203, 172, 239), - (160, 247, 208), - (222, 244, 141), - (205, 255, 135), - (174, 252, 201), - (247, 167, 111), - (225, 162, 239), - (209, 239, 119), - (211, 255, 178), - (119, 249, 215), - (252, 113, 146), - (204, 247, 160), - (247, 161, 148), - (218, 186, 255), - (112, 239, 116), - (237, 186, 125), - (198, 202, 255), - (197, 252, 174), +WHITE = (255, 255, 255, 255) +LIGHT_GRAY = (211, 211, 211, 255) +GRAY = (128, 128, 128, 255) +DARK_GRAY = (25, 25, 25, 255) +BLACK = (0, 0, 0, 255) + +RED = (255, 0, 0, 255) +GREEN = (0, 255, 0, 255) +BLUE = (0, 0, 255, 255) +ORANGE = (255, 165, 0, 255) +YELLOW = (255, 255, 0, 255) +PURPLE = (128, 0, 128, 255) + +BROWN = (139, 69, 19, 255) +DARK_BROWN = (119, 49, 0, 255) + +DARK_RED = (139, 0, 0, 255) +DARK_GREEN = (0, 100, 0, 255) +DARK_BLUE = (0, 0, 139, 255) +DARK_ORANGE = (255, 140, 0, 255) +DARK_YELLOW = (255, 215, 0, 255) +DARK_PURPLE = (75, 0, 130, 255) + +EFFECT_COLORS = [ + (252, 166, 168, 255), + (247, 203, 168, 255), + (203, 172, 239, 255), + (160, 247, 208, 255), + (222, 244, 141, 255), + (205, 255, 135, 255), + (174, 252, 201, 255), + (247, 167, 111, 255), + (225, 162, 239, 255), + (209, 239, 119, 255), + (211, 255, 178, 255), + (119, 249, 215, 255), + (252, 113, 146, 255), + (204, 247, 160, 255), + (247, 161, 148, 255), + (218, 186, 255, 255), + (112, 239, 116, 255), + (237, 186, 125, 255), + (198, 202, 255, 255), + (197, 252, 174, 255), ] def darken(color, factor=0.5): - r, g, b = color - return (r * factor, g * factor, b * factor) + r, g, b, a = color + return r * factor, g * factor, b * factor, a def lighten(color, factor=0.5): - r, g, b = color - return (min(255, r * (1 + factor)), min(255, g * (1 + factor)), min(255, b * (1 + factor))) + r, g, b, a = color + return min(255, r * (1 + factor)), min(255, g * (1 + factor)), min(255, b * (1 + factor)), a # commands @@ -97,11 +85,6 @@ COMMAND_EXIT = 0 COMMAND_START = 1 COMMAND_MENU = 2 -screen.fill(BROWN) -loading_text = font_large.render("Loading...", True, BLACK) -screen.blit(loading_text, loading_text.get_rect(center=(WIDTH / 2, HEIGHT / 2))) -pygame.display.update() - def lerp(start, end, weight): return weight * (end - start) + start @@ -118,134 +101,19 @@ def rotate(image, angle): def rotate_center(image, angle, position): rotated_image = rotate(image, round(angle)) - new_rect = rotated_image.get_rect(center=image.get_rect(topleft=( - position.x - image.get_rect().width / 2, position.y - image.get_rect().height / 2)).center) + new_rect = rotated_image.get_rect(center=image.get_rect(topleft=(position.x - image.get_rect().width / 2, + position.y - image.get_rect().height / 2)).center) return rotated_image, new_rect.topleft def determine_angle(pos1, pos2): pos1 = pygame.Vector2(pos1) pos2 = pygame.Vector2(pos2) - if pos1.x == pos2.x: pos2.x += 0.0001 - a = math.degrees(math.atan((pos2.y - pos1.y) / (pos2.x - pos1.x))) - - # if pos2.x < pos1.x: - # a += 180 return -a -# def split_image(image, angle, image_position, mouse_position, mouse_direction): -# img = image.copy() -# ip = pygame.Vector2(img.get_width() / 2, img.get_height() / 2) -# mp = mouse_position - ip -# -# if mouse_direction.x == 0: -# a = 90 -# else: -# a = math.degrees(math.atan(mouse_direction.y/mouse_direction.x)) -# -# mp.rotate_ip(-a) -# mp += ip -# -# pygame.draw.line(img, RED,mouse_position-image_position, mouse_direction * 100+ mouse_position-image_position, 20) -# -# rot_img,pos = rotate_center(img, -a, image_position) -# return img, rot_img, (WIDTH/2, HEIGHT/2), (0,0) -# crop_y = clamp(int(mp.y), 0, img.get_height()) -# -# half1 = pygame.transform.rotate(img2.subsurface((0, 0, img.get_width(), crop_y)), a) -# half2 = pygame.transform.rotate(img2.subsurface((0, crop_y, img.get_width(), img.get_height() - crop_y)), a) -# # -# # return half1, half2, half1.get_rect(topleft=pos1).center, half2.get_rect(topleft=pos2).center - -# good one :D -# def split_image(image, angle, image_position, mouse_position, mouse_direction): -# img = image.copy() -# -# if mouse_direction.x == 0: -# mouse_direction.x += 0.0001 -# -# a = math.degrees(math.atan(mouse_direction.y / mouse_direction.x)) -# -# img = rotate_center(img, a, pygame.Vector2(0, 0))[0] -# -# top_left = pygame.Vector2(image_position) - pygame.Vector2(img.get_width() / 2, img.get_height() / 2) -# rot_center = pygame.Vector2(image_position) - top_left -# -# # finding end and start points of the splitting line -# # [x,y] = mouse_position + t * mouse_direction # vector equation -# # x = mouse_position.x + t * mouse_direction.x -# # y = mouse_position.y + t * mouse_direction.y -# -# mp = mouse_position - top_left -# -# t1 = (- mp.x) / mouse_direction.x -# p1 = mp + t1 * mouse_direction -# -# t2 = (img.get_width() - mp.x) / mouse_direction.x -# p2 = mp + t2 * mouse_direction -# -# p3 = (p1 - rot_center).rotate(-a) + rot_center -# p4 = (p2-rot_center).rotate(-a) + rot_center -# -# half1 = img.subsurface(pygame.Rect(0, 0, img.get_width(), clamp(p3.y,0, img.get_height()))) -# half2 = img.subsurface(pygame.Rect(0, clamp(p3.y,0, img.get_height()), img.get_width(), clamp(img.get_height() - p3.y, 0, img.get_height()))) -# -# p5 = half1.get_rect().center - rot_center -# pos1 = (p5).rotate(a) + image_position -# -# p6 = half2.get_rect().center - rot_center + pygame.Vector2(0, clamp(p3.y,0, img.get_height())) -# pos2 = (p6).rotate(a) + image_position -# -# r_half1 = pygame.transform.rotate(half1, -a) -# r_half2 = pygame.transform.rotate(half2, -a) -# -# return r_half1, r_half2, pos1, pos2 - - -# def split_image(image, angle, pos1, pos2, image_position): -# pos1 = pygame.Vector2(pos1) - image_position + pygame.Vector2(image.get_width() / 2, image.get_height() / 2) -# pos2 = pygame.Vector2(pos2) - image_position + pygame.Vector2(image.get_width() / 2, image.get_height() / 2) -# -# if pos1.x == pos2.x: -# pos2.x += 0.0001 -# -# img = image.copy() -# -# center = pygame.Vector2(img.get_width() / 2, img.get_height() / 2) -# -# # pygame.draw.circle(img, BLACK, center, 5) -# # pygame.draw.circle(img, RED, pos1, 15) -# # pygame.draw.circle(img, GREEN, pos2, 15) -# # pygame.draw.line(img, BLACK, pos1, pos2, 5) -# -# a = math.degrees(math.atan((pos2.y - pos1.y) / (pos2.x - pos1.x))) -# img = rotate_center(img, a, pygame.Vector2(0, 0))[0] -# p1 = (pos1 - center).rotate(-a) + img.get_rect().center -# p2 = (pos2 - center).rotate(-a) + img.get_rect().center -# -# # pygame.draw.circle(img, BLACK, center, 5) -# # pygame.draw.circle(img, BLUE, p1, 15) -# # pygame.draw.circle(img, WHITE, p2, 15) -# -# rot_center = pygame.Vector2(img.get_width() / 2, img.get_height() / 2) -# p3 = (-rot_center.copy()).rotate(-a) + center -# p4 = pygame.Vector2(-image.get_width() / 2, 0).rotate(-a) + center -# -# half1 = pygame.transform.rotate(img.subsurface(pygame.Rect(0, 0, img.get_width(), min(p1.y, img.get_height()))), -# -a).convert_alpha() -# half2 = pygame.transform.rotate( -# img.subsurface(pygame.Rect(0, min(p1.y, img.get_height()), img.get_width(), max(img.get_height() - p1.y, 0))), -# -a).convert_alpha() -# # -# if 0 < a < 90: -# p3, p4 = p4, p3 -# -# half1, pos1 = rotate_center(half1, angle, -# p3 + image_position + pygame.Vector2(half1.get_width() / 2, half1.get_height() / 2)) -# half2, pos2 = rotate_center(half2, angle, -# p4 + image_position + pygame.Vector2(half2.get_width() / 2, half2.get_height() / 2)) -# -# return half1, half2, pos1, pos2 + + + diff --git a/test.py b/test.py new file mode 100644 index 0000000..143e804 --- /dev/null +++ b/test.py @@ -0,0 +1,33 @@ +import pygame +from pygame._sdl2 import Window, Renderer, Texture + +class App: + + def __init__(self): + pygame.init() + + self.clock = pygame.time.Clock() + self.display = pygame.display.set_mode((1366, 768)) + self.window = Window.from_display_module() + self.renderer = Renderer(self.window) + self.renderer.draw_color = (255, 0, 0, 255) + + a_surface = pygame.image.load('image.png') + self.an_image = Texture.from_surface(self.renderer, a_surface) + + def run(self): + while True: + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + raise SystemExit + + self.renderer.clear() + self.an_image.draw(None, (20, 20)) + self.renderer.present() + self.clock.tick(60) + + +app = App() +app.run() \ No newline at end of file -- 2.54.0