def parse_tree(self: 'Panel', transform=Transform()): if self.has_inner_panels(): # print('panel has attributes %s, %s, %s, %s'%(self.x, self.y, self.width, self.height)) trans = Transform( transform.translation + Vector(self.x, self.y), transform.scale * Vector(self.width, self.height)) l = [Panel.parse_tree(p, trans) for p in self.inner_panels] return l else: p = self pos = Vector(p.x, p.y) size = Vector(p.width, p.height) pos = transform.transform_vector(pos) size *= transform.scale p.x = pos.x p.y = pos.y p.width = size.x p.height = size.y return p
def __init__(self, scale=50, initial_money=300, initial_health=50): self.draw_dim = scale #Arrays for Entities self.baddies: List[Enemy] = [] self.towers: List[Tower] = [] self.projs: List[Projectile] = [] self.shop = Shop(initial_money) self.player = Player(initial_health) #In-class time interval tracker self.now = 0 self.hovering = 0 #Class environment object self.gameEnv = Environment() #Background surface for game self.bgSurf = pygame.Surface( (self.draw_dim * len(self.gameEnv.board), self.draw_dim * len(self.gameEnv.board[0]))) #Drawing the background surface self.cached_background: pygame.Surface = None self.drawBG() self.cached_tower_background: pygame.Surface = None self.towerHoverImage = pygame.Surface((self.draw_dim, self.draw_dim)) self.towerHoverImage = self.towerHoverImage.convert_alpha() self.towerHoverImage.fill((0, 0, 0, 0)) self.towerHoverX, self.towerHoverY = 0, 0 self.holdingTower: Tower = None self.isHoldingTower = False self.mouse_position = Vector() self.enemy_spawner: Spawner = Spawner(self.enemyAdd, spawn_ticks=10)
def projMove(self, proj1): v = Vector(proj1.enemy.xpos * self.draw_dim, proj1.enemy.ypos * self.draw_dim) - Vector(proj1.realX, proj1.realY) v = v.normalize() * proj1.speed proj1.realX += v.x proj1.realY += v.y
DISPLAY = pygame.display.set_mode((WIDTH, HEIGHT)) yaml_layout = open("big_layout_test.yaml").read() # start menu layout panel_layouts = YAMLInstancer.get_multiple(yaml_layout, Panel, debug=False) layout_manager = LayoutManager() for panel_name, panel_layout in panel_layouts.items(): layout = Layout.layoutFromPanel(panel_layout) layout_manager.addLayout(layout, panel_name, set_current=True) screen_panels = layout.getPanelsOnRect((0, 0, WIDTH, HEIGHT)) elements_handler = ElementsHandler.from_panel_list(screen_panels) print('all elements: %s'%elements_handler.get_elements()) gui = GUI(elements_handler, layout_manager) # update / handle exiting mouse_position = Vector(0, 0) mouse_down = False mouse_pressed = False while True: mouse_pressed = False for e in pygame.event.get(): if e.type == pygame.MOUSEMOTION: mouse_position = Vector(e.pos[0], e.pos[1]) elif e.type == pygame.MOUSEBUTTONDOWN: mouse_pressed = True mouse_down = True elif e.type == pygame.MOUSEBUTTONUP: mouse_down = False elif e.type == pygame.QUIT: pygame.quit() sys.exit()
def getFloatPosition(self, current_time) -> Vector: return Vector(self.xpast, self.ypast) + Vector( self.xpos - self.xpast, self.ypos - self.ypast) * self.getLoopTime(current_time)