import math
import logging
import random
import uuid
from abc import ABC, abstractmethod
from easydict import EasyDict
from pygame.math import Vector2
from .base_manager import BaseManager
from gobigger.utils import format_vector, Border, SequenceGenerator
from gobigger.balls import FoodBall, ThornsBall, CloneBall, SporeBall
[docs]class SporeManager(BaseManager):
def __init__(self, cfg, border, random_generator=None, sequence_generator=None):
super(SporeManager, self).__init__(cfg, border)
if random_generator is not None:
self._random = random_generator
else:
self._random = random.Random()
if sequence_generator is not None:
self.sequence_generator = sequence_generator
else:
self.sequence_generator = SequenceGenerator()
[docs] def get_balls(self):
return list(self.balls.values())
[docs] def add_balls(self, balls):
if isinstance(balls, list):
for ball in balls:
self.balls[ball.ball_id] = ball
elif isinstance(balls, SporeBall):
self.balls[balls.ball_id] = balls
return True
[docs] def remove_balls(self, balls):
if isinstance(balls, list):
for ball in balls:
ball.remove()
try:
del self.balls[ball.ball_id]
except:
pass
elif isinstance(balls, SporeBall):
balls.remove()
try:
del self.balls[balls.ball_id]
except:
pass
def spawn_ball(self, position=None):
if position is None:
position = self.border.sample()
name = uuid.uuid1()
return SporeBall(name=name, position=position, border=self.border, score=self.ball_settings.score_init,
direction=Vector2(1,0))
def init_balls(self, custom_init=None):
# [position.x, position.y, score, direction.x, direction.y, vel.x, vel.y, acc.x, acc.y,
# move_time, moving]
if custom_init is not None:
for ball_cfg in custom_init:
ball = self.spawn_ball(position=Vector2(*ball_cfg[:2]))
if len(ball_cfg) > 2:
ball.direction = Vector2(*ball_cfg[2:4])
ball.vel = Vector2(*ball_cfg[4:6])
ball.move_frame = ball_cfg[6]
ball.moving = ball_cfg[7]
ball.owner = ball_cfg[8]
self.balls[ball.name] = ball
[docs] def step(self, duration):
return
def reset(self):
self.balls = {}
return True