Adds enemies
This commit is contained in:
parent
cf8ba8bacb
commit
76e5b1927f
324 changed files with 28447 additions and 106 deletions
5142
demo/scenes/base/arena.tscn
Normal file
5142
demo/scenes/base/arena.tscn
Normal file
File diff suppressed because it is too large
Load diff
256
demo/scenes/base/clouds.tscn
Normal file
256
demo/scenes/base/clouds.tscn
Normal file
|
|
@ -0,0 +1,256 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dt2jlrqffpyw"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://65b6yuobhxf8" path="res://demo/assets/env_clouds.png" id="1_eigiy"]
|
||||
|
||||
[node name="Clouds" type="Node2D"]
|
||||
modulate = Color(1, 1, 1, 0.792157)
|
||||
position = Vector2(-1998, -1508)
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="Cloud1" type="Sprite2D" parent="."]
|
||||
position = Vector2(764, 358)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud13" type="Sprite2D" parent="."]
|
||||
position = Vector2(4005, 2983)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud5" type="Sprite2D" parent="."]
|
||||
position = Vector2(-152, 2723)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud6" type="Sprite2D" parent="."]
|
||||
position = Vector2(3293, 936)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud2" type="Sprite2D" parent="."]
|
||||
position = Vector2(85, 1505)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud16" type="Sprite2D" parent="."]
|
||||
position = Vector2(3434, 3542)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud7" type="Sprite2D" parent="."]
|
||||
position = Vector2(1380, 3802)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud3" type="Sprite2D" parent="."]
|
||||
position = Vector2(503, 1222)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud14" type="Sprite2D" parent="."]
|
||||
position = Vector2(4174, 3309)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud15" type="Sprite2D" parent="."]
|
||||
position = Vector2(4695, 2800)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud8" type="Sprite2D" parent="."]
|
||||
position = Vector2(152, 3383)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud4" type="Sprite2D" parent="."]
|
||||
position = Vector2(164, 1669)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud9" type="Sprite2D" parent="."]
|
||||
position = Vector2(328, 3474)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud10" type="Sprite2D" parent="."]
|
||||
position = Vector2(933, 515)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud12" type="Sprite2D" parent="."]
|
||||
position = Vector2(4570, 1222)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud11" type="Sprite2D" parent="."]
|
||||
position = Vector2(3784, 345)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud17" type="Sprite2D" parent="."]
|
||||
position = Vector2(-2737.13, 367.814)
|
||||
scale = Vector2(1.35085, 1.15254)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud18" type="Sprite2D" parent="."]
|
||||
position = Vector2(-1254.92, 3539.61)
|
||||
scale = Vector2(0.898305, 0.898305)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud19" type="Sprite2D" parent="."]
|
||||
position = Vector2(-2912.7, 1260.29)
|
||||
scale = Vector2(1.10169, 1.10169)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud20" type="Sprite2D" parent="."]
|
||||
position = Vector2(-3251.5, 3437.56)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud21" type="Sprite2D" parent="."]
|
||||
position = Vector2(-3181.26, 3581.44)
|
||||
scale = Vector2(0.949153, 0.949153)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud22" type="Sprite2D" parent="."]
|
||||
position = Vector2(-420.856, 367.017)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud23" type="Sprite2D" parent="."]
|
||||
position = Vector2(-1493, 3040)
|
||||
scale = Vector2(0.898305, 0.898305)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud24" type="Sprite2D" parent="."]
|
||||
position = Vector2(-510, 2429)
|
||||
scale = Vector2(1.15254, 1.15254)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud25" type="Sprite2D" parent="."]
|
||||
position = Vector2(-712, 1373)
|
||||
scale = Vector2(1.10169, 1.10169)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud26" type="Sprite2D" parent="."]
|
||||
position = Vector2(-269, 2004)
|
||||
scale = Vector2(0.79661, 0.79661)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud27" type="Sprite2D" parent="."]
|
||||
position = Vector2(-1656, 2353)
|
||||
scale = Vector2(0.949153, 0.949153)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud28" type="Sprite2D" parent="."]
|
||||
position = Vector2(-461, 1787)
|
||||
scale = Vector2(1.10169, 1.10169)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud29" type="Sprite2D" parent="."]
|
||||
position = Vector2(3890, 2612.5)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud30" type="Sprite2D" parent="."]
|
||||
position = Vector2(3832, 1394.5)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud31" type="Sprite2D" parent="."]
|
||||
position = Vector2(3472, 3106)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud32" type="Sprite2D" parent="."]
|
||||
position = Vector2(3095, 2689.5)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud33" type="Sprite2D" parent="."]
|
||||
position = Vector2(4016, 1558.5)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud34" type="Sprite2D" parent="."]
|
||||
position = Vector2(3863, 1375)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(12, 7, 455, 168)
|
||||
|
||||
[node name="Cloud35" type="Sprite2D" parent="."]
|
||||
position = Vector2(3521.25, 3087)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud36" type="Sprite2D" parent="."]
|
||||
position = Vector2(3609.25, 3161)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(507, 7, 193, 88)
|
||||
|
||||
[node name="Cloud37" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(3754.25, 1447)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(501, 99, 210, 92)
|
||||
|
||||
[node name="Cloud38" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(2915.25, 2833)
|
||||
scale = Vector2(0.898305, 0.898305)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
|
||||
[node name="Cloud39" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(3270.25, 2207)
|
||||
texture = ExtResource("1_eigiy")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(10, 189, 644, 165)
|
||||
140
demo/scenes/base/code_edit.gd
Normal file
140
demo/scenes/base/code_edit.gd
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
#*
|
||||
#* code_edit.gd
|
||||
#* =============================================================================
|
||||
#* Copyright 2024 Serhii Snitsaruk
|
||||
#*
|
||||
#* Use of this source code is governed by an MIT-style
|
||||
#* license that can be found in the LICENSE file or at
|
||||
#* https://opensource.org/licenses/MIT.
|
||||
#* =============================================================================
|
||||
#*
|
||||
|
||||
extends CodeEdit
|
||||
|
||||
const RESERVED_WORDS := [
|
||||
# Control flow.
|
||||
"break",
|
||||
"continue",
|
||||
"elif",
|
||||
"else",
|
||||
"for",
|
||||
"if",
|
||||
"match",
|
||||
"pass",
|
||||
"return",
|
||||
"when",
|
||||
"while",
|
||||
# Declarations.
|
||||
"class",
|
||||
"class_name",
|
||||
"const",
|
||||
"enum",
|
||||
"extends",
|
||||
"func",
|
||||
"namespace",
|
||||
"signal",
|
||||
"static",
|
||||
"trait",
|
||||
"var",
|
||||
# Other keywords.
|
||||
"await",
|
||||
"breakpoint",
|
||||
"self",
|
||||
"super",
|
||||
"yield",
|
||||
# Operators.
|
||||
"and",
|
||||
"as",
|
||||
"in",
|
||||
"is",
|
||||
"not",
|
||||
"or",
|
||||
# Special values.
|
||||
"false",
|
||||
"null",
|
||||
"true",
|
||||
# Constants.
|
||||
"INF",
|
||||
"NAN",
|
||||
"PI",
|
||||
"TAU",
|
||||
# Functions.
|
||||
"assert",
|
||||
"preload",
|
||||
]
|
||||
|
||||
const TYPE_WORDS := [
|
||||
"bool",
|
||||
"int",
|
||||
"float",
|
||||
"void",
|
||||
"String",
|
||||
"Vector2",
|
||||
"Vector2i",
|
||||
"Rect2",
|
||||
"Rect2i",
|
||||
"Vector3",
|
||||
"Vector3i",
|
||||
"Transform2D",
|
||||
"Vector4",
|
||||
"Vector4i",
|
||||
"Plane",
|
||||
"Quaternion",
|
||||
"AABB",
|
||||
"Basis",
|
||||
"Transform3D",
|
||||
"Projection",
|
||||
"Color",
|
||||
"StringName",
|
||||
"NodePath",
|
||||
"RID",
|
||||
"Callable",
|
||||
"Signal",
|
||||
"Dictionary",
|
||||
"Array",
|
||||
"PackedByteArray",
|
||||
"PackedInt32Array",
|
||||
"PackedInt64Array",
|
||||
"PackedFloat32Array",
|
||||
"PackedFloat64Array",
|
||||
"PackedStringArray",
|
||||
"PackedVector2Array",
|
||||
"PackedVector3Array",
|
||||
"PackedColorArray",
|
||||
# Other types
|
||||
"Status",
|
||||
]
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var highlighter := CodeHighlighter.new()
|
||||
syntax_highlighter = highlighter
|
||||
highlighter.number_color = Color.AQUAMARINE
|
||||
highlighter.symbol_color = Color.CORNFLOWER_BLUE
|
||||
highlighter.function_color = Color.DEEP_SKY_BLUE
|
||||
highlighter.member_variable_color = Color.LIGHT_BLUE
|
||||
|
||||
# Engine types
|
||||
for c in ClassDB.get_class_list():
|
||||
syntax_highlighter.add_keyword_color(c, Color.AQUAMARINE)
|
||||
|
||||
syntax_highlighter.add_color_region("#", "", Color.DIM_GRAY, true)
|
||||
syntax_highlighter.add_color_region("@", " ", Color.GOLDENROD)
|
||||
syntax_highlighter.add_color_region("\"", "\"", Color.GOLD)
|
||||
|
||||
for keyword in RESERVED_WORDS:
|
||||
syntax_highlighter.add_keyword_color(keyword, Color.INDIAN_RED)
|
||||
|
||||
for typeword in TYPE_WORDS:
|
||||
syntax_highlighter.add_keyword_color(typeword, Color.AQUAMARINE)
|
||||
|
||||
|
||||
func set_source_code(source_code: String) -> void:
|
||||
# Hide license header
|
||||
var idx: int = source_code.find("#*")
|
||||
while idx != - 1:
|
||||
source_code = source_code.substr(0, idx) + source_code.substr(source_code.findn("\n", idx) + 1)
|
||||
idx = source_code.findn("#*", idx)
|
||||
|
||||
text = "" # Workaround
|
||||
text = source_code
|
||||
18
demo/scenes/base/toggle_fullscreen.gd
Normal file
18
demo/scenes/base/toggle_fullscreen.gd
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
extends Button
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pressed.connect(_toggle_fullscreen)
|
||||
|
||||
# Set scaling properties and base resolution
|
||||
get_window().mode = Window.MODE_FULLSCREEN
|
||||
get_window().content_scale_aspect = Window.CONTENT_SCALE_ASPECT_KEEP
|
||||
get_window().content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS
|
||||
get_window().content_scale_size = Vector2i(1920,1080)
|
||||
|
||||
|
||||
func _toggle_fullscreen() -> void:
|
||||
if get_window().mode != Window.MODE_FULLSCREEN:
|
||||
get_window().mode = Window.MODE_FULLSCREEN
|
||||
else:
|
||||
get_window().mode = Window.MODE_MAXIMIZED
|
||||
84
demo/scenes/game.gd
Normal file
84
demo/scenes/game.gd
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
extends Node2D
|
||||
|
||||
const Simple := preload("res://demo/agents/01_agent_melee_simple.tscn")
|
||||
const Charger := preload("res://demo/agents/02_agent_charger.tscn")
|
||||
const Imp := preload("res://demo/agents/03_agent_imp.tscn")
|
||||
const Skirmisher := preload("res://demo/agents/04_agent_skirmisher.tscn")
|
||||
const Ranged := preload("res://demo/agents/05_agent_ranged.tscn")
|
||||
const Combo := preload("res://demo/agents/06_agent_melee_combo.tscn")
|
||||
const Nuanced := preload("res://demo/agents/07_agent_melee_nuanced.tscn")
|
||||
const Demon := preload("res://demo/agents/08_agent_demon.tscn")
|
||||
const Summoner := preload("res://demo/agents/09_agent_summoner.tscn")
|
||||
|
||||
const WAVES: Array = [
|
||||
[Simple, Simple, Nuanced],
|
||||
[Simple, Nuanced, Charger],
|
||||
[Simple, Simple, Simple, Ranged, Nuanced],
|
||||
[Simple, Simple, Summoner],
|
||||
[Ranged, Skirmisher, Nuanced, Simple, Simple],
|
||||
[Nuanced, Nuanced, Combo, Ranged, Simple],
|
||||
[Demon, Charger, Simple, Simple, Simple, Skirmisher],
|
||||
[Demon, Demon, Nuanced, Combo],
|
||||
[Summoner, Ranged, Nuanced, Nuanced, Ranged, Skirmisher, Simple],
|
||||
[Demon, Demon, Summoner, Skirmisher, Nuanced, Nuanced, Combo],
|
||||
]
|
||||
|
||||
@export var wave_index: int = -1
|
||||
@export var agents_alive: int = 0
|
||||
|
||||
@onready var gong: StaticBody2D = $Gong
|
||||
@onready var player: CharacterBody2D = $Player
|
||||
@onready var spawn_points: Node2D = $SpawnPoints
|
||||
@onready var hp_bar: TextureProgressBar = %HPBar
|
||||
@onready var round_counter: Label = %RoundCounter
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
hp_bar.max_value = player.get_health().max_health
|
||||
player.get_health().damaged.connect(func(_a,_b): hp_bar.value = player.get_health().get_current())
|
||||
player.death.connect(_on_player_death)
|
||||
|
||||
|
||||
func _update_round_counter() -> void:
|
||||
round_counter.text = "Round %s/%s" % [wave_index + 1, WAVES.size()]
|
||||
|
||||
|
||||
func _on_gong_gong_struck() -> void:
|
||||
_start_round()
|
||||
|
||||
|
||||
func _start_round() -> void:
|
||||
wave_index += 1
|
||||
if wave_index >= WAVES.size():
|
||||
player.set_victorious()
|
||||
round_counter.text = "Victorious!"
|
||||
return
|
||||
|
||||
await get_tree().create_timer(3.0).timeout
|
||||
_update_round_counter()
|
||||
|
||||
var spawns: Array = spawn_points.get_children()
|
||||
spawns.shuffle()
|
||||
for i in WAVES[wave_index].size():
|
||||
var agent_resource: PackedScene = WAVES[wave_index][i]
|
||||
var agent: CharacterBody2D = agent_resource.instantiate()
|
||||
add_child(agent)
|
||||
agent.global_position = spawns[i].global_position
|
||||
agent.death.connect(_on_agent_death)
|
||||
agent.play_summoning_effect()
|
||||
agents_alive += 1
|
||||
|
||||
|
||||
func _on_agent_death() -> void:
|
||||
agents_alive -= 1
|
||||
if agents_alive == 0:
|
||||
_start_round()
|
||||
|
||||
|
||||
func _on_player_death() -> void:
|
||||
await get_tree().create_timer(3.0).timeout
|
||||
get_tree().reload_current_scene()
|
||||
|
||||
|
||||
func _on_switch_to_showcase_pressed() -> void:
|
||||
get_tree().change_scene_to_file("res://demo/scenes/showcase.tscn")
|
||||
196
demo/scenes/game.tscn
Normal file
196
demo/scenes/game.tscn
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
[gd_scene load_steps=15 format=3 uid="uid://clyhgbpfpmtw7"]
|
||||
|
||||
[ext_resource type="Script" path="res://demo/scenes/game.gd" id="1_qw71e"]
|
||||
[ext_resource type="Theme" uid="uid://boqtjf88xcpu4" path="res://demo/assets/ui.theme" id="2_r21q3"]
|
||||
[ext_resource type="Texture2D" uid="uid://tyu0ua1ju38l" path="res://demo/assets/logo.png" id="3_g0us4"]
|
||||
[ext_resource type="FontFile" uid="uid://d25vkmce7mhlt" path="res://demo/assets/fonts/knewave_regular.ttf" id="4_w0vii"]
|
||||
[ext_resource type="Script" path="res://demo/scenes/base/toggle_fullscreen.gd" id="5_m16ov"]
|
||||
[ext_resource type="Texture2D" uid="uid://dlw15foygohrk" path="res://demo/assets/hp_under.png" id="6_622dk"]
|
||||
[ext_resource type="Texture2D" uid="uid://cls8jtnu413o8" path="res://demo/assets/hp_over.png" id="7_430mt"]
|
||||
[ext_resource type="Texture2D" uid="uid://hnwi23oef752" path="res://demo/assets/hp_bar.png" id="8_invih"]
|
||||
[ext_resource type="PackedScene" uid="uid://bsig1usigbbuy" path="res://demo/scenes/base/arena.tscn" id="9_k3uu1"]
|
||||
[ext_resource type="PackedScene" uid="uid://bpd1wmw2f7bvg" path="res://demo/props/gong.tscn" id="10_tftjb"]
|
||||
[ext_resource type="PackedScene" uid="uid://d07ag5dcje13i" path="res://demo/agents/player/player.tscn" id="11_bndob"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_qvxvp"]
|
||||
font = ExtResource("4_w0vii")
|
||||
font_size = 33
|
||||
outline_size = 11
|
||||
outline_color = Color(0.258915, 0.234974, 0.191974, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_628x3"]
|
||||
font = ExtResource("4_w0vii")
|
||||
font_size = 36
|
||||
font_color = Color(1, 1, 0.239216, 1)
|
||||
outline_size = 20
|
||||
outline_color = Color(0.211521, 0.23888, 0.290166, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_grcwx"]
|
||||
font = ExtResource("4_w0vii")
|
||||
font_size = 37
|
||||
outline_size = 12
|
||||
outline_color = Color(0.317525, 0.344884, 0.388373, 1)
|
||||
|
||||
[node name="Game" type="Node2D"]
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("1_qw71e")
|
||||
|
||||
[node name="UI Layer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="Control" type="Control" parent="UI Layer"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("2_r21q3")
|
||||
|
||||
[node name="Toolbar" type="PanelContainer" parent="UI Layer/Control"]
|
||||
custom_minimum_size = Vector2(0, 54.26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 64.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/Toolbar"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 4
|
||||
|
||||
[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_fonts/font = ExtResource("4_w0vii")
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Toggle Fullscreen"
|
||||
script = ExtResource("5_m16ov")
|
||||
|
||||
[node name="Switch to Showcase" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_fonts/font = ExtResource("4_w0vii")
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Switch to Showcase
|
||||
"
|
||||
|
||||
[node name="RoundCounter" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
text = "Strike the Gong to begin!"
|
||||
label_settings = SubResource("LabelSettings_qvxvp")
|
||||
|
||||
[node name="HPBar" type="TextureProgressBar" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
value = 100.0
|
||||
texture_under = ExtResource("6_622dk")
|
||||
texture_over = ExtResource("7_430mt")
|
||||
texture_progress = ExtResource("8_invih")
|
||||
|
||||
[node name="Logo" type="TextureRect" parent="UI Layer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -1899.0
|
||||
offset_top = -130.0
|
||||
offset_right = -1643.0
|
||||
offset_bottom = -45.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
texture = ExtResource("3_g0us4")
|
||||
|
||||
[node name="Demo project" type="Label" parent="UI Layer/Control/Logo"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -316.0
|
||||
offset_top = -72.0
|
||||
offset_right = 13.0
|
||||
offset_bottom = 74.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "demo project"
|
||||
label_settings = SubResource("LabelSettings_628x3")
|
||||
horizontal_alignment = 2
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Keys" type="Label" parent="UI Layer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -336.0
|
||||
offset_top = -208.0
|
||||
offset_right = -18.0
|
||||
offset_bottom = -25.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "Move WASD
|
||||
Dodge SPACE
|
||||
Attack ENTER / F
|
||||
"
|
||||
label_settings = SubResource("LabelSettings_grcwx")
|
||||
|
||||
[node name="Arena" parent="." instance=ExtResource("9_k3uu1")]
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="Gong" parent="." instance=ExtResource("10_tftjb")]
|
||||
position = Vector2(923, -21)
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("11_bndob")]
|
||||
position = Vector2(843, 455)
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="Player"]
|
||||
position = Vector2(0, -100)
|
||||
zoom = Vector2(0.88, 0.88)
|
||||
process_callback = 0
|
||||
position_smoothing_enabled = true
|
||||
drag_horizontal_enabled = true
|
||||
drag_vertical_enabled = true
|
||||
drag_top_margin = 0.1
|
||||
drag_bottom_margin = 0.1
|
||||
|
||||
[node name="SpawnPoints" type="Node2D" parent="."]
|
||||
|
||||
[node name="SpawnPosition1" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(512, -180)
|
||||
|
||||
[node name="SpawnPosition2" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(1421, -150)
|
||||
|
||||
[node name="SpawnPosition3" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(1512, 300)
|
||||
|
||||
[node name="SpawnPosition4" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(2264, 345)
|
||||
|
||||
[node name="SpawnPosition5" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(1655, 789)
|
||||
|
||||
[node name="SpawnPosition6" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(823, 826)
|
||||
|
||||
[node name="SpawnPosition7" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(67, 648)
|
||||
|
||||
[node name="SpawnPosition8" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(-399, 434)
|
||||
|
||||
[node name="SpawnPosition9" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(629, 417)
|
||||
|
||||
[node name="SpawnPosition10" type="Marker2D" parent="SpawnPoints"]
|
||||
position = Vector2(1859, 3)
|
||||
|
||||
[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/Switch to Showcase" to="." method="_on_switch_to_showcase_pressed"]
|
||||
[connection signal="gong_struck" from="Gong" to="." method="_on_gong_gong_struck"]
|
||||
156
demo/scenes/showcase.gd
Normal file
156
demo/scenes/showcase.gd
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
#*
|
||||
#* showcase.gd
|
||||
#* =============================================================================
|
||||
#* Copyright 2024 Serhii Snitsaruk
|
||||
#*
|
||||
#* Use of this source code is governed by an MIT-style
|
||||
#* license that can be found in the LICENSE file or at
|
||||
#* https://opensource.org/licenses/MIT.
|
||||
#* =============================================================================
|
||||
#*
|
||||
|
||||
extends Node2D
|
||||
|
||||
@onready var behavior_tree_view: BehaviorTreeView = %BehaviorTreeView
|
||||
@onready var camera: Camera2D = $Camera2D
|
||||
@onready var agent_selection: MenuButton = %AgentSelection
|
||||
@onready var previous: Button = %Previous
|
||||
@onready var next: Button = %Next
|
||||
@onready var minimize_description: Button = %MinimizeDescription
|
||||
@onready var description: RichTextLabel = %Description
|
||||
@onready var begin_tutorial: Button = %BeginTutorial
|
||||
@onready var navigation_hint: Label = %NavigationHint
|
||||
@onready var scene_title: Label = %SceneTitle
|
||||
@onready var code_popup = %CodePopup
|
||||
@onready var code_edit = %CodeEdit
|
||||
|
||||
var bt_player: BTPlayer
|
||||
var selected_tree_index: int = -1
|
||||
var agent_files: Array[String]
|
||||
var agents_dir: String
|
||||
var is_tutorial: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
code_popup.hide()
|
||||
|
||||
agent_selection.get_popup().id_pressed.connect(_on_agent_selection_id_pressed)
|
||||
previous.pressed.connect(func(): _on_agent_selection_id_pressed(selected_tree_index - 1))
|
||||
next.pressed.connect(func(): _on_agent_selection_id_pressed(selected_tree_index + 1))
|
||||
|
||||
_initialize()
|
||||
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
var inst: BTInstance = bt_player.get_bt_instance()
|
||||
var bt_data: BehaviorTreeData = BehaviorTreeData.create_from_bt_instance(inst)
|
||||
behavior_tree_view.update_tree(bt_data)
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
if is_tutorial:
|
||||
_populate_agent_files("res://demo/agents/tutorial/")
|
||||
begin_tutorial.text = "End Tutorial"
|
||||
navigation_hint.text = "Navigate ➤"
|
||||
scene_title.text = "Tutorial"
|
||||
_on_agent_selection_id_pressed(0)
|
||||
else:
|
||||
_populate_agent_files("res://demo/agents/")
|
||||
begin_tutorial.text = "Begin Tutorial"
|
||||
navigation_hint.text = "Select Agent ➤"
|
||||
scene_title.text = "Showcase"
|
||||
_on_agent_selection_id_pressed(0)
|
||||
|
||||
|
||||
func _attach_camera(agent: CharacterBody2D) -> void:
|
||||
await get_tree().process_frame
|
||||
camera.get_parent().remove_child(camera)
|
||||
agent.add_child(camera)
|
||||
camera.position = Vector2(400.0, 0.0)
|
||||
|
||||
|
||||
func _populate_agent_files(p_path: String = "res://demo/agents/") -> void:
|
||||
var popup: PopupMenu = agent_selection.get_popup()
|
||||
popup.clear()
|
||||
popup.reset_size()
|
||||
agent_files.clear()
|
||||
agents_dir = p_path
|
||||
|
||||
var dir := DirAccess.open(p_path)
|
||||
if dir:
|
||||
dir.list_dir_begin()
|
||||
var file_name: String = dir.get_next()
|
||||
while file_name != "":
|
||||
if dir.current_is_dir() or file_name.begins_with("agent_base"):
|
||||
file_name = dir.get_next()
|
||||
continue
|
||||
agent_files.append(file_name.get_file().trim_suffix(".remap"))
|
||||
file_name = dir.get_next()
|
||||
dir.list_dir_end()
|
||||
|
||||
agent_files.sort()
|
||||
for i in agent_files.size():
|
||||
popup.add_item(agent_files[i], i)
|
||||
|
||||
|
||||
func _load_agent(file_name: String) -> void:
|
||||
var agent_res := load(file_name) as PackedScene
|
||||
assert(agent_res != null)
|
||||
|
||||
for child in get_children():
|
||||
if child is CharacterBody2D and child.name != "Dummy":
|
||||
child.die()
|
||||
|
||||
var agent: CharacterBody2D = agent_res.instantiate()
|
||||
add_child(agent)
|
||||
bt_player = agent.find_child("BTPlayer")
|
||||
description.text = _parse_description(bt_player.behavior_tree.description)
|
||||
_attach_camera(agent)
|
||||
|
||||
|
||||
func _parse_description(p_desc: String) -> String:
|
||||
return p_desc \
|
||||
.replace("[SUCCESS]", "[color=PaleGreen]SUCCESS[/color]") \
|
||||
.replace("[FAILURE]", "[color=IndianRed]FAILURE[/color]") \
|
||||
.replace("[RUNNING]", "[color=orange]RUNNING[/color]") \
|
||||
.replace("[comp]", "[color=CornflowerBlue][b]") \
|
||||
.replace("[/comp]", "[/b][/color]") \
|
||||
.replace("[act]", "[color=white][b]") \
|
||||
.replace("[/act]", "[/b][/color]") \
|
||||
.replace("[dec]", "[color=MediumOrchid][b]") \
|
||||
.replace("[/dec]", "[/b][/color]") \
|
||||
.replace("[con]", "[color=orange][b]") \
|
||||
.replace("[/con]", "[/b][/color]")
|
||||
|
||||
|
||||
func _on_agent_selection_id_pressed(id: int) -> void:
|
||||
assert(id >= 0 and id < agent_files.size())
|
||||
selected_tree_index = id
|
||||
_load_agent(agents_dir.path_join(agent_files[id]))
|
||||
agent_selection.text = bt_player.behavior_tree.resource_path.get_file()
|
||||
if agent_selection.text.to_lower() != agent_selection.text:
|
||||
# Treat filename as a title
|
||||
agent_selection.text = agent_selection.text.trim_suffix(".tres")
|
||||
previous.disabled = id == 0
|
||||
next.disabled = id == (agent_files.size() - 1)
|
||||
|
||||
|
||||
func _on_switch_to_game_pressed() -> void:
|
||||
get_tree().change_scene_to_file("res://demo/scenes/game.tscn")
|
||||
|
||||
|
||||
func _on_minimize_description_button_down() -> void:
|
||||
description.visible = not description.visible
|
||||
minimize_description.text = "-" if description.visible else "+"
|
||||
|
||||
|
||||
func _on_tutorial_pressed() -> void:
|
||||
is_tutorial = not is_tutorial
|
||||
_initialize()
|
||||
|
||||
|
||||
func _on_behavior_tree_view_task_selected(_type_name: String, p_script_path: String) -> void:
|
||||
if not p_script_path.is_empty():
|
||||
var sc: Script = load(p_script_path)
|
||||
code_edit.set_source_code(sc.source_code)
|
||||
code_popup.popup.call_deferred()
|
||||
288
demo/scenes/showcase.tscn
Normal file
288
demo/scenes/showcase.tscn
Normal file
|
|
@ -0,0 +1,288 @@
|
|||
[gd_scene load_steps=16 format=3 uid="uid://b3ae14mc2ty3y"]
|
||||
|
||||
[ext_resource type="Script" path="res://demo/scenes/showcase.gd" id="1_l12ql"]
|
||||
[ext_resource type="Theme" uid="uid://boqtjf88xcpu4" path="res://demo/assets/ui.theme" id="2_3d7dj"]
|
||||
[ext_resource type="FontFile" uid="uid://d25vkmce7mhlt" path="res://demo/assets/fonts/knewave_regular.ttf" id="3_7vli5"]
|
||||
[ext_resource type="FontFile" uid="uid://n231m6uqsq6x" path="res://demo/assets/fonts/junction_bold.otf" id="4_7ubu6"]
|
||||
[ext_resource type="Texture2D" uid="uid://dc1wu244fnetf" path="res://demo/assets/arrow_left.png" id="5_bvrtp"]
|
||||
[ext_resource type="Texture2D" uid="uid://tyu0ua1ju38l" path="res://demo/assets/logo.png" id="5_rwygb"]
|
||||
[ext_resource type="Script" path="res://demo/scenes/base/toggle_fullscreen.gd" id="6_uggpo"]
|
||||
[ext_resource type="Texture2D" uid="uid://bjakugmqbbtw7" path="res://demo/assets/arrow_right.png" id="7_5do2y"]
|
||||
[ext_resource type="PackedScene" uid="uid://bsig1usigbbuy" path="res://demo/scenes/base/arena.tscn" id="7_42nq6"]
|
||||
[ext_resource type="PackedScene" uid="uid://c5fhe3tulhlco" path="res://demo/props/dummy.tscn" id="8_apshw"]
|
||||
[ext_resource type="Script" path="res://demo/scenes/base/code_edit.gd" id="9_txke7"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_rdr7a"]
|
||||
font = ExtResource("3_7vli5")
|
||||
font_size = 33
|
||||
outline_size = 11
|
||||
outline_color = Color(0.258915, 0.234974, 0.191974, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_3uhve"]
|
||||
font = ExtResource("3_7vli5")
|
||||
font_size = 26
|
||||
font_color = Color(0.804089, 0.811917, 0.823636, 1)
|
||||
outline_size = 10
|
||||
outline_color = Color(0.145083, 0.168536, 0.203708, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_la4ui"]
|
||||
font = ExtResource("3_7vli5")
|
||||
font_size = 36
|
||||
font_color = Color(1, 1, 0.239216, 1)
|
||||
outline_size = 20
|
||||
outline_color = Color(0.211521, 0.23888, 0.290166, 1)
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_tlprv"]
|
||||
font = ExtResource("3_7vli5")
|
||||
font_size = 23
|
||||
font_color = Color(0.804089, 0.811917, 0.823636, 1)
|
||||
outline_size = 10
|
||||
outline_color = Color(0.145083, 0.168536, 0.203708, 1)
|
||||
|
||||
[node name="AgentShowcase" type="Node2D"]
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("1_l12ql")
|
||||
|
||||
[node name="UI Layer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="Control" type="Control" parent="UI Layer"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("2_3d7dj")
|
||||
|
||||
[node name="Toolbar" type="PanelContainer" parent="UI Layer/Control"]
|
||||
custom_minimum_size = Vector2(0, 54.26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 10
|
||||
anchor_right = 1.0
|
||||
offset_right = -612.0
|
||||
offset_bottom = 58.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/Toolbar"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 4
|
||||
|
||||
[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_fonts/font = ExtResource("3_7vli5")
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Toggle Fullscreen"
|
||||
script = ExtResource("6_uggpo")
|
||||
|
||||
[node name="SwitchToGame" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_fonts/font = ExtResource("3_7vli5")
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Switch to Game"
|
||||
|
||||
[node name="BeginTutorial" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_fonts/font = ExtResource("3_7vli5")
|
||||
theme_override_font_sizes/font_size = 22
|
||||
text = "Begin Tutorial
|
||||
"
|
||||
|
||||
[node name="SceneTitle" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 6
|
||||
text = "Tutorial"
|
||||
label_settings = SubResource("LabelSettings_rdr7a")
|
||||
|
||||
[node name="NavigationHint" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
text = "Select Agent ➤"
|
||||
label_settings = SubResource("LabelSettings_3uhve")
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="BehaviorInspector" type="PanelContainer" parent="UI Layer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 11
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -612.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control/BehaviorInspector"]
|
||||
custom_minimum_size = Vector2(600, 0)
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 4
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/BehaviorInspector/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 4
|
||||
|
||||
[node name="Previous" type="Button" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_font_sizes/font_size = 28
|
||||
icon = ExtResource("5_bvrtp")
|
||||
|
||||
[node name="AgentSelection" type="MenuButton" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(400, 50)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_fonts/font = ExtResource("4_7ubu6")
|
||||
theme_override_font_sizes/font_size = 30
|
||||
text = "02_agent_imp.tres
|
||||
"
|
||||
flat = false
|
||||
|
||||
[node name="Next" type="Button" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
theme_override_font_sizes/font_size = 28
|
||||
icon = ExtResource("7_5do2y")
|
||||
|
||||
[node name="BehaviorTreeView" type="BehaviorTreeView" parent="UI Layer/Control/BehaviorInspector/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(600, 0)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="UI Layer/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = -8.0
|
||||
offset_right = -612.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="Control" type="Control" parent="UI Layer/Control/PanelContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Logo" type="TextureRect" parent="UI Layer/Control/PanelContainer/Control"]
|
||||
layout_mode = 1
|
||||
offset_top = -128.0
|
||||
offset_right = 256.0
|
||||
offset_bottom = -43.0
|
||||
texture = ExtResource("5_rwygb")
|
||||
|
||||
[node name="Demo project" type="Label" parent="UI Layer/Control/PanelContainer/Control/Logo"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -316.0
|
||||
offset_top = -72.0
|
||||
offset_right = 13.0
|
||||
offset_bottom = 74.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
text = "demo project"
|
||||
label_settings = SubResource("LabelSettings_la4ui")
|
||||
horizontal_alignment = 2
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Header" type="HBoxContainer" parent="UI Layer/Control/PanelContainer/Control"]
|
||||
layout_mode = 2
|
||||
offset_left = 3.0
|
||||
offset_top = -43.0
|
||||
offset_right = 1299.0
|
||||
offset_bottom = -7.0
|
||||
theme_override_constants/separation = 8
|
||||
|
||||
[node name="Label" type="Label" parent="UI Layer/Control/PanelContainer/Control/Header"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 10
|
||||
text = "Description"
|
||||
label_settings = SubResource("LabelSettings_tlprv")
|
||||
|
||||
[node name="MinimizeDescription" type="Button" parent="UI Layer/Control/PanelContainer/Control/Header"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(32, 32)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
focus_mode = 0
|
||||
theme_override_fonts/font = ExtResource("3_7vli5")
|
||||
text = "-"
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="UI Layer/Control/PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 20
|
||||
theme_override_constants/margin_top = 6
|
||||
theme_override_constants/margin_bottom = 6
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control/PanelContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 0
|
||||
|
||||
[node name="Description" type="RichTextLabel" parent="UI Layer/Control/PanelContainer/MarginContainer/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(0, 140)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme_override_font_sizes/bold_italics_font_size = 20
|
||||
theme_override_font_sizes/italics_font_size = 20
|
||||
theme_override_font_sizes/mono_font_size = 20
|
||||
theme_override_font_sizes/normal_font_size = 20
|
||||
theme_override_font_sizes/bold_font_size = 20
|
||||
bbcode_enabled = true
|
||||
text = "[b]Behavior Trees[/b] are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of the Blackboard."
|
||||
fit_content = true
|
||||
|
||||
[node name="CodePopup" type="PopupPanel" parent="UI Layer/Control"]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2i(0, 60)
|
||||
size = Vector2i(1024, 708)
|
||||
visible = true
|
||||
|
||||
[node name="CodeEdit" type="CodeEdit" parent="UI Layer/Control/CodePopup"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(800, 700)
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 4.0
|
||||
offset_top = 4.0
|
||||
offset_right = 1020.0
|
||||
offset_bottom = 704.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
gutters_draw_line_numbers = true
|
||||
script = ExtResource("9_txke7")
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
position = Vector2(400, 0)
|
||||
zoom = Vector2(0.88, 0.88)
|
||||
process_callback = 0
|
||||
position_smoothing_enabled = true
|
||||
drag_horizontal_enabled = true
|
||||
drag_vertical_enabled = true
|
||||
drag_left_margin = 0.1
|
||||
drag_top_margin = 0.1
|
||||
drag_right_margin = 0.0
|
||||
drag_bottom_margin = 0.1
|
||||
|
||||
[node name="Arena" parent="." instance=ExtResource("7_42nq6")]
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="Dummy" parent="." instance=ExtResource("8_apshw")]
|
||||
position = Vector2(1106, 423)
|
||||
|
||||
[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/SwitchToGame" to="." method="_on_switch_to_game_pressed"]
|
||||
[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/BeginTutorial" to="." method="_on_tutorial_pressed"]
|
||||
[connection signal="task_selected" from="UI Layer/Control/BehaviorInspector/VBoxContainer/BehaviorTreeView" to="." method="_on_behavior_tree_view_task_selected"]
|
||||
[connection signal="button_down" from="UI Layer/Control/PanelContainer/Control/Header/MinimizeDescription" to="." method="_on_minimize_description_button_down"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue