view mamba/__main__.py @ 596:55e9c1b8e94c

Add --fullscreen option (that autoscales on pygame 2).
author Simon Cross <hodgestar@gmail.com>
date Sat, 14 Jan 2023 18:45:33 +0100
parents af8e16742b23
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