Source code for minestudio.simulator.utils.constants
'''
Date: 2024-11-15 14:57:39
LastEditors: muzhancun muzhancun@stu.pku.edu.cn
LastEditTime: 2024-11-17 22:32:08
FilePath: /Minestudio/minestudio/simulator/utils/constants.py
'''
[docs]
class GUIConstants:
"""
Defines constants used for the Minecraft GUI.
This includes keyboard and mouse mappings for actions, display dimensions,
FPS settings, and grid layout parameters for the information panel.
"""
def __init__(self):
"""
Initializes GUIConstants.
Imports Pyglet and sets up action mappings, mouse sensitivity,
FPS, window dimensions (scaled to screen size if necessary),
and info panel grid layout.
"""
import pyglet
import pyglet.window.key as key
import pyglet.window.mouse as mouse
# Mapping from simulator's action space names to pyglet keys
self.MINERL_ACTION_TO_KEYBOARD = {
#"ESC": key.ESCAPE, # Used in BASALT to end the episode
"attack": mouse.LEFT,
"back": key.S,
#"drop": key.Q,
"forward": key.W,
"hotbar.1": key._1,
"hotbar.2": key._2,
"hotbar.3": key._3,
"hotbar.4": key._4,
"hotbar.5": key._5,
"hotbar.6": key._6,
"hotbar.7": key._7,
"hotbar.8": key._8,
"hotbar.9": key._9,
"inventory": key.E,
"jump": key.SPACE,
"left": key.A,
# "pickItem": pyglet.window.mouse.MIDDLE,
"right": key.D,
"sneak": key.LSHIFT,
"sprint": key.LCTRL,
#"swapHands": key.F,
"use": mouse.RIGHT,
# "switch": key.TAB,
# "reset": key.F1,
}
self.KEYBOARD_TO_MINERL_ACTION = {v: k for k, v in self.MINERL_ACTION_TO_KEYBOARD.items()}
self.IGNORED_ACTIONS = {"chat"}
# Camera actions are in degrees, while mouse movement is in pixels
# Multiply mouse speed by some arbitrary multiplier
self.MOUSE_MULTIPLIER = 0.1
self.MINERL_FPS = 25
self.MINERL_FRAME_TIME = 1 / self.MINERL_FPS
self.SCALE = 2
self.WINDOW_WIDTH = 640 * self.SCALE
self.WINDOW_HEIGHT = 360 * (self.SCALE + 1)
screen = pyglet.canvas.get_display().get_default_screen()
ratio = 0.8
if screen.width < self.WINDOW_WIDTH * ratio or screen.height < self.WINDOW_HEIGHT * ratio:
scale = min(screen.width * ratio / self.WINDOW_WIDTH, screen.height * ratio / self.WINDOW_HEIGHT)
self.WINDOW_WIDTH = int(self.WINDOW_WIDTH * scale)
self.WINDOW_HEIGHT = int(self.WINDOW_HEIGHT * scale)
self.FRAME_HEIGHT = self.WINDOW_HEIGHT // 4 * 3
self.INFO_WIDTH = self.WINDOW_WIDTH
self.INFO_HEIGHT = self.WINDOW_HEIGHT // 4
self.NUM_ROWS = 4
self.NUM_COLS = 6
self.GRID_WIDTH = self.WINDOW_WIDTH // self.NUM_COLS
self.GRID_HEIGHT = self.INFO_HEIGHT // self.NUM_ROWS
self.GRID = {}
self.GRID_ID = 0
for R in range(self.NUM_ROWS):
for C in range(self.NUM_COLS):
X = C * self.GRID_WIDTH + self.GRID_WIDTH // 5
Y = R * self.GRID_HEIGHT + self.GRID_HEIGHT // 2
self.GRID[self.GRID_ID] = (X, Y)
self.GRID_ID += 1