import pygame from Classes.Engine.Logger import Logger from Classes.Engine.Components.BoardField import BoardField from Classes.Engine.Components.Label import Label from Classes.Game.Cards.MonsterCard import MonsterCard from Classes.Game.Cards.SpellCard import SpellCard from Classes.Game.Cards.TrapCard import TrapCard from Classes.Engine.InputHandler import InputHandler from Classes.Game.Player import Player from Classes.Game.Cards.Card import Card from Classes.Engine.Utils.Path import PathUtil class World(): __boardFields:list __player:Player __enemy:Player __labels:list __cards:pygame.sprite.Group() __PlayerHandCards:pygame.sprite.Group() __screen:pygame.surface __cardWidth:int = 150 __cardHeight:int = 200 __cardOffset:int = 400 __logger:Logger def __init__(self, logger:Logger, screen:pygame.surface, cardWidth:int=200, cardHeight:int=250, cardOffset:int=400): self.__logger = logger self.__logger.info("initializing world") self.__boardFields = [] self.__labels = [] self.__cards = pygame.sprite.Group() self.__PlayerHandCards = pygame.sprite.Group() self.__screen = screen self.__cardWidth = cardWidth self.__cardHeight = cardHeight self.__cardOffset = cardOffset self.__player = None self.__enemy = None self.buildGameWorld() def buildGameWorld(self): # construct elements around the player field self.__logger.info("building game world") # presets the y position later passed down to the vector2 eRow1Height = 85 eRow2Height = (self.__cardHeight + 45) pRow1Height = ((2 * self.__cardHeight) + 75) pRow2Height = ((2 * self.__cardHeight) + self.__cardHeight + 30) self.__labels.append(Label("EnemyHP", self.__screen, "1000 / 1000", pygame.Vector2(15, 75))) self.__labels.append(Label("EnemyName", self.__screen, "Enemy", pygame.Vector2(15, 45))) self.__boardFields.append(BoardField("EnemyDeck", "Enemy", "Deck", pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), eRow1Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "e-deck")) self.__boardFields.append(BoardField("EnemyGraveyard", "Enemy", "Grave", pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), eRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "e-grave")) self.__labels.append(Label("PlayerHP", self.__screen, "1000 / 1000", pygame.Vector2(20, pRow2Height + 225))) self.__labels.append(Label("PlayerName", self.__screen, "Player", pygame.Vector2(20, pRow2Height + 195))) self.__labels.append(Label("Player Mana", self.__screen, "0", pygame.Vector2(20, pRow2Height + 255))) self.__boardFields.append(BoardField("PlayerDeck", "Player", "Deck", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30 ) * 5)), pRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "P-deck")) self.__boardFields.append(BoardField("PlayerGraveyard", "Player", "Grave", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30 ) * 5)), pRow1Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "p-grave")) # handle field creation for i in range(5): self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "Monster", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * i)), pRow1Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "pm"+str(id))) self.__boardFields.append(BoardField("PlayerEffectField-"+str(i), "Player", "Effect", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * i)), pRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "pe"+str(id))) self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "Monster", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * (i+1)), eRow1Height)), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "em"+str(id))) self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "Effect", pygame.Vector2((self.__cardOffset + (((self.__cardWidth + 10) - 30) * (i+1))), eRow2Height), PathUtil.getAbsolutePathTo("Assets/Cards/0/field.png"), "ee"+str(id))) def getBoardFields(self) -> list: return self.__boardFields def getLabels(self) -> list: return self.__labels def getCardWidth(self) -> int: return self.__cardWidth def getCardHeight(self) -> int: return self.__cardHeight def getCards(self) -> pygame.sprite.Group: return self.__cards def getHandCards(self) -> pygame.sprite.Group: return self.__PlayerHandCards def getPlayer(self) -> Player: return self.__player def getEnemy(self) -> Player: return self.__enemy def setPlayer(self, player:Player): for label in self.__labels: if label.getName() == "PlayerName": label.setText(player.getName()) self.__player = player def setEnemy(self, player:Player): for label in self.__labels: if label.getName() == "EnemyName": label.setText(player.getName()) self.__enemy = player def spawnCard(self, asset:str, pos:pygame.Vector2, inputHandler:InputHandler, owner:Player) -> Card: card = Card(pos, asset, inputHandler, owner) self.__cards.add(card) return card def spawnCards(self, cards:pygame.sprite.Group): for card in cards: self.__cards.add(card) def AddToPlayerHand(self, Card:Card): self.__PlayerHandCards.add(Card)