summaryrefslogtreecommitdiff
path: root/src/menu.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/menu.py')
-rw-r--r--src/menu.py197
1 files changed, 177 insertions, 20 deletions
diff --git a/src/menu.py b/src/menu.py
index d066f51..95147df 100644
--- a/src/menu.py
+++ b/src/menu.py
@@ -1,9 +1,14 @@
+import os.path
+
import pygame
import helper
import audio
+import save
+import constants
def show(screen):
running = True
+ opacity = 0
audio.play_menu(True)
while running:
@@ -17,6 +22,7 @@ def show(screen):
if left:
if 45 < mouse[0] < 195 and 40 < mouse[1] < 70:
+ audio.play_sfx("action")
print("New game")
screen.fill("black")
canvas = pygame.Surface((1280, 720))
@@ -29,28 +35,166 @@ def show(screen):
height = screen.get_size()[1]
width = height * (16/9)
- canvas.blit(helper.text("Generating world...", 20, (255, 255, 255)), (50, 50))
+ run = True
+ done = False
+ text = ""
+ quit = False
+
+ while run and not done:
+ canvas.fill("black")
+
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ run = False
+ quit = True
+ elif event.type == pygame.KEYDOWN:
+ if event.key == pygame.K_ESCAPE:
+ run = False
+ elif event.key == pygame.K_RETURN:
+ for i in ["con", "prn", "aux", "nul",
+ "com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9",
+ "lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9"]:
+ if text.lower() == i or text.startswith(i + ".") or text.endswith("." + i):
+ text = ""
+
+ if text.strip() != "" and not os.path.exists(helper.get_data_path() + "/saves/" + text):
+ done = True
+ elif os.path.exists(helper.get_data_path() + "/saves/" + text):
+ text = ""
+ else:
+ text = text.strip()
+ elif event.key == pygame.K_BACKSPACE:
+ text = text[:-1]
+ else:
+ if event.unicode not in ["/", "\\", "<", ">", ":", "\"", "'", "|", "?", "*"] and len(text) < 60:
+ text += event.unicode
+
+ text_surf = helper.text(text + "|", 20, (255, 255, 255))
+ canvas.blit(text_surf, (50, 75))
+ canvas.blit(helper.text("Enter world name:", 20, (255, 255, 255)), (50, 50))
+
+ scaled_win = pygame.transform.scale(canvas, (width, height))
+ screen.blit(scaled_win, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+ pygame.display.flip()
+
+ if quit:
+ pygame.quit()
+ elif done:
+ audio.stop(1)
+ audio.play_sfx("menu")
+
+ canvas.fill("black")
+ canvas.blit(helper.text("Generating world...", 20, (255, 255, 255)), (50, 50))
+
+ scaled_win = pygame.transform.scale(canvas, (width, height))
+ screen.blit(scaled_win, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+ pygame.display.flip()
+
+ world_map = [[["grass_block" for _ in range(20)] for _ in range(20)]]
+
+ for _ in range(9):
+ world_map.append([["air" for _ in range(20)] for _ in range(20)])
+
+ audio.wait_for_sfx()
+
+ import game
+ game.run(screen, world_map, helper.get_data_path() + "/saves/" + text)
+
+ return
+ else:
+ audio.play_sfx("back")
+ elif 45 < mouse[0] < 205 and 40+25 < mouse[1] < 70+25:
+ audio.play_sfx("action")
+ print("Load game")
+ screen.fill("black")
+ canvas = pygame.Surface((1280, 720))
+ canvas.fill("black")
- scaled_win = pygame.transform.scale(canvas, (width, height))
- screen.blit(scaled_win, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+ width = screen.get_size()[0]
+ height = width / (16/9)
- pygame.display.flip()
+ if width > screen.get_size()[0] or height > screen.get_size()[1]:
+ height = screen.get_size()[1]
+ width = height * (16/9)
- blocks = []
+ run = True
+ done = False
+ quit = False
+ world_name = ""
- for i in range(20):
- for j in range(20):
- blocks.append((802 + j * 21 - i * 42, 202 + j * 13 + i, "grass_block"))
+ saves = list(filter(lambda x: not x.startswith(".") and os.path.exists(helper.get_data_path() + "/saves/" + x + "/level.dat"), os.listdir(helper.get_data_path() + "/saves")))
- import game
- audio.stop(1)
- game.run(screen, blocks)
- return
- elif 45 < mouse[0] < 205 and 40+25 < mouse[1] < 70+25:
- print("Load game")
+ while run and not done:
+ canvas.fill("black")
+
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ run = False
+ quit = True
+ elif event.type == pygame.MOUSEBUTTONDOWN:
+ cursor = pygame.mouse.get_pos()
+
+ for i in range(len(saves)):
+ save_name = saves[i]
+
+ if 45 < cursor[0] < 550 and 65+25*i < cursor[1] < 95+25*i:
+ print(save_name)
+ world_name = save_name
+ done = True
+ break
+
+ elif event.type == pygame.KEYDOWN:
+ if event.key == pygame.K_ESCAPE:
+ run = False
+
+ canvas.blit(helper.text("Select a world to load:", 20, (255, 255, 255)), (50, 50))
+
+ last_i = 0
+
+ for i in range(len(saves)):
+ save_name = saves[i]
+ canvas.blit(helper.text(save_name, 20, (255, 255, 255)), (75, 75 + (25 * i)))
+ last_i = i
+
+ canvas.blit(helper.text("Notice:", 20, (255, 255, 255)), (50, 75 + (25 * (last_i + 2))))
+ canvas.blit(helper.text("Worlds from Blocks 0.1a are not compatible and", 20, (255, 255, 255)), (75, 75 + (25 * (last_i + 3))))
+ canvas.blit(helper.text("do not show up here.", 20, (255, 255, 255)), (75, 75 + (25 * (last_i + 4))))
+
+ scaled_win = pygame.transform.scale(canvas, (width, height))
+ screen.blit(scaled_win, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+ pygame.display.flip()
+ if quit:
+ pygame.quit()
+ elif done:
+ audio.stop(1)
+ audio.play_sfx("menu")
+
+ canvas.fill("black")
+ canvas.blit(helper.text("Loading world...", 20, (255, 255, 255)), (50, 50))
+
+ scaled_win = pygame.transform.scale(canvas, (width, height))
+ screen.blit(scaled_win, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+ pygame.display.flip()
+
+ loaded = save.load_world(helper.get_data_path() + "/saves/" + world_name)
+
+ if loaded['version'] != constants.VERSION:
+ print("WARNING: World was last loaded in a different version.")
+
+ audio.wait_for_sfx()
+
+ import game
+ game.run(screen, loaded['blocks'], helper.get_data_path() + "/saves/" + world_name)
+
+ return
+ else:
+ audio.play_sfx("back")
elif 45 < mouse[0] < 125 and 40+25*2 < mouse[1] < 70+25*2:
- print("Settings")
- elif 45 < mouse[0] < 90 and 40+25*3 < mouse[1] < 70+25*3:
+ # audio.play_sfx("action")
+ # print("Settings")
+ #elif 45 < mouse[0] < 90 and 40+25*3 < mouse[1] < 70+25*3:
+ audio.play_sfx("action")
+ audio.wait_for_sfx()
print("Exit")
running = False
@@ -70,11 +214,24 @@ def show(screen):
canvas.blit(helper.text("Start new game", 20, (255, 255, 255)), (50, 50))
canvas.blit(helper.text("Load saved game", 20, (255, 255, 255)), (50, 75))
- canvas.blit(helper.text("Settings", 20, (255, 255, 255)), (50, 100))
- canvas.blit(helper.text("Exit", 20, (255, 255, 255)), (50, 125))
+ #canvas.blit(helper.text("Settings", 20, (255, 255, 255)), (50, 100))
+ #canvas.blit(helper.text("Exit", 20, (255, 255, 255)), (50, 125))
+ canvas.blit(helper.text("Exit", 20, (255, 255, 255)), (50, 100))
scaled_win = pygame.transform.scale(canvas, (width, height))
- screen.blit(scaled_win, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+
+ if opacity >= 1:
+ result = scaled_win
+ else:
+ result = helper.transparent(scaled_win, opacity)
+
+ screen.blit(result, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
audio.play_menu()
- pygame.display.flip() \ No newline at end of file
+ pygame.display.flip()
+
+ if opacity < 1:
+ opacity += 1/30
+
+ if opacity >= 1:
+ opacity = 1