|
|
|
|
@ -40,7 +40,15 @@ class GameWindow:
|
|
|
|
|
self.audio_devs = [] |
|
|
|
|
for i in range(5): |
|
|
|
|
self.audio_devs.append((True, sdl2.SDL_OpenAudioDevice(None, 0, SDL_AudioSpec(freq=22050, aformat=sdl2.AUDIO_U8, channels=1, samples=2048), None, 0))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_texture(self, tiles: list): |
|
|
|
|
bg_surface = sdl2.SDL_CreateRGBSurface(0, self.width, self.height, 32, 0, 0, 0, 0) |
|
|
|
|
for tile in tiles: |
|
|
|
|
dstrect = sdl2.SDL_Rect(tile[1], tile[2], self.cell_size, self.cell_size) |
|
|
|
|
sdl2.SDL_BlitSurface(tile[0], None, bg_surface, dstrect) |
|
|
|
|
bg_texture = self.factory.from_surface(bg_surface) |
|
|
|
|
sdl2.SDL_FreeSurface(bg_surface) |
|
|
|
|
return bg_texture |
|
|
|
|
|
|
|
|
|
def load_joystick(self): |
|
|
|
|
sdl2.SDL_Init(sdl2.SDL_INIT_JOYSTICK) |
|
|
|
|
@ -53,7 +61,7 @@ class GameWindow:
|
|
|
|
|
fonts.update({i: sdl2.ext.FontManager(font_path=font_file, size=i)}) |
|
|
|
|
return fonts |
|
|
|
|
|
|
|
|
|
def load_image(self, path, transparent_color=None): |
|
|
|
|
def load_image(self, path, transparent_color=None, surface=False): |
|
|
|
|
image_path = os.path.join("assets", path) |
|
|
|
|
image = Image.open(image_path) |
|
|
|
|
if transparent_color: |
|
|
|
|
@ -67,6 +75,8 @@ class GameWindow:
|
|
|
|
|
new_data.append(item) |
|
|
|
|
image.putdata(new_data) |
|
|
|
|
scale = self.cell_size // 20 |
|
|
|
|
if surface: |
|
|
|
|
return sdl2.ext.pillow_to_surface(image.resize((image.width * scale, image.height * scale), Image.NEAREST)) |
|
|
|
|
image = image.resize((image.width * scale, image.height * scale), Image.NEAREST) |
|
|
|
|
return self.factory.from_surface(sdl2.ext.pillow_to_surface(image)) |
|
|
|
|
|
|
|
|
|
@ -77,6 +87,9 @@ class GameWindow:
|
|
|
|
|
else: |
|
|
|
|
sprite.position = position |
|
|
|
|
self.renderer.copy(sprite, dstrect=sprite.position) |
|
|
|
|
|
|
|
|
|
def draw_background(self, bg_texture): |
|
|
|
|
self.renderer.copy(bg_texture, dstrect=sdl2.SDL_Rect(0, 0, self.width, self.height)) |
|
|
|
|
|
|
|
|
|
def draw_image(self, x, y, sprite, tag, anchor="nw"): |
|
|
|
|
if not self.is_in_visible_area(x, y): |
|
|
|
|
@ -144,7 +157,7 @@ class GameWindow:
|
|
|
|
|
sdl2.SDL_SetWindowFullscreen(self.window.window, flag) |
|
|
|
|
|
|
|
|
|
def is_in_visible_area(self, x, y): |
|
|
|
|
return -self.w_offset <= x <= self.width - self.w_offset and -self.h_offset <= y <= self.height - self.h_offset |
|
|
|
|
return -self.w_offset -self.cell_size <= x <= self.width - self.w_offset and -self.h_offset -self.cell_size <= y <= self.height - self.h_offset |
|
|
|
|
|
|
|
|
|
def mainloop(self, **kwargs): |
|
|
|
|
while self.running: |
|
|
|
|
@ -177,6 +190,7 @@ class GameWindow:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Disegna qui gli sprite |
|
|
|
|
#sdl2.SDL_RenderSetClipRect(self.renderer.sdlrenderer, sdl2.SDL_Rect(self.w_offset, self.h_offset, self.target_size[0], self.target_size[1])) |
|
|
|
|
self.renderer.present() |
|
|
|
|
self.performance = (sdl2.SDL_GetPerformanceCounter() - performance_start) / sdl2.SDL_GetPerformanceFrequency() * 1000 |
|
|
|
|
if self.performance < self.delay: |
|
|
|
|
@ -250,5 +264,5 @@ class GameWindow:
|
|
|
|
|
if not dev[0]: |
|
|
|
|
sdl2.SDL_PauseAudioDevice(dev[1], 1) |
|
|
|
|
sdl2.SDL_ClearQueuedAudio(dev[1]) |
|
|
|
|
dev[0] = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|