Add initial tile scenes
Update script to dynamically find paths to follow
This commit is contained in:
parent
c30454e7b8
commit
7819007b01
41
Tiles/Tile1.tscn
Normal file
41
Tiles/Tile1.tscn
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://cvtgigpmwwv4g"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"]
|
||||||
|
cull_mode = 2
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_jju0s"]
|
||||||
|
material = SubResource("StandardMaterial3D_cwetn")
|
||||||
|
size = Vector2(10, 10)
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_rsriu"]
|
||||||
|
material = SubResource("StandardMaterial3D_cwetn")
|
||||||
|
size = Vector2(2, 10)
|
||||||
|
|
||||||
|
[sub_resource type="Curve3D" id="Curve3D_q1k88"]
|
||||||
|
_data = {
|
||||||
|
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, -5),
|
||||||
|
"tilts": PackedFloat32Array(0, 0)
|
||||||
|
}
|
||||||
|
point_count = 2
|
||||||
|
|
||||||
|
[node name="Tile1" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Floor" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("PlaneMesh_jju0s")
|
||||||
|
|
||||||
|
[node name="Wall1" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, -5, 1, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_rsriu")
|
||||||
|
|
||||||
|
[node name="Wall2" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 5, 1, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_rsriu")
|
||||||
|
|
||||||
|
[node name="Path3D" type="Path3D" parent="."]
|
||||||
|
curve = SubResource("Curve3D_q1k88")
|
||||||
|
|
||||||
|
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
|
||||||
|
rotation_mode = 1
|
||||||
|
loop = false
|
||||||
|
tilt_enabled = false
|
42
Tiles/TileRamp1.tscn
Normal file
42
Tiles/TileRamp1.tscn
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://fafw4evt372"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"]
|
||||||
|
cull_mode = 2
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_jju0s"]
|
||||||
|
material = SubResource("StandardMaterial3D_cwetn")
|
||||||
|
size = Vector2(10, 10)
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_rsriu"]
|
||||||
|
material = SubResource("StandardMaterial3D_cwetn")
|
||||||
|
size = Vector2(2, 10)
|
||||||
|
|
||||||
|
[sub_resource type="Curve3D" id="Curve3D_q1k88"]
|
||||||
|
_data = {
|
||||||
|
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, -5),
|
||||||
|
"tilts": PackedFloat32Array(0, 0)
|
||||||
|
}
|
||||||
|
point_count = 2
|
||||||
|
|
||||||
|
[node name="Tile1" type="Node3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.866025, -0.5, 0, 0.5, 0.866025, 0, 0, 0)
|
||||||
|
|
||||||
|
[node name="Floor" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("PlaneMesh_jju0s")
|
||||||
|
|
||||||
|
[node name="Wall1" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, -5, 1, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_rsriu")
|
||||||
|
|
||||||
|
[node name="Wall2" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 5, 1, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_rsriu")
|
||||||
|
|
||||||
|
[node name="Path3D" type="Path3D" parent="."]
|
||||||
|
curve = SubResource("Curve3D_q1k88")
|
||||||
|
|
||||||
|
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
|
||||||
|
rotation_mode = 1
|
||||||
|
loop = false
|
||||||
|
tilt_enabled = false
|
41
Tiles/TileTurn1.tscn
Normal file
41
Tiles/TileTurn1.tscn
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://b88nuwe42bhc1"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cwetn"]
|
||||||
|
cull_mode = 2
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_jju0s"]
|
||||||
|
material = SubResource("StandardMaterial3D_cwetn")
|
||||||
|
size = Vector2(10, 10)
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_rsriu"]
|
||||||
|
material = SubResource("StandardMaterial3D_cwetn")
|
||||||
|
size = Vector2(2, 10)
|
||||||
|
|
||||||
|
[sub_resource type="Curve3D" id="Curve3D_q1k88"]
|
||||||
|
_data = {
|
||||||
|
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0),
|
||||||
|
"tilts": PackedFloat32Array(0, 0, 0)
|
||||||
|
}
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[node name="Tile1" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Floor" type="MeshInstance3D" parent="."]
|
||||||
|
mesh = SubResource("PlaneMesh_jju0s")
|
||||||
|
|
||||||
|
[node name="Wall1" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, -5, 1, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_rsriu")
|
||||||
|
|
||||||
|
[node name="Wall2" type="MeshInstance3D" parent="."]
|
||||||
|
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")
|
||||||
|
|
||||||
|
[node name="Path3D" type="Path3D" parent="."]
|
||||||
|
curve = SubResource("Curve3D_q1k88")
|
||||||
|
|
||||||
|
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
|
||||||
|
rotation_mode = 1
|
||||||
|
loop = false
|
||||||
|
tilt_enabled = false
|
@ -1,10 +1,10 @@
|
|||||||
@tool
|
|
||||||
extends Area3D
|
extends Area3D
|
||||||
|
class_name Character
|
||||||
|
|
||||||
|
|
||||||
@export var path: Path3D:
|
@export var path: Path3D:
|
||||||
set = set_path
|
set = set_path
|
||||||
@export var speed: float = 5.0
|
@export var speed: float = 10.0
|
||||||
|
|
||||||
var follow: PathFollow3D
|
var follow: PathFollow3D
|
||||||
var marker: Marker3D
|
var marker: Marker3D
|
||||||
@ -22,16 +22,12 @@ func _process(delta):
|
|||||||
if path == null:
|
if path == null:
|
||||||
return
|
return
|
||||||
global_position = marker.global_position
|
global_position = marker.global_position
|
||||||
|
global_rotation = marker.global_rotation
|
||||||
if follow.progress_ratio >= 1:
|
if follow.progress_ratio >= 1:
|
||||||
return
|
return
|
||||||
var travel = speed * delta
|
var travel = speed * delta
|
||||||
follow.progress += travel
|
follow.progress += travel
|
||||||
total_distance += travel
|
total_distance += travel
|
||||||
#if is_equal_approx(follow.progress, change_distance):
|
|
||||||
#path = $Path3D2
|
|
||||||
#follow = path.get_node(("Follow"))
|
|
||||||
#change_distance = path.curve.get_baked_length()
|
|
||||||
#marker.reparent(follow)
|
|
||||||
|
|
||||||
|
|
||||||
func set_path(new_path: Path3D):
|
func set_path(new_path: Path3D):
|
||||||
@ -39,13 +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 = path.get_node("Follow")
|
follow = Utils.find_first_node_of_type(path, PathFollow3D)
|
||||||
marker = follow.get_node("Marker")
|
if follow == null:
|
||||||
update_configuration_warnings()
|
follow = PathFollow3D.new()
|
||||||
|
path.add_child(follow)
|
||||||
|
marker = Marker3D.new()
|
||||||
func _get_configuration_warnings() -> PackedStringArray:
|
follow.add_child(marker)
|
||||||
var warnings = []
|
return
|
||||||
if path == null or path is not Path3D:
|
marker = Utils.find_first_node_of_type(follow, Marker3D)
|
||||||
warnings.append("path must be set to a Path3D.")
|
if marker == null:
|
||||||
return warnings
|
marker = Marker3D.new()
|
||||||
|
follow.add_child(marker)
|
||||||
|
@ -14,6 +14,10 @@ config/name="Fantasy Run"
|
|||||||
config/features=PackedStringArray("4.3", "Mobile")
|
config/features=PackedStringArray("4.3", "Mobile")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
Utils="*res://utils.gd"
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
||||||
renderer/rendering_method="mobile"
|
renderer/rendering_method="mobile"
|
||||||
|
17
utils.gd
Normal file
17
utils.gd
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
func find_first_node_of_type(node: Node, type: Variant):
|
||||||
|
for child in node.get_children():
|
||||||
|
if is_instance_of(child, type):
|
||||||
|
return child
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
func get_nodes_of_class(node: Node, type: Variant) -> Array:
|
||||||
|
var nodes = []
|
||||||
|
for child in node.get_children(true):
|
||||||
|
if is_instance_of(child, type):
|
||||||
|
nodes.append(child)
|
||||||
|
elif child.get_child_count(true) > 0:
|
||||||
|
nodes.append_array(get_nodes_of_class(child, type))
|
||||||
|
return nodes
|
43
world.gd
43
world.gd
@ -1,32 +1,29 @@
|
|||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
@export var speed: float = 10
|
|
||||||
@onready var path_3d_2: Path3D = $Path3D2
|
|
||||||
@onready var path: Path3D = $Path
|
@onready var path: Path3D = $Path
|
||||||
@onready var follow: PathFollow3D = $Path/Follow
|
|
||||||
@onready var marker: Marker3D = $Path/Follow/Marker
|
@onready var marker: Marker3D = $Path/Follow/Marker
|
||||||
|
@onready var character: Character = $Character
|
||||||
|
|
||||||
var points_added = false
|
|
||||||
|
|
||||||
var point_removed = false
|
|
||||||
var change_distance: float
|
var change_distance: float
|
||||||
var total_distance: float = 0
|
var paths: Array
|
||||||
|
var current_path: int = 0
|
||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
change_distance = path.curve.get_baked_length()
|
paths = Utils.get_nodes_of_class(self, Path3D)
|
||||||
|
if paths.size() == 0:
|
||||||
|
printerr("There are no Path3Ds in the scene.")
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
func _process(delta: float) -> void:
|
|
||||||
%Character.global_position = marker.global_position
|
|
||||||
if follow.progress_ratio >= 1:
|
|
||||||
return
|
return
|
||||||
var travel = speed * delta
|
change_distance = paths[current_path].curve.get_baked_length()
|
||||||
follow.progress += travel
|
if character.path == null:
|
||||||
total_distance += travel
|
character.path = paths[current_path]
|
||||||
if is_equal_approx(follow.progress, change_distance):
|
|
||||||
path = $Path3D2
|
|
||||||
follow = path.get_node(("Follow"))
|
func _process(delta: float) -> void:
|
||||||
change_distance = path.curve.get_baked_length()
|
if is_equal_approx(character.follow.progress, change_distance):
|
||||||
marker.reparent(follow)
|
current_path += 1
|
||||||
|
if current_path >= paths.size():
|
||||||
|
return
|
||||||
|
marker.reparent(paths[current_path])
|
||||||
|
character.path = paths[current_path]
|
||||||
|
change_distance = paths[current_path].curve.get_baked_length()
|
||||||
|
89
world.tscn
89
world.tscn
@ -1,79 +1,32 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://blupjt2ulo2g1"]
|
[gd_scene load_steps=6 format=3 uid="uid://blupjt2ulo2g1"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://vamte52rvfhy" path="res://character/character.tscn" id="1_nfwx6"]
|
[ext_resource type="PackedScene" uid="uid://vamte52rvfhy" path="res://character/character.tscn" id="1_nfwx6"]
|
||||||
[ext_resource type="Script" path="res://world.gd" id="1_oloil"]
|
[ext_resource type="Script" path="res://world.gd" id="1_oloil"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cvtgigpmwwv4g" path="res://Tiles/Tile1.tscn" id="3_vddfn"]
|
||||||
[sub_resource type="PlaneMesh" id="PlaneMesh_okds2"]
|
[ext_resource type="PackedScene" uid="uid://fafw4evt372" path="res://Tiles/TileRamp1.tscn" id="4_uxk3v"]
|
||||||
size = Vector2(10, 10)
|
[ext_resource type="PackedScene" uid="uid://b88nuwe42bhc1" path="res://Tiles/TileTurn1.tscn" id="5_ynp1e"]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gqvdt"]
|
|
||||||
cull_mode = 2
|
|
||||||
albedo_color = Color(1, 0, 0, 1)
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2ipub"]
|
|
||||||
cull_mode = 2
|
|
||||||
albedo_color = Color(0, 1, 0, 1)
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k12sw"]
|
|
||||||
cull_mode = 2
|
|
||||||
albedo_color = Color(0, 0, 1, 1)
|
|
||||||
|
|
||||||
[sub_resource type="Curve3D" id="Curve3D_5ttj7"]
|
|
||||||
_data = {
|
|
||||||
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0.425, 4.6, 0, 0, 0, 0, 0, 0, 0, 0.47, -4.745, 0, 0, 0, 0, 0, 0, 0, 2.84942, -14.0262),
|
|
||||||
"tilts": PackedFloat32Array(0, 0, 0)
|
|
||||||
}
|
|
||||||
point_count = 3
|
|
||||||
|
|
||||||
[sub_resource type="Curve3D" id="Curve3D_3mog2"]
|
|
||||||
_data = {
|
|
||||||
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 2.8487, -14.2054, 0, 0, 0, 0, 0, 0, 0, 2.81399, -24.5989, 0, 0, 0, 0, 0, 0, -0.0390603, 2.79813, -35.8309),
|
|
||||||
"tilts": PackedFloat32Array(0, 0, 0)
|
|
||||||
}
|
|
||||||
point_count = 3
|
|
||||||
|
|
||||||
[node name="World" type="Node3D"]
|
[node name="World" type="Node3D"]
|
||||||
script = ExtResource("1_oloil")
|
script = ExtResource("1_oloil")
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
|
||||||
mesh = SubResource("PlaneMesh_okds2")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.978896, -0.204359, 0, 0.204359, 0.978896, 0, 0.696645, -10.0891)
|
|
||||||
material_override = SubResource("StandardMaterial3D_gqvdt")
|
|
||||||
mesh = SubResource("PlaneMesh_okds2")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5446, -20.8633)
|
|
||||||
material_override = SubResource("StandardMaterial3D_2ipub")
|
|
||||||
mesh = SubResource("PlaneMesh_okds2")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5446, -31.7451)
|
|
||||||
material_override = SubResource("StandardMaterial3D_k12sw")
|
|
||||||
mesh = SubResource("PlaneMesh_okds2")
|
|
||||||
|
|
||||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
transform = Transform3D(-0.827728, -0.0513662, 0.558773, 0.136568, 0.947417, 0.289396, -0.544256, 0.315852, -0.777189, 3.45982, 2.03445, -6.78341)
|
transform = Transform3D(-0.827728, -0.0513662, 0.558773, 0.136568, 0.947417, 0.289396, -0.544256, 0.315852, -0.777189, 3.45982, 2.03445, -6.78341)
|
||||||
|
|
||||||
[node name="Path" type="Path3D" parent="."]
|
|
||||||
curve = SubResource("Curve3D_5ttj7")
|
|
||||||
|
|
||||||
[node name="Follow" type="PathFollow3D" parent="Path"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.999858, 0, 0, 0, 0.999858, 0, 0.425, 4.6)
|
|
||||||
rotation_mode = 0
|
|
||||||
loop = false
|
|
||||||
tilt_enabled = false
|
|
||||||
|
|
||||||
[node name="Marker" type="Marker3D" parent="Path/Follow"]
|
|
||||||
|
|
||||||
[node name="Path3D2" type="Path3D" parent="."]
|
|
||||||
curve = SubResource("Curve3D_3mog2")
|
|
||||||
|
|
||||||
[node name="Follow" type="PathFollow3D" parent="Path3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.999858, 0, 0, 0, 0.999858, 0, 2.8487, -14.2054)
|
|
||||||
rotation_mode = 0
|
|
||||||
loop = false
|
|
||||||
tilt_enabled = false
|
|
||||||
|
|
||||||
[node name="Character" parent="." instance=ExtResource("1_nfwx6")]
|
[node name="Character" parent="." instance=ExtResource("1_nfwx6")]
|
||||||
|
|
||||||
|
[node name="Tile1" parent="." instance=ExtResource("3_vddfn")]
|
||||||
|
|
||||||
|
[node name="Tile2" parent="." instance=ExtResource("3_vddfn")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10)
|
||||||
|
|
||||||
|
[node name="Tile3" parent="." instance=ExtResource("4_uxk3v")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.866025, -0.5, 0, 0.5, 0.866025, 0, 2.49484, -19.3201)
|
||||||
|
|
||||||
|
[node name="Tile4" parent="." instance=ExtResource("3_vddfn")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, -28.6473)
|
||||||
|
|
||||||
|
[node name="Tile5" parent="." instance=ExtResource("5_ynp1e")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, -38.641)
|
||||||
|
|
||||||
|
[node name="Tile6" parent="." instance=ExtResource("3_vddfn")]
|
||||||
|
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 10, 5, -38.6473)
|
||||||
|
Loading…
Reference in New Issue
Block a user