Загрузить файлы в «/»

This commit is contained in:
2025-11-04 06:15:33 +03:00
parent 46b75d19e4
commit 17b7d856a6
5 changed files with 4403 additions and 0 deletions

124
render_tiles.py Normal file
View File

@@ -0,0 +1,124 @@
import pygame
from typing import List, Dict
class RenderTiles:
def __init__(self, tile_size: int = 64):
self.tile_size = tile_size
self.tile_sprites = {}
def load_tile_sprites(self, asset_manifest: Dict) -> Dict:
self.tile_sprites = {}
for tile_type, sprite_path in asset_manifest.get('tiles', {}).items():
try:
sprite = pygame.image.load(sprite_path).convert_alpha()
self.tile_sprites[tile_type] = pygame.transform.scale(sprite, (self.tile_size, self.tile_size))
except pygame.error:
print(f"Failed to load tile sprite: {sprite_path}")
self.tile_sprites[tile_type] = self._create_placeholder_tile(tile_type)
return self.tile_sprites
def draw_map(self, surface: pygame.Surface, map_tiles: List[List[Dict]], camera: Dict) -> None:
if not map_tiles:
return
camera_x = camera.get('x', 0)
camera_y = camera.get('y', 0)
zoom = camera.get('zoom', 1.0)
screen_width = surface.get_width()
screen_height = surface.get_height()
start_col = max(0, int(camera_x // self.tile_size))
start_row = max(0, int(camera_y // self.tile_size))
end_col = min(len(map_tiles[0]), int((camera_x + screen_width / zoom) // self.tile_size) + 1)
end_row = min(len(map_tiles), int((camera_y + screen_height / zoom) // self.tile_size) + 1)
for row in range(start_row, end_row):
for col in range(start_col, end_col):
if row < len(map_tiles) and col < len(map_tiles[row]):
tile_data = map_tiles[row][col]
tile_type = tile_data.get('type', 'grass')
sprite = self.tile_sprites.get(tile_type, self._create_placeholder_tile(tile_type))
screen_x = (col * self.tile_size - camera_x) * zoom
screen_y = (row * self.tile_size - camera_y) * zoom
scaled_sprite = pygame.transform.scale(sprite, (int(self.tile_size * zoom), int(self.tile_size * zoom)))
surface.blit(scaled_sprite, (screen_x, screen_y))
def _create_placeholder_tile(self, tile_type: str) -> pygame.Surface:
surface = pygame.Surface((self.tile_size, self.tile_size), pygame.SRCALPHA)
color_map = {
'grass': (100, 200, 100),
'water': (100, 100, 255),
'mountain': (150, 150, 150),
'forest': (50, 150, 50),
'sand': (240, 230, 140)
}
color = color_map.get(tile_type, (200, 200, 200))
surface.fill(color)
pygame.draw.rect(surface, (50, 50, 50), surface.get_rect(), 1)
return surface