Files
WarioWare-Black-and-WAH/microgames/ninevolt/insert_cartridge.py
T

86 lines
3.2 KiB
Python

# microgames/ninevolt/insert_cartridge.py
import pygame
from engine.scene import Scene
from settings import *
from engine.utils import scale_to_fit
class InsertCartridge(Scene):
def __init__(self, manager):
super().__init__(manager)
self.prompt = "Insert the cartridge!"
self.cartridge_rect = pygame.Rect(0, 0, 100, 100)
self.console_rect = pygame.Rect(0, 0, 200, 50)
self.cartridge_dragging = False
self.timer = 4.0 / self.manager.speed
self.state = "playing"
self.end_timer = 2.0
self.cartridge_image_raw = None
self.console_image_raw = None
# Load raw images
try:
self.cartridge_image_raw = pygame.image.load(resource_path("Assets/images/9volt/cartridge.png")).convert_alpha()
self.console_image_raw = pygame.image.load(resource_path("Assets/images/9volt/console.png")).convert_alpha()
except (pygame.error, FileNotFoundError) as e:
print(f"Error loading images for InsertCartridge: {e}")
def start(self):
self.timer = 4.0 / self.manager.speed
self.state = "playing"
self.end_timer = 2.0
self.cartridge_rect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 4)
self.console_rect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT * 3 // 4)
self.cartridge_dragging = False
def update(self, dt, time_left=None):
if self.state == "playing":
if time_left is not None and time_left <= 0:
self.end(False) # Failure due to timeout
mouse_pos = pygame.mouse.get_pos()
mouse_pressed = pygame.mouse.get_pressed()
if mouse_pressed[0]:
if self.cartridge_rect.collidepoint(mouse_pos):
self.cartridge_dragging = True
else:
self.cartridge_dragging = False
if self.cartridge_dragging:
self.cartridge_rect.center = mouse_pos
if self.console_rect.colliderect(self.cartridge_rect):
self.end(True) # Success
elif self.state == "success" or self.state == "failure":
self.end_timer -= dt
if self.end_timer <= 0:
self.manager.microgame_finished(self.state == "success", 'ninevolt')
def draw(self, screen):
screen.fill(NINEVOLT_BG_COLOR)
if self.state == "playing":
# Draw console
if self.console_image_raw:
scaled_img, scaled_rect = scale_to_fit(self.console_image_raw, self.console_rect)
screen.blit(scaled_img, scaled_rect)
else:
pygame.draw.rect(screen, (50, 50, 50), self.console_rect)
# Draw cartridge
if self.cartridge_image_raw:
scaled_img, scaled_rect = scale_to_fit(self.cartridge_image_raw, self.cartridge_rect)
screen.blit(scaled_img, scaled_rect)
else:
pygame.draw.rect(screen, (150, 150, 150), self.cartridge_rect)
# Timer is now drawn by GameManager
pass
def end(self, success):
if success:
self.state = "success"
else:
self.state = "failure"