Update typing

Add Tile class
This commit is contained in:
Matthew Welch 2024-09-30 20:50:05 -07:00
parent 0ebd3f2de3
commit 05d285a750
8 changed files with 60 additions and 35 deletions

17
Tiles/Tile.gd Normal file
View File

@ -0,0 +1,17 @@
extends Node3D
class_name Tile
@onready var path = $MainPath as Path3D
@onready var follow = $MainPath/Follow as PathFollow3D
var length: float:
get:
return path.curve.get_baked_length() as float
func _ready():
pass # Replace with function body.
func _process(delta):
pass

View File

@ -1,4 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://cvtgigpmwwv4g"] [gd_scene load_steps=6 format=3 uid="uid://cvtgigpmwwv4g"]
[ext_resource type="Script" path="res://Tiles/Tile.gd" id="1_wu32c"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"]
cull_mode = 2 cull_mode = 2
@ -19,6 +21,7 @@ _data = {
point_count = 2 point_count = 2
[node name="Tile1" type="Node3D"] [node name="Tile1" type="Node3D"]
script = ExtResource("1_wu32c")
[node name="Floor" type="MeshInstance3D" parent="."] [node name="Floor" type="MeshInstance3D" parent="."]
mesh = SubResource("PlaneMesh_jju0s") mesh = SubResource("PlaneMesh_jju0s")
@ -31,10 +34,10 @@ mesh = SubResource("PlaneMesh_rsriu")
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 5, 1, 0) transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 5, 1, 0)
mesh = SubResource("PlaneMesh_rsriu") mesh = SubResource("PlaneMesh_rsriu")
[node name="Path3D" type="Path3D" parent="."] [node name="MainPath" type="Path3D" parent="."]
curve = SubResource("Curve3D_q1k88") curve = SubResource("Curve3D_q1k88")
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"] [node name="Follow" type="PathFollow3D" parent="MainPath"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
rotation_mode = 1 rotation_mode = 1
loop = false loop = false

View File

@ -1,4 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://fafw4evt372"] [gd_scene load_steps=6 format=3 uid="uid://fafw4evt372"]
[ext_resource type="Script" path="res://Tiles/Tile.gd" id="1_qgvt0"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"]
cull_mode = 2 cull_mode = 2
@ -19,7 +21,7 @@ _data = {
point_count = 2 point_count = 2
[node name="Tile1" type="Node3D"] [node name="Tile1" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) script = ExtResource("1_qgvt0")
[node name="Floor" type="MeshInstance3D" parent="."] [node name="Floor" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.866025, -0.5, 0, 0.5, 0.866025, 0, 0.0893164, -0.333333) transform = Transform3D(1, 0, 0, 0, 0.866025, -0.5, 0, 0.5, 0.866025, 0, 0.0893164, -0.333333)
@ -33,10 +35,10 @@ mesh = SubResource("PlaneMesh_rsriu")
transform = Transform3D(-4.37114e-08, 1, 0, -0.866025, -3.78552e-08, -0.5, -0.5, -2.18557e-08, 0.866025, 5, 0.955342, 0.166667) transform = Transform3D(-4.37114e-08, 1, 0, -0.866025, -3.78552e-08, -0.5, -0.5, -2.18557e-08, 0.866025, 5, 0.955342, 0.166667)
mesh = SubResource("PlaneMesh_rsriu") mesh = SubResource("PlaneMesh_rsriu")
[node name="Path3D" type="Path3D" parent="."] [node name="MainPath" type="Path3D" parent="."]
curve = SubResource("Curve3D_q1k88") curve = SubResource("Curve3D_q1k88")
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"] [node name="Follow" type="PathFollow3D" parent="MainPath"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.40419, 3.96713) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2.40419, 3.96713)
rotation_mode = 1 rotation_mode = 1
loop = false loop = false

View File

@ -1,4 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://b88nuwe42bhc1"] [gd_scene load_steps=6 format=3 uid="uid://b88nuwe42bhc1"]
[ext_resource type="Script" path="res://Tiles/Tile.gd" id="1_6m2c8"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"]
cull_mode = 2 cull_mode = 2
@ -19,6 +21,7 @@ _data = {
point_count = 3 point_count = 3
[node name="Tile1" type="Node3D"] [node name="Tile1" type="Node3D"]
script = ExtResource("1_6m2c8")
[node name="Floor" type="MeshInstance3D" parent="."] [node name="Floor" type="MeshInstance3D" parent="."]
mesh = SubResource("PlaneMesh_jju0s") mesh = SubResource("PlaneMesh_jju0s")
@ -31,10 +34,10 @@ mesh = SubResource("PlaneMesh_rsriu")
transform = Transform3D(1.91069e-15, -4.37114e-08, 1, -1, -4.37114e-08, 0, 4.37114e-08, -1, -4.37114e-08, 0, 1, -5) transform = Transform3D(1.91069e-15, -4.37114e-08, 1, -1, -4.37114e-08, 0, 4.37114e-08, -1, -4.37114e-08, 0, 1, -5)
mesh = SubResource("PlaneMesh_rsriu") mesh = SubResource("PlaneMesh_rsriu")
[node name="Path3D" type="Path3D" parent="."] [node name="MainPath" type="Path3D" parent="."]
curve = SubResource("Curve3D_q1k88") curve = SubResource("Curve3D_q1k88")
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"] [node name="Follow" type="PathFollow3D" parent="MainPath"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
rotation_mode = 1 rotation_mode = 1
loop = false loop = false

View File

@ -14,18 +14,18 @@ func _ready() -> void:
if path == null or path is not Path3D: if path == null or path is not Path3D:
printerr("path is not set to a Path3D") printerr("path is not set to a Path3D")
return return
follow = path.get_node("Follow") follow = path.get_node("Follow") as PathFollow3D
marker = follow.get_node("Marker") marker = follow.get_node("Marker") as Marker3D
func _process(delta): func _process(delta: float):
if path == null: if path == null:
return return
global_position = marker.global_position global_position = marker.global_position
global_rotation = marker.global_rotation global_rotation = marker.global_rotation
if follow.progress_ratio >= 1: if follow.progress_ratio >= 1:
return return
var travel = speed * delta var travel: float = speed * delta
follow.progress += travel follow.progress += travel
total_distance += travel total_distance += travel
@ -35,14 +35,14 @@ func set_path(new_path: Path3D):
printerr("path must be a Path3D") printerr("path must be a Path3D")
return return
path = new_path path = new_path
follow = Utils.find_first_node_of_type(path, PathFollow3D) follow = Utils.find_first_node_of_type(path, PathFollow3D) as PathFollow3D
if follow == null: if follow == null:
follow = PathFollow3D.new() follow = PathFollow3D.new()
path.add_child(follow) path.add_child(follow)
marker = Marker3D.new() marker = Marker3D.new()
follow.add_child(marker) follow.add_child(marker)
return return
marker = Utils.find_first_node_of_type(follow, Marker3D) marker = Utils.find_first_node_of_type(follow, Marker3D) as Marker3D
if marker == null: if marker == null:
marker = Marker3D.new() marker = Marker3D.new()
follow.add_child(marker) follow.add_child(marker)

View File

@ -11,6 +11,7 @@ config_version=5
[application] [application]
config/name="Fantasy Run" config/name="Fantasy Run"
run/main_scene="res://world.tscn"
config/features=PackedStringArray("4.3", "Mobile") config/features=PackedStringArray("4.3", "Mobile")
config/icon="res://icon.svg" config/icon="res://icon.svg"

View File

@ -1,17 +1,17 @@
extends Node extends Node
func find_first_node_of_type(node: Node, type: Variant): func find_first_node_of_type(node: Node, type: Variant) -> Node:
for child in node.get_children(): for child in node.get_children():
if is_instance_of(child, type): if is_instance_of(child, type):
return child return child
return null return null
func get_nodes_of_class(node: Node, type: Variant) -> Array: func get_nodes_of_class(node: Node, type: Variant, include_internal: bool = false) -> Array[Variant]:
var nodes = [] var nodes: Array[Variant] = []
for child in node.get_children(true): for child in node.get_children(include_internal):
if is_instance_of(child, type): if is_instance_of(child, type):
nodes.append(child) nodes.append(child)
elif child.get_child_count(true) > 0: elif child.get_child_count(include_internal) > 0:
nodes.append_array(get_nodes_of_class(child, type)) nodes.append_array(get_nodes_of_class(child, type, include_internal))
return nodes return nodes

View File

@ -1,27 +1,26 @@
extends Node3D extends Node3D
@onready var path: Path3D = $Path @onready var character = $Character as Character
@onready var character: Character = $Character
var change_distance: float var change_distance: float
var paths: Array var tiles: Array[Tile]
var current_path: int = 0 var current_tile: int = 0
func _ready() -> void: func _ready() -> void:
paths = Utils.get_nodes_of_class(self, Path3D) tiles.assign(Utils.get_nodes_of_class(self, Tile))
if paths.size() == 0: if tiles.size() == 0:
printerr("There are no Path3Ds in the scene.") printerr("There are no Tiles in the scene.")
return return
change_distance = paths[current_path].curve.get_baked_length() change_distance = tiles[current_tile].length
if character.path == null: if character.path == null:
character.path = paths[current_path] character.path = tiles[current_tile].path
func _process(delta: float) -> void: func _process(delta: float) -> void:
if is_equal_approx(character.follow.progress, change_distance): if is_equal_approx(character.follow.progress, change_distance):
current_path += 1 current_tile += 1
if current_path >= paths.size(): if current_tile >= tiles.size():
return return
character.path = paths[current_path] character.path = tiles[current_tile].path
change_distance = paths[current_path].curve.get_baked_length() change_distance = tiles[current_tile].length