extends Node3D @onready var vgdl_renderer: VGDLRenderer = $VGDLRenderer @onready var gava_script_instance: GavaScriptInstance = $GavaScriptInstance var VGDLGame: JSObject var get_full_state: JSFunction var update: JSFunction var presskey: JSFunction var presskeyUp: JSFunction var start_game: JSFunction @onready var space: MeshButton = $Buttons/SPACE @onready var up: MeshButton = $Buttons/UP @onready var down: MeshButton = $Buttons/DOWN @onready var left: MeshButton = $Buttons/LEFT @onready var right: MeshButton = $Buttons/RIGHT @onready var button_arr: Array[MeshButton] = [ space, up, down, left, right, ] const VGDLInputMapping: Dictionary = { "move_up": "UP", "move_down": "DOWN", "move_left": "LEFT", "move_right": "RIGHT", "hit": "SPACE" } func get_time(): return Time.get_ticks_msec() # Called when the node enters the scene tree for the first time. func _ready() -> void: gava_script_instance.set_global("get_time", get_time) gava_script_instance.start("res://javascript/main.js") VGDLGame = gava_script_instance.get_global("game") get_full_state = gava_script_instance.get_global("get_full_state") update = gava_script_instance.get_global("update") presskey = gava_script_instance.get_global("presskey") presskeyUp = gava_script_instance.get_global("presskeyUp") start_game = gava_script_instance.get_global("startGame") vgdl_renderer.parsing_state(get_full_state.call_nonargs()) start_game.call_nonargs() for btn in button_arr: btn.on_press.connect(func(): press_key(btn.name)) btn.on_release.connect(func(): press_key_up(btn.name)) func press_key(name: String): presskey.call(name) func press_key_up(name: String): presskeyUp.call(name) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: if not DialogueState.start_play: $VGDLGameFollower.priority = -1 return $VGDLGameFollower.priority = 30 for action_mapping in VGDLInputMapping.keys(): var vgdl_action = VGDLInputMapping[action_mapping] if Input.is_action_just_pressed(action_mapping): presskey.call(vgdl_action) elif Input.is_action_just_released(action_mapping): presskeyUp.call(vgdl_action) update.callv([delta]) var state = get_full_state.call_nonargs() vgdl_renderer.parsing_state(state) var is_win = state.win print(is_win) if is_win == true or is_win == false: DialogueState.start_play = false $VGDLGameFollower.priority = -1 const ASK_PLAYING = preload('res://dialogue/ask_playing.dialogue') func _on_employee_start_talk() -> void: DialogueManager.show_example_dialogue_balloon(ASK_PLAYING, "ask_playing")