@@ -5,12 +5,13 @@ var YarnScript = preload("yarn_script.gd") | |||
export (Resource) var yarnScript | |||
var say_func : FuncRef = null | |||
var choices_func : FuncRef = null | |||
func run_all(): | |||
var next_node = yarnScript.nodes["Start"] | |||
while next_node != null: | |||
print("-> Jump to " + next_node["title"]) | |||
var next_node_key = run_body(next_node["body"]) | |||
var next_node_key = yield(run_body(next_node["body"]), "completed") | |||
if (yarnScript.nodes.has(next_node_key)): | |||
next_node = yarnScript.nodes[next_node_key] | |||
else: | |||
@@ -21,25 +22,26 @@ func run_body(body): | |||
if element["type"] == "jump": | |||
return element["node"] | |||
elif element["type"] == "choice_blocks": | |||
var block = decide_choice_block(element["blocks"]) | |||
var block = yield(decide_choice_block(element["blocks"]), "completed") | |||
print(block) | |||
return block["node"] # todo change later with "-> choices" | |||
elif element["type"] == "condition_blocks": | |||
var block = decide_condition_block(element["blocks"]) | |||
var next_node_key = run_body(block["body"]) | |||
var next_node_key = yield(run_body(block["body"]), "completed") | |||
if next_node_key != "": | |||
return next_node_key | |||
else: | |||
if say_func == null or !say_func.is_valid(): | |||
print(element) | |||
else: | |||
say_func.call_func(element) | |||
yield(say_func.call_func(element), "completed") | |||
return "" | |||
export var choice = 0 | |||
func decide_choice_block(blocks): | |||
return blocks[choice] | |||
if choices_func == null or !choices_func.is_valid(): | |||
return blocks[0] | |||
else: | |||
return yield(choices_func.call_func(blocks), "completed") | |||
func decide_condition_block(blocks): | |||
for block in blocks: | |||
@@ -220,11 +220,6 @@ func get_preset_name(preset): | |||
func get_import_options(preset): | |||
match preset: | |||
Presets.DEFAULT: | |||
return [{ | |||
"name": "use_red_anyway", | |||
"default_value": false | |||
}] | |||
_: | |||
return [] | |||
@@ -0,0 +1,13 @@ | |||
[gd_scene load_steps=2 format=2] | |||
[ext_resource path="res://main/scripts/ChoicesBox.gd" type="Script" id=1] | |||
[node name="ChoicesBox" type="VBoxContainer"] | |||
anchor_left = 0.3 | |||
anchor_top = 0.1 | |||
anchor_right = 0.7 | |||
anchor_bottom = 0.45 | |||
script = ExtResource( 1 ) | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} |
@@ -0,0 +1,34 @@ | |||
[gd_scene load_steps=2 format=2] | |||
[ext_resource path="res://main/scripts/LogPanel.gd" type="Script" id=1] | |||
[node name="LogPanel" type="Control"] | |||
anchor_right = 1.0 | |||
anchor_bottom = 1.0 | |||
script = ExtResource( 1 ) | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="Panel" type="Panel" parent="."] | |||
anchor_right = 1.0 | |||
anchor_bottom = 1.0 | |||
[node name="RichTextLabel" type="RichTextLabel" parent="."] | |||
anchor_left = 0.02 | |||
anchor_top = 0.05 | |||
anchor_right = 0.98 | |||
anchor_bottom = 0.95 | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="TextButton" type="Button" parent="."] | |||
modulate = Color( 1, 1, 1, 0.235294 ) | |||
anchor_right = 1.0 | |||
anchor_bottom = 1.0 | |||
margin_right = -49.0 | |||
flat = true | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} |
@@ -1,8 +1,10 @@ | |||
[gd_scene load_steps=4 format=2] | |||
[gd_scene load_steps=6 format=2] | |||
[ext_resource path="res://main/scripts/test_viteuf.gd" type="Script" id=1] | |||
[ext_resource path="res://main/dialogues/test.yarn" type="Resource" id=2] | |||
[ext_resource path="res://addons/yarn_spinner/yarn_runner.gd" type="Script" id=3] | |||
[ext_resource path="res://main/scenes/LogPanel.tscn" type="PackedScene" id=4] | |||
[ext_resource path="res://main/scenes/ChoicesBox.tscn" type="PackedScene" id=5] | |||
[node name="Node" type="Control"] | |||
anchor_right = 1.0 | |||
@@ -16,6 +18,10 @@ __meta__ = { | |||
script = ExtResource( 3 ) | |||
yarnScript = ExtResource( 2 ) | |||
[node name="RichTextLabel" type="RichTextLabel" parent="."] | |||
anchor_right = 1.0 | |||
[node name="LogPanel" parent="." instance=ExtResource( 4 )] | |||
anchor_bottom = 0.6 | |||
[node name="ChoicesBox" parent="." instance=ExtResource( 5 )] | |||
anchor_top = 0.6 | |||
anchor_bottom = 1.0 | |||
alignment = 1 |
@@ -11,7 +11,7 @@ func on_choices(choices_list): | |||
for choice in choices_list: | |||
var choiceButton := Button.new() | |||
choiceButton.text = choice["text"] | |||
choiceButton.connect("pressed", self, "on_choice_made", [choice["marker"]]) | |||
choiceButton.connect("pressed", self, "on_choice_made", [choice]) | |||
add_child(choiceButton) | |||
var res = yield(self, "choice_made") | |||
hide() |
@@ -1,24 +1,28 @@ | |||
extends Control | |||
func _ready(): | |||
$YarnRunner.say_func = funcref(self, "say") | |||
$YarnRunner.run_all() | |||
# $ChoicesBox.hide() | |||
# $LogPanel.hide() | |||
on_dialogue_start() | |||
$YarnRunner.say_func = funcref(self, "on_new_line") | |||
$YarnRunner.choices_func = funcref(self, "on_choices") | |||
yield($YarnRunner.run_all(), "completed") | |||
on_dialogue_end() | |||
func say(element): | |||
$RichTextLabel.text += str(element["raw"]) + "\n" | |||
func on_dialogue_start(): | |||
$LogPanel.show() | |||
$ChoicesBox.show() | |||
$LogPanel.clear() | |||
$ChoicesBox.clear() | |||
func exec(stri): | |||
var expr := Expression.new() | |||
print("input : " + stri) | |||
var err := expr.parse(stri) | |||
if err == OK: | |||
var res = expr.execute() | |||
print("res : " + str(res)) | |||
else: | |||
print("err : " + str(err)) | |||
func jajoujaj(): | |||
print("jaaaja") | |||
func on_new_line(line): | |||
yield($LogPanel.on_new_line(line["text"]), "completed") | |||
var current_node = "Start" | |||
var current_line = 0 | |||
func on_choices(choices_list): | |||
print(choices_list) | |||
return yield($ChoicesBox.on_choices(choices_list), "completed") | |||
func on_dialogue_end(): | |||
pass | |||
# $ChoicesBox.hide() | |||
# $LogPanel.hide() |
@@ -12,12 +12,12 @@ _global_script_classes=[ { | |||
"base": "VBoxContainer", | |||
"class": "ChoicesBox", | |||
"language": "GDScript", | |||
"path": "res://yarn/scripts/ChoicesBox.gd" | |||
"path": "res://main/scripts/ChoicesBox.gd" | |||
}, { | |||
"base": "Control", | |||
"class": "LogPanel", | |||
"language": "GDScript", | |||
"path": "res://yarn/scripts/LogPanel.gd" | |||
"path": "res://main/scripts/LogPanel.gd" | |||
}, { | |||
"base": "Node", | |||
"class": "YarnImporter", | |||
@@ -1,7 +1,7 @@ | |||
[gd_scene load_steps=4 format=2] | |||
[ext_resource path="res://yarn/scripts/LogPanel.gd" type="Script" id=1] | |||
[ext_resource path="res://yarn/scripts/ChoicesBox.gd" type="Script" id=2] | |||
[ext_resource path="res://main/scenes/ChoicesBox.tscn" type="PackedScene" id=1] | |||
[ext_resource path="res://main/scenes/LogPanel.tscn" type="PackedScene" id=2] | |||
[ext_resource path="res://yarn/scripts/YarnSpinner.gd" type="Script" id=3] | |||
[node name="YarnSpinner" type="Control"] | |||
@@ -12,45 +12,6 @@ __meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="ChoicesBox" type="VBoxContainer" parent="."] | |||
anchor_left = 0.3 | |||
anchor_top = 0.1 | |||
anchor_right = 0.7 | |||
anchor_bottom = 0.45 | |||
script = ExtResource( 2 ) | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="ChoicesBox" parent="." instance=ExtResource( 1 )] | |||
[node name="LogPanel" type="Control" parent="."] | |||
anchor_top = 0.5 | |||
anchor_right = 1.0 | |||
anchor_bottom = 1.0 | |||
script = ExtResource( 1 ) | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="Panel" type="Panel" parent="LogPanel"] | |||
anchor_right = 1.0 | |||
anchor_bottom = 1.0 | |||
[node name="RichTextLabel" type="RichTextLabel" parent="LogPanel"] | |||
anchor_left = 0.02 | |||
anchor_top = 0.05 | |||
anchor_right = 0.98 | |||
anchor_bottom = 0.95 | |||
text = "Coucou je suis un text de test, ou bien l'inverse" | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="TextButton" type="Button" parent="LogPanel"] | |||
modulate = Color( 1, 1, 1, 0.235294 ) | |||
anchor_right = 1.0 | |||
anchor_bottom = 1.0 | |||
margin_right = -20.0 | |||
flat = true | |||
__meta__ = { | |||
"_edit_use_anchors_": false | |||
} | |||
[node name="LogPanel" parent="." instance=ExtResource( 2 )] |