You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.3 KiB
99 lines
3.3 KiB
# This file contains the Controls class, which is responsible for handling user input. |
|
# The key_pressed method is called when a key is pressed, and it contains the logic for handling different key presses. |
|
|
|
import random |
|
import os |
|
import json |
|
|
|
bindings = {} |
|
if os.path.exists("conf/keybindings.json"): |
|
with open("conf/keybindings.json", "r") as f: |
|
bindings = json.load(f) |
|
else: |
|
import yaml |
|
# read yaml config file |
|
with open("conf/keybindings.yaml", "r") as f: |
|
bindings = yaml.safe_load(f) |
|
|
|
class KeyBindings: |
|
def trigger(self, action): |
|
import os |
|
debug = os.environ.get('DEBUG_KEYS', '').lower() == 'true' |
|
|
|
if debug: |
|
print(f"[KEY] Triggering action: {action} (status: {self.game_status})") |
|
|
|
# Check if the action is in the bindings |
|
current_bindings = bindings.get(f"keybinding_{self.game_status}", {}) |
|
|
|
if action in current_bindings: |
|
value = current_bindings[action] |
|
if debug: |
|
print(f"[KEY] Found binding: {action} -> {value}") |
|
|
|
# Call the corresponding method |
|
if value: |
|
if "|" in value: |
|
method_name, *args = value.split("|") |
|
method = getattr(self, method_name) |
|
if debug: |
|
print(f"[KEY] Calling method: {method_name}({args})") |
|
method(*args) |
|
else: |
|
if debug: |
|
print(f"[KEY] Calling method: {value}()") |
|
getattr(self, value)() |
|
return |
|
|
|
if debug: |
|
print(f"[KEY] Action '{action}' not found in {self.game_status} bindings") |
|
print(f"[KEY] Available actions: {list(current_bindings.keys())}") |
|
|
|
return None |
|
|
|
def spawn_new_bomb(self): |
|
self.spawn_bomb(self.pointer) |
|
|
|
def spawn_new_mine(self): |
|
self.spawn_mine(self.pointer) |
|
|
|
def spawn_new_nuclear_bomb(self): |
|
self.spawn_nuclear_bomb(self.pointer) |
|
|
|
def spawn_new_gas(self): |
|
self.spawn_gas(self.pointer) |
|
|
|
def toggle_audio(self): |
|
self.render_engine.audio = not self.render_engine.audio |
|
def toggle_pause(self): |
|
self.game_status = "paused" if self.game_status == "game" else "game" |
|
|
|
def toggle_full_screen(self): |
|
self.full_screen = not self.full_screen |
|
self.render_engine.full_screen(self.full_screen) |
|
|
|
def quit_game(self): |
|
self.render_engine.close() |
|
def start_scrolling(self, direction): |
|
self.scrolling_direction = direction |
|
if not self.scrolling: |
|
self.scrolling = 1 |
|
|
|
def stop_scrolling(self): |
|
self.scrolling = 0 |
|
|
|
def scroll(self): |
|
if self.scrolling: |
|
if not self.scrolling % 5: |
|
if self.scrolling_direction == "Up": |
|
self.scroll_cursor(y=-1) |
|
elif self.scrolling_direction == "Down": |
|
self.scroll_cursor(y=1) |
|
elif self.scrolling_direction == "Left": |
|
self.scroll_cursor(x=-1) |
|
elif self.scrolling_direction == "Right": |
|
self.scroll_cursor(x=1) |
|
self.scrolling += 1 |
|
|
|
def axis_scroll(self, x, y): |
|
self.scroll_cursor(1 if x > 0 else -1, 1 if y > 0 else -1) |