view mamba/__main__.py @ 598:0a2cc2ee16c2

Fix loading of help file. It needs to be loaded as a string since we join lines using a string.
author Simon Cross <hodgestar@gmail.com>
date Sat, 14 Jan 2023 19:04:47 +0100
parents 55e9c1b8e94c
children 915de6c7d342
line wrap: on
line source

"""Main module for the game"""

import sys
import pygame
from pygame.locals import SWSURFACE

from mamba.constants import SCREEN, NAME, WINDOW_ICON
from mamba.options import options, parse_args, check_args
from mamba.engine import Engine
from mamba.gamestate import load_state
from mamba.sound import SoundSystem
from mamba.habitats.mainmenu import MainMenu
from mamba.habitats.levelmenu import OfficialLevelMenu
from mamba.habitats.userlevelmenu import UserLevelApi
from mamba.habitats.level import LevelHabitat
from mamba.habitats.editor import EditorHabitat
from mamba.level import Level
from mamba.data import load_image


def main():
    """Launch the currently unnamed mamab game"""
    parse_args(sys.argv)
    if not check_args():
        sys.exit(1)

    if options.list_uncurated:
        api = UserLevelApi("uncurated")
        api.print_levels()
        sys.exit()

    SoundSystem(options.sound)

    display_flags = SWSURFACE
    if options.fullscreen:
        display_flags |= pygame.FULLSCREEN
        if getattr(pygame, "SCALED", None):
            display_flags |= pygame.SCALED

    pygame.display.init()
    pygame.font.init()
    pygame.display.set_mode(SCREEN, display_flags)
    pygame.display.set_icon(load_image(WINDOW_ICON))
    pygame.display.set_caption(NAME)

    load_state()

    if options.edit:
        start = EditorHabitat(Level(options.level, 'official'))
    elif options.level is not None:
        start = LevelHabitat(Level(options.level, 'official'),
                             OfficialLevelMenu.go_menu,
                             OfficialLevelMenu.go_menu)
    elif options.uncurated is not None:
        api = UserLevelApi("uncurated")
        start = LevelHabitat(api.get_level(options.uncurated),
                             sys.exit, sys.exit)
    else:
        start = MainMenu()

    engine = Engine()
    engine.set_habitat(start)
    try:
        engine.run()
    except KeyboardInterrupt:
        pass
    engine.set_habitat(None)  # clear habitat