forked from easonabc-public/paia-hw5
66 lines
2.7 KiB
Python
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
|