diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bc586e0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libstormgames"] + path = libstormgames + url = https://gitlab.com/stormdragon2976/libstormgames.git diff --git a/libstorm_games.py b/libstorm_games.py deleted file mode 100755 index fc6d4ab..0000000 --- a/libstorm_games.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/python -# -*- coding: utf-8 -*- -"""Standard initializations and functions shared by all games.""" - -import configparser -import os -from os import listdir -from os.path import isfile, join -from inspect import isfunction -from xdg import BaseDirectory -import pygame -import pyperclip -import random -import requests -import speechd -import subprocess -import time - -localConfig = configparser.ConfigParser() -globalConfig = configparser.ConfigParser() -spd = speechd.Client() - -def write_config(writeGlobal = False): - if writeGlobal == False: - with open(gamePath, 'w') as configfile: - localConfig.write(configfile) - else: - with open(globalPath, 'w') as configfile: - globalConfig.write(configfile) - -def read_config(section, value, readGlobal = False): - if readGlobal == False: - with open(gamePath, 'r') as configfile: - return localConfig.read(section, value) - else: - return globalConfig.read(section, value) - -def speak(text, interupt = True): - if interupt == True: spd.cancel() - spd.say(text) - -def exit_game(): - spd.close() - pygame.mixer.music.stop() - pygame.quit() - exit() - -def initialize_gui(gameTitle): - # Check for, and possibly create, storm-games path - global globalPath - global gamePath - globalPath = BaseDirectory.xdg_config_home + "/storm-games" - gamePath = globalPath + "/" + str.lower(str.replace(gameTitle, " ", "-") + "config") - globalPath = globalPath + "/config" - if not os.path.exists(gamePath): os.makedirs(gamePath) - # Seed the random generator to the clock - random.seed() - # Set game's name - global gameName - gameName = gameTitle - # start pygame - pygame.init() - # start the display (required by the event loop) - pygame.display.set_mode((320, 200)) - pygame.display.set_caption(gameTitle) - # Load sounds from the sound directory and creates a list like that {'bottle': 'bottle.ogg'} - soundFiles = [f for f in listdir("sounds/") if isfile(join("sounds/", f)) and (f.split('.')[1].lower() in ["ogg","wav"])] - #lets make a dict with pygame.mixer.Sound() objects {'bottle':} - soundData = {} - for f in soundFiles: - soundData[f.split('.')[0]] = pygame.mixer.Sound("sounds/" + f) - soundData['game-intro'].play() - time.sleep(soundData['game-intro'].get_length()) - return soundData - -def instructions(): - # Read in the instructions file - try: - with open('files/instructions.txt', 'r') as f: - info = f.readlines() - except: - info = ["Instructions file is missing."] - display_text(info) - -def credits(): - info = [ - gameName + ": brought to you by Storm Dragon",\ - "Billy Wolfe, designer and coder.",\ - "https://social.wolfe.casa/storm"] - display_text(info) - -def display_text(text): - i = 0 - text.insert(0, "Press space to read the whole text. Use up and down arrows to navigate the text line by line. Press c to copy the current line to the clipboard or t to copy the entire text. Press enter or escape when you are done reading.") - text.append("End of text.") - speak(text[i]) - while True: - event = pygame.event.wait() - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE or event.key == pygame.K_RETURN: return - if event.key == pygame.K_DOWN and i < len(text) - 1: i = i + 1 - if event.key == pygame.K_UP and i > 0: i = i - 1 - if event.key == pygame.K_SPACE: - speak(''.join(text[1:])) - else: - speak(text[i]) - if event.key == pygame.K_c: - try: - pyperclip.copy(text[i]) - speak("Copied " + text[i] + " to the clipboard.") - except: - speak("Failed to copy the text to the clipboard.") - if event.key == pygame.K_t: - try: - pyperclip.copy(''.join(text[1:-1])) - speak("Copied entire message to the clipboard.") - except: - speak("Failed to copy the text to the clipboard.") - event = pygame.event.clear() - time.sleep(0.001) - -def learn_sounds(sounds): - loop = True - pygame.mixer.music.pause() - i = 0 - soundFiles = [f for f in listdir("sounds/") if isfile(join("sounds/", f)) and (f.split('.')[1].lower() in ["ogg","wav"]) and (f.split('.')[0].lower() not in ["game-intro", "music_menu"])] - # j keeps track of last spoken index so it isn't voiced on key up. - j = -1 - while loop == True: - if i != j: - speak(soundFiles[i][:-4]) - j = i - event = pygame.event.wait() - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: return "menu" - if event.key == pygame.K_DOWN and i < len(soundFiles) - 1: - i = i + 1 - if event.key == pygame.K_UP and i > 0: - i = i - 1 - if event.key == pygame.K_RETURN: - try: - soundName = soundFiles[i][:-4] - sounds[soundName].play() - continue - except: - j = -1 - speak("Could not play sound.") - continue - event = pygame.event.clear() - time.sleep(0.001) - -def game_menu(*options): - loop = True - if pygame.mixer.music.get_busy(): - pygame.mixer.music.unpause() - else: - pygame.mixer.music.load("sounds/music_menu.ogg") - pygame.mixer.music.set_volume(0.75) - pygame.mixer.music.play(-1) - i = 0 - # j keeps track of last spoken index so it isn't voiced on key up. - j = -1 - while loop == True: - if i != j: - speak(options[i]) - j = i - event = pygame.event.wait() - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: exit_game() - if event.key == pygame.K_DOWN and i < len(options) - 1: - i = i + 1 - if options[i] != "donate": pygame.mixer.music.unpause() - if event.key == pygame.K_UP and i > 0: - i = i - 1 - if options[i] != "donate": pygame.mixer.music.unpause() - if event.key == pygame.K_RETURN: - try: - j = -1 - eval(options[i] + "()") - continue - except: - j = -1 - return options[i] - continue - event = pygame.event.clear() - time.sleep(0.001) - -def donate(): - pygame.mixer.music.pause() - subprocess.call(["xdg-open", "https://liberapay.com/stormdragon2976/donate"]) diff --git a/libstormgames b/libstormgames new file mode 160000 index 0000000..1a724ad --- /dev/null +++ b/libstormgames @@ -0,0 +1 @@ +Subproject commit 1a724ada21f01103cebb503b9fbf94e9765d26c6 diff --git a/numnastics b/numnastics index e99a657..268e415 100755 --- a/numnastics +++ b/numnastics @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from libstorm_games import * +from libstormgames.libstormgames import * # Initial variable settings mode = "menu"