OpenWorldVGDL/VGDL/vgdl_scene.gd

88 lines
2.6 KiB
GDScript3
Raw Permalink Normal View History

2025-01-17 13:42:05 +00:00
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")