paia-hw5-fit/TankMan/src/Station.py

66 lines
2.7 KiB
Python

from os import path
import pygame
from mlgame.view.view_model import create_asset_init_data, create_image_view_data
from .env import IMAGE_DIR, WINDOW_HEIGHT, WINDOW_WIDTH
class Station(pygame.sprite.Sprite):
def __init__(self, construction, **kwargs):
super().__init__()
self.id = construction["_id"]
self.rect = pygame.Rect(construction["_init_pos"], construction["_init_size"])
self.power = kwargs["capacity"]
self.angle = 0
if self.rect.x >= WINDOW_WIDTH // 2 and self.rect.y < (WINDOW_HEIGHT - 100) // 2:
self.quadrant = 1
elif self.rect.x < WINDOW_WIDTH // 2 and self.rect.y < (WINDOW_HEIGHT - 100) // 2:
self.quadrant = 2
elif self.rect.x < WINDOW_WIDTH // 2 and self.rect.y >= (WINDOW_HEIGHT - 100) // 2:
self.quadrant = 3
else:
self.quadrant = 4
self.spawn_cd = kwargs["spawn_cd"]
self.cooldown = 0
self.is_alive = True
def update(self):
if not self.is_alive:
self.cooldown -= 1
if self.cooldown <= 0:
self.is_alive = True
def collect(self):
self.is_alive = False
self.cooldown = self.spawn_cd
def get_data_from_obj_to_game(self):
if 5 == self.id:
info = {"id": "oil", "x": self.rect.x, "y": self.rect.y, "power": self.power if self.is_alive else 0}
else:
info = {"id": "bullets", "x": self.rect.x, "y": self.rect.y, "power": self.power if self.is_alive else 0}
return info
def get_obj_progress_data(self):
if not self.is_alive:
return []
if 5 == self.id:
return create_image_view_data(f"oil", self.rect.x, self.rect.y
, self.rect.width, self.rect.height, self.angle)
else:
return create_image_view_data(f"bullets", self.rect.x, self.rect.y
, self.rect.width, self.rect.height, self.angle)
def get_obj_init_data(self):
bullets_id = "bullets"
oil_id = "oil"
bullets_url = f"https://raw.githubusercontent.com/Jesse-Jumbo/TankMan/main/asset/image/{bullets_id}.svg"
oil_url = f"https://raw.githubusercontent.com/Jesse-Jumbo/TankMan/main/asset/image/{oil_id}.svg"
image_init_data = [create_asset_init_data(bullets_id, self.rect.width, self.rect.height,
path.join(IMAGE_DIR, f"{bullets_id}.png"), bullets_url)
, create_asset_init_data(oil_id, self.rect.width, self.rect.height,
path.join(IMAGE_DIR, f"{oil_id}.png"), oil_url)]
return image_init_data