88 lines
2.6 KiB
GDScript3
88 lines
2.6 KiB
GDScript3
|
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")
|