First-Person/scenes/load/console/console.gd
2025-12-06 15:50:10 +09:00

141 lines
4.1 KiB
GDScript

extends CanvasLayer
var player_sensor:Node = null
var active:bool = false
var words:Array = []
var PrevCMD:String = ""
var light_reading := Color.BLACK
@onready var panel = $control/panel
@onready var menu = $control/panel/menu
@onready var edit = $control/panel/edit
@onready var states = $control/m
@onready var stats = $control/m/stats
func read_message(message:String):
display_message(message)
words = message.split(" ")
PrevCMD = words[0]
var player = get_tree().get_first_node_in_group("player")
match words[0].to_lower():
"overdraw":
if words.size() > 1 and is_int(1):
player.camera.get_viewport().debug_draw = words[1].to_int()
"max_fps":
if words.size() > 1 and is_float(1):
Engine.max_fps = words[1].to_float()
"vs":
if DisplayServer.window_get_vsync_mode(0) == DisplayServer.VSYNC_DISABLED:
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED)
display_event("VSYNC ON")
else:
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
display_event("VSYNC OFF")
"time":
if words.size() > 1:
if is_float(1):
var number = words[1].to_float()
if number >= 0.0 and number < 2.0:
Engine.time_scale = number
else: display_warning("WRONG NUMBER")
else:
display_warning("WRONG NUMBER")
else:
Engine.time_scale = 1
display_event("TIMESCALE RESTARTED")
"fsr":
if get_viewport().scaling_3d_mode == Viewport.SCALING_3D_MODE_FSR2:
display_event("FSR 2.0 OFF")
get_viewport().scaling_3d_mode = Viewport.SCALING_3D_MODE_BILINEAR
else:
display_event("FSR 2.0 ON")
get_viewport().scaling_3d_mode = Viewport.SCALING_3D_MODE_FSR2
"render_scale":
if words.size() > 1:
if is_float(1):
get_viewport().scaling_3d_scale = words[1].to_float()
else:
display_warning("WRONG NUMBER")
else:
get_viewport().scaling_3d_scale = 1
display_event("SCALING RESTARTED")
"fs":
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
"q":
get_tree().quit()
panel.hide()
#region Other
func _input(event):
if event is InputEventKey and event.pressed:
match event.physical_keycode:
KEY_QUOTELEFT:
if panel.visible: panel.hide()
else: panel.show()
KEY_F11:
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
KEY_F3:
if states.visible: states.hide()
else: states.show()
KEY_F4:
$control/monitor.cycle_debug_menu()
KEY_RIGHT:
if PrevCMD and panel.visible:
edit.set_text(PrevCMD)
edit.set_caret_column(PrevCMD.length())
func _process(_delta):
var player = get_tree().get_first_node_in_group("player")
if states.visible and player:
stats.text ="SPEDOMETER: "+str(snappedf(player.spedometer, 0.01))
func _on_edit_text_submitted(new_text):
read_message(new_text)
edit.clear()
func display_event(message:String):
menu.push_color(Color.AQUAMARINE)
menu.add_text(message+"\n")
func display_message(message:String):
menu.push_color(Color.WHITE)
menu.add_text(message+"\n")
func display_warning(message:String):
menu.push_color(Color.YELLOW)
menu.add_text(message+"\n")
func is_bool(num:int)->bool:
var valid = false
if words.size() > num and words[num].is_valid_int() and \
words[num].to_int() <= 1 and words[num].to_int() >= 0:
valid = true
return valid
display_warning("WRONG NUMBER")
return valid
func is_float(num:int)->bool:
var valid = false
if words.size() > num and words[num].is_valid_float():
valid = true
return valid
return valid
func is_int(num:int)->bool:
var valid = false
if words.size() > num and words[num].is_valid_int():
valid = true
return valid
return valid
func _on_panel_draw():
active = true
edit.grab_focus()
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
func _on_panel_hidden():
active = false
edit.release_focus()
edit.clear()
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
#endregion