Files
my-botty/src/ui/main_menu.py
T

60 lines
2.2 KiB
Python

import time
from input_layer import keyboard
from config import Config
from utils.misc import wait
from logger import Logger
from ui import error_screens
from ui_manager import detect_screen_object, is_visible, select_screen_object_match, ScreenObjects
MAIN_MENU_MARKERS = ["MAIN_MENU_TOP_LEFT","MAIN_MENU_TOP_LEFT_DARK"]
def _play_active(match) -> bool:
return match.name == "PLAY_BTN"
def start_game() -> bool:
"""
Starting a game. Will wait and retry on server connection issue.
:return: Bool if action was successful
"""
Logger.debug("Wait for Play button")
start = time.time()
difficulty=Config().general["difficulty"].lower()
difficulty_key="r" if difficulty == "normal" else "n" if difficulty == "nightmare" else "h"
while True:
if (m := detect_screen_object(ScreenObjects.PlayBtn)).valid:
if _play_active(m):
# found active play button
Logger.debug(f"Found Play Btn, select and press key: {difficulty_key}")
select_screen_object_match(m)
keyboard.press(difficulty_key)
break
# else found inactive play button, continue loop
else:
# did not find either active or inactive play button
Logger.error("start_game: No play button found, not on main menu screen")
return False
wait(1,2)
if time.time() - start > 90:
Logger.error("start_game: Active play button never appeared")
return False
start = time.time()
while True:
#check for loading screen
if is_visible(ScreenObjects.Loading):
Logger.debug("Found loading screen / creating game")
keyboard.release(difficulty_key)
break
else:
wait(0.2)
# check for server issue
if is_visible(ScreenObjects.ServerError):
error_screens.handle_error()
keyboard.release(difficulty_key)
return start_game()
if time.time() - start > 15:
Logger.error(f"Could not find {difficulty}_BTN or LOADING, start over")
keyboard.release(difficulty_key)
return start_game()
return True