class Town(Scene): def __init__(self, engine): self.engine = engine self.townname = self.engine.town townpath = os.path.join("places", self.townname) self.townini = Configuration(os.path.join("..", "data", townpath, "town.ini")).town self.background = ImgObj(Texture(os.path.join(townpath, "background.png"))) self.background.setScale(self.engine.w, self.engine.h, inPixels = True) self.background.setPosition(self.engine.w/2, self.engine.h/2) self.font = FontObj("default.ttf", size = 32.0) self.audio = BGMObj(os.path.join(townpath, "bgm.mp3")) self.choices = [choice.strip() for choice in self.townini.choices.split(",")] self.choices.append("Return") self.menu = MenuObj(self, self.choices, buttonStyle = Texture(os.path.join(townpath, "button.png")), position = (100, 500)) self.enemies = [formation.strip() for formation in self.townini.enemylist.split(",")] def buttonClicked(self, image): self.menu.buttonClicked(image) def keyPressed(self, key, char): self.menu.keyPressed(key) #leave town if key == Input.BButton: self.engine.town = None self.engine.viewport.changeScene("Maplist") def select(self, index): if self.choices[index] == "Wilderness": self.engine.formation = Formation(random.choice(self.enemies)) self.engine.viewport.changeScene("BattleSystem") if index == len(self.choices)-1: self.engine.town = None self.engine.viewport.changeScene("Maplist") #else: # self.engine.subTown = self.choices[index] # self.engine.viewport.changeScene("Shop") def render(self, visibility): self.background.draw() self.menu.render() self.engine.drawText(self.font, self.townname, (430, 64))
class MainMenu(Scene): def __init__(self, engine): self.engine = engine commands = ["New Game", "Exit"] self.continueEnabled = bool(len(self.engine.listPath(path = os.path.join("actors", "families"), value = "family.ini", flag = "folderDeepSearch")) > 0) if self.continueEnabled: commands.insert(1, "Continue") self.menu = MenuObj(self, commands, position = (150, 200)) self.background = ImgObj(Texture("mainbg.png")) self.background.setScale(self.engine.w, self.engine.h, inPixels = True) self.background.setPosition(self.engine.w/2, self.engine.h/2) self.music = BGMObj("test.mp3") self.selected = 0 self.helpButtons = [[Input.AButton, "Selects a command"], [Input.DnButton, "Scrolls down"], [Input.UpButton, "Scrolls up"]] def buttonClicked(self, image): self.menu.buttonClicked(image) def keyPressed(self, key, char): self.menu.keyPressed(key) def select(self, index): if index == 0: self.engine.viewport.changeScene("CreateFamily") elif index == 1 and self.continueEnabled: #forcing for testing purposes #self.engine.family = Family("default") #self.engine.viewport.changeScene("MapList") self.engine.viewport.changeScene("FamilyList") else: self.engine.finished = True def run(self): pass def render(self, visibility): self.background.draw() self.menu.render(visibility)
class CreateFamily(Scene): def __init__(self, engine): self.engine = engine scenepath = os.path.join("scenes", "creation") BGMObj("creation.mp3") self.background = ImgObj(Texture(os.path.join(scenepath, "background.png"))) self.background.setScale(self.engine.w, self.engine.h, inPixels = True) self.background.setPosition(self.engine.w/2,self.engine.h/2) self.window = WinObj(Texture(os.path.join(scenepath, "window.png")), 0.0, 0.0) self.button = ImgObj(Texture("ok.png"), boundable = True, frameX = 2) self.button.setScale(75,75,inPixels = True) self.button.setPosition(self.engine.w*.25, self.engine.h*.5) self.font = FontObj("default.ttf") self.menu = MenuObj(self, commands = ["Easy", "Normal", "Hard"], position = (400, 330)) #family info self.name = [] #name of the family self.diffselected = 1 #the difficulty selected (match up number with position in difficulty array # (1 = default, Normal difficulty) self.fadeIn = True #are the windows transitioning in or out self.error = False #was an error thrown self.step = 0 #step 0 = naming, step 1 = choose difficulty self.exists = False def buttonClicked(self, image): if self.step == 0: if image == self.button: if not self.exists: self.step += 1 else: self.menu.buttonClicked(image) def keyPressed(self, key, char): if self.step == 0: #name is a maximum of 13 letters if len(self.name) < 13: if (char >= 'a' and char <= 'z') or (char >= 'A' and char <= 'Z'): self.name.append(char) if len(self.name) > 0: #can not have the first character be a blank if key == K_SPACE: self.name.append(" ") if len(self.name) > 0: #can only delete letters if there are some to delete if key == K_BACKSPACE: self.name.pop(-1) if key == K_RETURN and not self.exists: self.next() elif self.step == 1: self.menu.keyPressed(key) def select(self, index): self.diffselected = index self.create() def run(self): self.exists = os.path.exists(os.path.join("..", "data", "actors", "families", string.join(self.name,''))) def next(self): if self.step == 0 and not self.name: self.error = True else: self.step += 1 def renderNaming(self): w, h = self.engine.w, self.engine.h self.window.setPosition(w/2, h/2) self.window.setDimensions(w*.4, h*.15) self.window.draw() if self.window.scale[0] == w*.4 and self.window.scale[1] == h*.15: self.engine.drawText(self.font, "Enter a name", (w*.5, h*.6)) name = string.join(self.name, '') self.engine.drawText(self.font, name, (w*.5, h*.5)) if name: if self.exists: frame = 2 else: frame = 1 self.button.setFrame(x = frame) self.button.draw() def renderDifficulty(self): w, h = self.engine.w, self.engine.h self.window.setPosition(w/2,h/2) self.window.setDimensions(w*.65, h*.25) self.window.draw() if self.window.scale[0] >= w*.65 and self.window.scale[1] >= h*.20: self.engine.drawText(self.font, "Select the difficulty", (w*.5, h*.65)) self.menu.render() def create(self): name = string.join(self.name, '') family = Family(None) family.create(name, self.diffselected) self.engine.family = Family(name) self.engine.viewport.changeScene("CreateCharacter") def render(self, visibility): w, h = self.engine.w, self.engine.h self.engine.drawImage(self.background) if self.step == 0: self.renderNaming() elif self.step == 1: self.renderDifficulty() else: self.create()