PinmikPanik/gamedata/objects/menu/menu.py

52 lines
2.1 KiB
Python

import gamedata.objects.base as base
import gamedata.objects.button as button
class Menu(base.BaseObject):
def __init__(self,x,y,game,w=100,h=100):
super().__init__(x,y,game,w,h) # initialise l'objet de base avec les bons arguments
self.init = False
# Initialisation de son sprite
self.sprite = None
# Variables de styles
self.hpadding = 2 # Les espaces entre les différents boutons
self.vpadding = 2
# Liste qui se remplira avec les objets bouttons
self.lbuttons = []
# Les dicos des boutons
def fnExemple(self,game):
print("Exemple")
btnExemple = {"name":"Bouton !!","function": fnExemple}
# Initialisation de la grille du menu
self.grid = [
[btnExemple],
[btnExemple,None]
]
def create(self,grid,rect):
game = self.game
elementheight = (rect[3]-(len(grid)-1)*self.vpadding)//len(grid)
for i in range(len(grid)):
elementwidth = (rect[2]-(len(grid[i])-1)*self.hpadding)//len(grid[i])
for j in range(len(grid[i])):
posx = rect[0]+j*(elementwidth+self.hpadding)
posy = rect[1]+i*(elementheight+self.vpadding)
if type(grid[i][j]).__name__=="dict":
# Si c'est un dico, l'emplacement est un bouton
folder = "base"
if "folder" in grid[i][j].keys():
folder = grid[i][j]["folder"]
btn = button.Button(posx,posy,game,elementwidth,elementheight,folder)
btn.text = grid[i][j]["name"]
btn.click = grid[i][j]["function"]
btn.menuowner = self # Le bouton a une référence à son menu
self.lbuttons.append(btn) # Je le garde en memoire
game.gameloop.summon(btn)
if type(grid[i][j]).__name__ in ("tuple","list"):
# Sinon, c'est une sous-grille
self.create(grid[i][j],[posx,posy,elementwidth,elementheight],game)