Compare commits
2 Commits
6d27281b98
...
daynight_t
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8496f4cc7 | ||
|
|
84538679f3 |
13
.idea/.gitignore
generated
vendored
13
.idea/.gitignore
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Rider ignored files
|
|
||||||
/contentModel.xml
|
|
||||||
/modules.xml
|
|
||||||
/projectSettingsUpdater.xml
|
|
||||||
/.idea.tgcc.iml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
4
.idea/encodings.xml
generated
4
.idea/encodings.xml
generated
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
|
||||||
</project>
|
|
||||||
8
.idea/indexLayout.xml
generated
8
.idea/indexLayout.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="UserContentModel">
|
|
||||||
<attachedFolders />
|
|
||||||
<explicitIncludes />
|
|
||||||
<explicitExcludes />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1 +0,0 @@
|
|||||||
uid://d2n10rw2dnx8o
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
## Internal tracking system for TweenFX.
|
|
||||||
## [br][br]
|
|
||||||
## Manages active tweens per node, handles cleanup when nodes are freed,
|
|
||||||
## and provides stop/query methods. Not intended for direct use —
|
|
||||||
## access through [TweenFX] instead.
|
|
||||||
|
|
||||||
static var _active: Dictionary = {} # { node: { TweenFX.Animations.X: tween } }
|
|
||||||
|
|
||||||
static func track(node: CanvasItem, anim: TweenFX.Animations, tween: Tween) -> void:
|
|
||||||
if not _active.has(node):
|
|
||||||
_active[node] = {}
|
|
||||||
if not node.tree_exiting.is_connected(_on_node_exiting):
|
|
||||||
node.tree_exiting.connect(_on_node_exiting.bind(node), CONNECT_ONE_SHOT)
|
|
||||||
_active[node][anim] = tween
|
|
||||||
tween.finished.connect(_on_tween_finished.bind(node, anim), CONNECT_ONE_SHOT)
|
|
||||||
|
|
||||||
static func stop(node: CanvasItem, anim: TweenFX.Animations) -> void:
|
|
||||||
if not _active.has(node) or not _active[node].has(anim):
|
|
||||||
return
|
|
||||||
_active[node][anim].kill()
|
|
||||||
_active[node].erase(anim)
|
|
||||||
if _active[node].is_empty():
|
|
||||||
_active.erase(node)
|
|
||||||
|
|
||||||
static func stop_all(node: CanvasItem) -> void:
|
|
||||||
if not _active.has(node):
|
|
||||||
return
|
|
||||||
for tween in _active[node].values():
|
|
||||||
tween.kill()
|
|
||||||
_active.erase(node)
|
|
||||||
|
|
||||||
static func is_playing(node: CanvasItem, anim: TweenFX.Animations) -> bool:
|
|
||||||
return _active.has(node) and _active[node].has(anim)
|
|
||||||
|
|
||||||
static func _on_tween_finished(node: CanvasItem, anim: TweenFX.Animations) -> void:
|
|
||||||
if not _active.has(node):
|
|
||||||
return
|
|
||||||
_active[node].erase(anim)
|
|
||||||
if _active[node].is_empty():
|
|
||||||
_active.erase(node)
|
|
||||||
|
|
||||||
static func _on_node_exiting(node: CanvasItem) -> void:
|
|
||||||
_active.erase(node)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://bc8i1qm1d8hrv
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
@@ -1,40 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://chf2ss61jydw3"
|
|
||||||
path="res://.godot/imported/icon.png-1df28cd6ae5654ad60ac96bf24b7c782.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://addons/TweenFX/icon.png"
|
|
||||||
dest_files=["res://.godot/imported/icon.png-1df28cd6ae5654ad60ac96bf24b7c782.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=0
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/uastc_level=0
|
|
||||||
compress/rdo_quality_loss=0.0
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=false
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
process/channel_remap/red=0
|
|
||||||
process/channel_remap/green=1
|
|
||||||
process/channel_remap/blue=2
|
|
||||||
process/channel_remap/alpha=3
|
|
||||||
process/fix_alpha_border=true
|
|
||||||
process/premult_alpha=false
|
|
||||||
process/normal_map_invert_y=false
|
|
||||||
process/hdr_as_srgb=false
|
|
||||||
process/hdr_clamp_exposure=false
|
|
||||||
process/size_limit=0
|
|
||||||
detect_3d/compress_to=1
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
[plugin]
|
|
||||||
name="TweenFX"+
|
|
||||||
icon="res://addons/TweenFX/icon.png"
|
|
||||||
description= "A simple, juicy tween animation library for Godot"
|
|
||||||
author="EvilBunnyMan"
|
|
||||||
version="1.2"
|
|
||||||
script="plugin.gd"
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
@tool
|
|
||||||
extends EditorPlugin
|
|
||||||
|
|
||||||
func _enable_plugin():
|
|
||||||
add_autoload_singleton("TweenFX", "res://addons/TweenFX/TweenFX.gd")
|
|
||||||
print("[TweenFX] Enabled")
|
|
||||||
|
|
||||||
func _disable_plugin():
|
|
||||||
remove_autoload_singleton("TweenFX")
|
|
||||||
print("[TweenFX] Disabled")
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://wu3r36bvv8u
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
extends CharacterBody3D
|
|
||||||
|
|
||||||
class_name AIBase
|
|
||||||
|
|
||||||
@export_group("Settings")
|
|
||||||
@export var speed: float = 4.0
|
|
||||||
var _enable_state_machine: bool = true
|
|
||||||
@export var enable_state_machine: bool:
|
|
||||||
set(value):
|
|
||||||
_enable_state_machine = value
|
|
||||||
toggle_enable_state_machine()
|
|
||||||
get:
|
|
||||||
return _enable_state_machine
|
|
||||||
@export var anim_player: AnimationPlayer
|
|
||||||
|
|
||||||
@export_group("Entities")
|
|
||||||
enum EntityType { HUMANOID, ANIMAL }
|
|
||||||
@export var entity_type: EntityType = EntityType.HUMANOID
|
|
||||||
@export var entity_name: String = ""
|
|
||||||
@export var allowed_biomes: Array[String] = []
|
|
||||||
@export_range(0.0, 100.0, 0.1) var spawn_uniqueness: float = 1.0
|
|
||||||
|
|
||||||
@onready var patrol_radius_shape: CollisionShape3D = $%PatrolRadiusShape
|
|
||||||
@onready var nav_agent: NavigationAgent3D = $%NavigationAgent3D
|
|
||||||
@onready var state_machine: StateMachine = $%StateMachine
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
randomize()
|
|
||||||
toggle_enable_state_machine()
|
|
||||||
|
|
||||||
func toggle_enable_state_machine() -> void:
|
|
||||||
state_machine.enable = _enable_state_machine
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
|
||||||
if !_enable_state_machine:
|
|
||||||
return
|
|
||||||
|
|
||||||
state_machine.physics_process(delta)
|
|
||||||
|
|
||||||
if nav_agent.is_navigation_finished():
|
|
||||||
velocity = Vector3.ZERO
|
|
||||||
move_and_slide()
|
|
||||||
return
|
|
||||||
|
|
||||||
var next_point = nav_agent.get_next_path_position()
|
|
||||||
var direction = global_position.direction_to(next_point)
|
|
||||||
|
|
||||||
velocity.x = direction.x * speed
|
|
||||||
velocity.z = direction.z * speed
|
|
||||||
|
|
||||||
if velocity.length_squared() > 0.1:
|
|
||||||
var look_dir = Vector3(velocity.x, 0, velocity.z)
|
|
||||||
var target_transform = global_transform.looking_at(global_position - look_dir, Vector3.UP)
|
|
||||||
global_transform = global_transform.interpolate_with(target_transform, delta * 10.0)
|
|
||||||
|
|
||||||
move_and_slide()
|
|
||||||
|
|
||||||
func navigate_to_random_point() -> void:
|
|
||||||
var nav_map_rid = get_world_3d().get_navigation_map()
|
|
||||||
var patrol_radius = patrol_radius_shape.shape.radius
|
|
||||||
var target_point_in_space = global_position + Vector3(randf_range(-1, 1), 0, randf_range(-1, 1)).normalized() * randf_range(0, patrol_radius)
|
|
||||||
var closest_valid_point = NavigationServer3D.map_get_closest_point(nav_map_rid, target_point_in_space)
|
|
||||||
nav_agent.target_position = closest_valid_point
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://b30p1yqojbbbk
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://clx701xdwelgx"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://b30p1yqojbbbk" path="res://core/ai/agents/base/ai_base.gd" id="1_4d1nn"]
|
|
||||||
[ext_resource type="Script" uid="uid://ps3vlu2qvmop" path="res://core/ai/framework/state_machine.gd" id="2_q1hg3"]
|
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_lim44"]
|
|
||||||
radius = 20.0
|
|
||||||
|
|
||||||
[node name="AiBase" type="CharacterBody3D" unique_id=1228675528]
|
|
||||||
script = ExtResource("1_4d1nn")
|
|
||||||
entity_name = "Humanoid"
|
|
||||||
|
|
||||||
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="." unique_id=1370024449]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
|
|
||||||
[node name="StateMachine" type="Node" parent="." unique_id=1286404264]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
script = ExtResource("2_q1hg3")
|
|
||||||
|
|
||||||
[node name="PatrolRadiusShape" type="CollisionShape3D" parent="." unique_id=1379515938]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
shape = SubResource("SphereShape3D_lim44")
|
|
||||||
disabled = true
|
|
||||||
debug_color = Color(1, 1, 0, 1)
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://dd8wn62anbts8"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_p2hpa"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bjp8wbrtfl4v2" path="res://core/ai/agents/cow/cow_mannequin.tscn" id="2_6gadt"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="2_vlvvc"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_su7en"]
|
|
||||||
|
|
||||||
[node name="AiCow" unique_id=1228675528 node_paths=PackedStringArray("anim_player") instance=ExtResource("1_p2hpa")]
|
|
||||||
anim_player = NodePath("CowMannequin/AnimationPlayer")
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="1" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("IdleState")
|
|
||||||
|
|
||||||
[node name="IdleState" type="Node" parent="StateMachine" index="0" unique_id=2033863310]
|
|
||||||
script = ExtResource("2_vlvvc")
|
|
||||||
state_id = &"idle"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/idle"
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="1" unique_id=2076820654]
|
|
||||||
script = ExtResource("3_su7en")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"idle"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[node name="CowMannequin" parent="." index="3" unique_id=1390675137 instance=ExtResource("2_6gadt")]
|
|
||||||
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, -0.9, 0)
|
|
||||||
|
|
||||||
[editable path="CowMannequin"]
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,81 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://bjp8wbrtfl4v2"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://b7d57tyxi41r1" path="res://core/ai/agents/cow/cow.fbx" id="1_60f5q"]
|
|
||||||
[ext_resource type="Animation" uid="uid://bsuoywknbbnm0" path="res://core/ai/agents/cow/idle.res" id="2_5ukcj"]
|
|
||||||
[ext_resource type="Animation" uid="uid://ckmybsnuf4stp" path="res://core/ai/agents/cow/walking.res" id="3_0mu5m"]
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lowte"]
|
|
||||||
_data = {
|
|
||||||
&"idle": ExtResource("2_5ukcj"),
|
|
||||||
&"walking": ExtResource("3_0mu5m")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="CowMannequin" unique_id=786985233 instance=ExtResource("1_60f5q")]
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="Armature" parent_id_path=PackedInt32Array(792301245) index="0" unique_id=1950086664]
|
|
||||||
bones/1/rotation = Quaternion(0.7071068, -6.209646e-07, -6.209645e-07, 0.7071067)
|
|
||||||
bones/1/scale = Vector3(1, 1, 1)
|
|
||||||
bones/4/rotation = Quaternion(0.0015316998, -0.0015319793, 0.70710516, 0.70710516)
|
|
||||||
bones/5/position = Vector3(1.3183898e-16, 0.006025583, -6.675722e-10)
|
|
||||||
bones/5/rotation = Quaternion(0.703962, -0.69745475, -0.08083715, 0.10705068)
|
|
||||||
bones/5/scale = Vector3(1, 0.99999976, 1)
|
|
||||||
bones/6/position = Vector3(-1.403955e-10, 0.009248152, 3.7406075e-11)
|
|
||||||
bones/6/rotation = Quaternion(0.18324056, -0.018661192, 0.0034790868, 0.98288476)
|
|
||||||
bones/6/scale = Vector3(1, 1, 1)
|
|
||||||
bones/8/scale = Vector3(0.99999994, 0.99999994, 1)
|
|
||||||
bones/9/position = Vector3(-3.8163916e-17, 0.0046958304, 1.907358e-10)
|
|
||||||
bones/9/rotation = Quaternion(0.6754388, -0.68119305, 0.18401879, -0.21423234)
|
|
||||||
bones/9/scale = Vector3(1, 0.99999994, 1.0000001)
|
|
||||||
bones/10/position = Vector3(7.2902e-10, 0.011755081, -3.0995417e-10)
|
|
||||||
bones/10/rotation = Quaternion(-0.35146433, 0.018116632, 0.0068026204, 0.9360013)
|
|
||||||
bones/10/scale = Vector3(0.9999999, 1, 1.0000001)
|
|
||||||
bones/12/rotation = Quaternion(0.707105, 0.70710486, 0.0016303749, -0.0016306548)
|
|
||||||
bones/12/scale = Vector3(1, 1, 1)
|
|
||||||
bones/13/position = Vector3(-1.5265567e-16, 0.0060255853, 6.6757205e-10)
|
|
||||||
bones/13/rotation = Quaternion(-0.057434652, -0.13032891, 0.70625645, 0.69348216)
|
|
||||||
bones/13/scale = Vector3(0.99999994, 1, 0.9999999)
|
|
||||||
bones/14/position = Vector3(-4.5945833e-10, 0.009248151, -5.7053273e-09)
|
|
||||||
bones/14/rotation = Quaternion(0.18302466, 0.051401887, -0.0095829815, 0.9817169)
|
|
||||||
bones/14/scale = Vector3(1, 1.0000001, 0.99999994)
|
|
||||||
bones/16/rotation = Quaternion(0.7071062, 0.7071063, 0.0008663558, -0.0008670737)
|
|
||||||
bones/16/scale = Vector3(1, 1, 1)
|
|
||||||
bones/17/position = Vector3(1.7347235e-17, 0.0046958304, -1.9073432e-10)
|
|
||||||
bones/17/rotation = Quaternion(0.1907959, 0.2076444, 0.67355627, 0.6832297)
|
|
||||||
bones/17/scale = Vector3(1, 1, 1.0000001)
|
|
||||||
bones/18/position = Vector3(1.834215e-10, 0.011755081, -1.7500804e-09)
|
|
||||||
bones/18/rotation = Quaternion(-0.35151497, -0.0088962475, -0.003340601, 0.93613404)
|
|
||||||
bones/18/scale = Vector3(1, 1.0000001, 0.99999994)
|
|
||||||
bones/20/rotation = Quaternion(0.60080343, -0.03016121, 0.03526711, 0.7980488)
|
|
||||||
bones/21/position = Vector3(0.00011168665, 0.0039693406, -0.013754063)
|
|
||||||
bones/21/rotation = Quaternion(0.98885596, 3.1474094e-08, 2.23642e-07, -0.14887528)
|
|
||||||
bones/21/scale = Vector3(1, 1.0000001, 1.0000001)
|
|
||||||
bones/22/position = Vector3(-2.5714557e-11, 0.00836347, -9.433328e-09)
|
|
||||||
bones/22/rotation = Quaternion(-0.6231534, 9.0575064e-08, -7.589477e-08, 0.78209966)
|
|
||||||
bones/22/scale = Vector3(1, 0.9999999, 0.99999994)
|
|
||||||
bones/23/position = Vector3(-2.1545942e-12, 0.0072733457, -2.594807e-09)
|
|
||||||
bones/23/rotation = Quaternion(-1.8223004e-08, 0.98608583, -0.16623694, 2.7314604e-07)
|
|
||||||
bones/23/scale = Vector3(1, 0.9999997, 0.9999997)
|
|
||||||
bones/24/position = Vector3(3.3663968e-13, 0.006993335, -2.8376712e-09)
|
|
||||||
bones/24/rotation = Quaternion(-0.048028953, 2.6759114e-08, 4.5447155e-08, 0.998846)
|
|
||||||
bones/24/scale = Vector3(1, 0.99999994, 1.0000001)
|
|
||||||
bones/26/rotation = Quaternion(0.0054439656, 0.86556005, 0.50029516, -0.021930087)
|
|
||||||
bones/26/scale = Vector3(1, 1.0000002, 1)
|
|
||||||
bones/27/position = Vector3(1.8971762e-10, 0.013189232, -5.7312505e-10)
|
|
||||||
bones/27/rotation = Quaternion(0.15129425, -0.018451845, -0.013046658, 0.9882304)
|
|
||||||
bones/27/scale = Vector3(0.99999994, 0.99999994, 1.0000001)
|
|
||||||
bones/28/position = Vector3(-2.1601461e-10, 0.013573305, 4.8459786e-10)
|
|
||||||
bones/28/rotation = Quaternion(-0.6245376, -0.19781438, 0.16660775, 0.7369289)
|
|
||||||
bones/28/scale = Vector3(1, 0.9999999, 1.0000001)
|
|
||||||
bones/30/rotation = Quaternion(3.5765906e-06, 0.67050743, 0.7419029, 3.2289404e-06)
|
|
||||||
bones/31/position = Vector3(-1.2499713e-14, 0.01925819, -1.2902629e-09)
|
|
||||||
bones/31/rotation = Quaternion(0.086390205, 0.0012038474, -0.013495129, 0.99616927)
|
|
||||||
bones/31/scale = Vector3(0.9999999, 0.99999994, 1)
|
|
||||||
bones/33/rotation = Quaternion(0.7071068, -6.209646e-07, -6.209645e-07, 0.7071067)
|
|
||||||
bones/33/scale = Vector3(1, 1, 1)
|
|
||||||
bones/35/rotation = Quaternion(0.7071068, -9.581396e-07, -9.581394e-07, 0.7071067)
|
|
||||||
bones/35/scale = Vector3(1, 1, 1)
|
|
||||||
bones/37/rotation = Quaternion(0.7071068, -9.581396e-07, -9.581394e-07, 0.7071067)
|
|
||||||
bones/37/scale = Vector3(1, 1, 1)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="." index="1" unique_id=1401028430]
|
|
||||||
libraries/custom = SubResource("AnimationLibrary_lowte")
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,69 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://cayakdk7gmlyg"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_e5v3h"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dqhueybnlrrqx" path="res://core/ai/agents/horse/horse_mannequin.tscn" id="2_4t6jw"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="2_or6xs"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_n63jb"]
|
|
||||||
[ext_resource type="Animation" uid="uid://doyi6etqvy4n2" path="res://core/ai/agents/horse/idle.res" id="3_qe4rt"]
|
|
||||||
[ext_resource type="Animation" uid="uid://hotr7r3fd1sq" path="res://core/ai/agents/horse/walking.res" id="4_q8m0v"]
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_or6xs"]
|
|
||||||
_data = {
|
|
||||||
&"idle": ExtResource("3_qe4rt"),
|
|
||||||
&"walking": ExtResource("4_q8m0v")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="AiHorse" unique_id=1228675528 node_paths=PackedStringArray("anim_player") instance=ExtResource("1_e5v3h")]
|
|
||||||
anim_player = NodePath("HorseMannequin/AnimationPlayer")
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="1" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("IdleState")
|
|
||||||
|
|
||||||
[node name="IdleState" type="Node" parent="StateMachine" index="0" unique_id=734754793]
|
|
||||||
script = ExtResource("2_or6xs")
|
|
||||||
state_id = &"idle"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/idle"
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="1" unique_id=1748382252]
|
|
||||||
script = ExtResource("3_n63jb")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"idle"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[node name="HorseMannequin" parent="." index="3" unique_id=1289880358 instance=ExtResource("2_4t6jw")]
|
|
||||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -0.9, 0)
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="HorseMannequin/Armature" parent_id_path=PackedInt32Array(1289880358, 245823720) index="0" unique_id=494955820]
|
|
||||||
bones/1/rotation = Quaternion(0.7071068, -6.209646e-07, -6.209645e-07, 0.7071067)
|
|
||||||
bones/4/rotation = Quaternion(0.0012952884, -0.0012955684, 0.7071056, 0.7071057)
|
|
||||||
bones/5/rotation = Quaternion(0.70685357, -0.70227593, -0.04508998, 0.07164877)
|
|
||||||
bones/6/rotation = Quaternion(0.13314606, -0.018813655, 0.0025279524, 0.9909147)
|
|
||||||
bones/8/rotation = Quaternion(0.00078355736, -0.00078427553, 0.70710635, 0.70710635)
|
|
||||||
bones/9/rotation = Quaternion(0.6711558, -0.6744515, 0.20213859, -0.23195927)
|
|
||||||
bones/10/rotation = Quaternion(-0.3574636, 0.018072592, 0.006918765, 0.9337266)
|
|
||||||
bones/12/rotation = Quaternion(0.7071054, 0.7071055, 0.0013743625, -0.0013746425)
|
|
||||||
bones/13/rotation = Quaternion(-0.02159133, -0.09508795, 0.70796114, 0.69948786)
|
|
||||||
bones/14/rotation = Quaternion(0.13298893, 0.051821847, -0.0069631753, 0.9897374)
|
|
||||||
bones/16/rotation = Quaternion(0.7071064, 0.70710653, 0.00066260004, -0.00066331815)
|
|
||||||
bones/17/rotation = Quaternion(0.20885532, 0.22542001, 0.6690968, 0.6766645)
|
|
||||||
bones/18/rotation = Quaternion(-0.3575147, -0.008874607, -0.003397635, 0.9338592)
|
|
||||||
bones/20/rotation = Quaternion(0.6010642, -0.021428203, 0.02848876, 0.79840535)
|
|
||||||
bones/21/rotation = Quaternion(0.99267024, 2.482745e-08, 2.2239277e-07, -0.12085533)
|
|
||||||
bones/22/rotation = Quaternion(-0.6165577, 9.507701e-08, -7.2693986e-08, 0.7873097)
|
|
||||||
bones/23/rotation = Quaternion(-1.5614631e-08, 0.9891947, -0.14660779, 2.7153942e-07)
|
|
||||||
bones/24/rotation = Quaternion(0.03904001, 3.5621138e-08, 1.47960275e-08, 0.99923766)
|
|
||||||
bones/26/rotation = Quaternion(0.008421451, 0.95973384, 0.27944198, -0.027427308)
|
|
||||||
bones/27/rotation = Quaternion(-0.08868468, -0.022488868, -0.01781765, 0.9956465)
|
|
||||||
bones/28/rotation = Quaternion(-0.62453747, -0.1978144, 0.1666077, 0.736929)
|
|
||||||
bones/30/rotation = Quaternion(3.4527793e-06, 0.6944211, 0.71956885, 3.3297817e-06)
|
|
||||||
bones/31/rotation = Quaternion(0.053752482, 0.0007617086, -0.013526975, 0.9984624)
|
|
||||||
bones/33/rotation = Quaternion(0.7071068, -6.209646e-07, -6.209645e-07, 0.7071067)
|
|
||||||
bones/35/rotation = Quaternion(0.7071068, -9.581396e-07, -9.581394e-07, 0.7071067)
|
|
||||||
bones/37/rotation = Quaternion(0.7071068, -9.581396e-07, -9.581394e-07, 0.7071067)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="HorseMannequin" index="1" unique_id=272680130]
|
|
||||||
libraries/custom = SubResource("AnimationLibrary_or6xs")
|
|
||||||
|
|
||||||
[editable path="HorseMannequin"]
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://dqhueybnlrrqx"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://be1ql8okme4n7" path="res://core/ai/agents/horse/horse.fbx" id="1_fbqil"]
|
|
||||||
|
|
||||||
[node name="HorseMannequin" unique_id=1289880358 instance=ExtResource("1_fbqil")]
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,10 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://bdqeshcwwnyc4"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://mvh2v6v72stt" path="res://core/ai/agents/human/ai_human.tscn" id="1_awhwq"]
|
|
||||||
|
|
||||||
[node name="AiCitizen" unique_id=1228675528 instance=ExtResource("1_awhwq")]
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="3" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("")
|
|
||||||
|
|
||||||
[editable path="HumanMannequin"]
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://bbseno7clbepx"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bdqeshcwwnyc4" path="res://core/ai/agents/human/ai_citizen.tscn" id="1_cduuu"]
|
|
||||||
|
|
||||||
[node name="AiCitizenSitter" unique_id=1228675528 instance=ExtResource("1_cduuu")]
|
|
||||||
|
|
||||||
[node name="SK_Mannequin" parent="HumanMannequin" parent_id_path=PackedInt32Array(333236377) index="0" unique_id=377304892]
|
|
||||||
transform = Transform3D(0.99906886, 0.025971904, -0.03444738, 0.038254507, -0.16420224, 0.98568463, 0.019943757, -0.98608464, -0.1650429, 0.034450583, -0.44864154, 0.18535595)
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="HumanMannequin/SK_Mannequin" index="0" unique_id=427572412]
|
|
||||||
bones/2/rotation = Quaternion(-0.007029906, 0.032859802, -0.23654123, 0.97104025)
|
|
||||||
bones/3/rotation = Quaternion(-0.000884556, 0.0033522977, 0.10280211, 0.99469584)
|
|
||||||
bones/4/rotation = Quaternion(-0.00040807336, 0.0034836144, 0.0045103733, 0.9999837)
|
|
||||||
bones/5/rotation = Quaternion(0.13797933, 0.74176145, 0.017092831, 0.6560942)
|
|
||||||
bones/6/rotation = Quaternion(0.049281683, 0.43982458, -0.36467218, 0.81923133)
|
|
||||||
bones/7/rotation = Quaternion(-0.049351897, 0.03842162, -0.476375, 0.87701494)
|
|
||||||
bones/8/rotation = Quaternion(-0.41694272, -0.05554785, -0.18030654, 0.889136)
|
|
||||||
bones/9/rotation = Quaternion(0.094457716, 0.050416686, 0.50820345, 0.85455555)
|
|
||||||
bones/10/rotation = Quaternion(0.011606372, 0.08610083, 0.2719557, 0.95838)
|
|
||||||
bones/12/rotation = Quaternion(-0.00016985182, 0.0032503307, 0.42722064, 0.90414155)
|
|
||||||
bones/13/rotation = Quaternion(-0.018024907, 0.015150134, 0.27278355, 0.9617873)
|
|
||||||
bones/15/rotation = Quaternion(-0.13467012, -0.10029431, 0.2853874, 0.94358844)
|
|
||||||
bones/16/rotation = Quaternion(0.010311794, -0.034373257, 0.13259757, 0.9905202)
|
|
||||||
bones/18/rotation = Quaternion(-0.09865642, -0.08747626, 0.37470394, 0.917721)
|
|
||||||
bones/19/rotation = Quaternion(0.0042531197, -0.033760007, 0.1860149, 0.98195755)
|
|
||||||
bones/21/rotation = Quaternion(0.70078146, 0.36200625, -0.001720201, 0.61469823)
|
|
||||||
bones/22/rotation = Quaternion(-0.001820262, 0.12128391, 0.22490783, 0.9668006)
|
|
||||||
bones/26/rotation = Quaternion(0.76902086, -0.13267346, -0.62528044, -0.005393706)
|
|
||||||
bones/27/rotation = Quaternion(0.034201004, 0.38763282, -0.48749813, 0.7816117)
|
|
||||||
bones/28/rotation = Quaternion(-0.053170834, 0.025972798, -0.32202634, 0.9448796)
|
|
||||||
bones/29/rotation = Quaternion(-0.43919632, 0.049489442, -0.098192796, 0.89163643)
|
|
||||||
bones/30/rotation = Quaternion(0.103668794, 0.04579189, 0.46590617, 0.8775462)
|
|
||||||
bones/31/rotation = Quaternion(0.011519267, 0.09922818, 0.29214594, 0.95114243)
|
|
||||||
bones/33/rotation = Quaternion(9.437185e-05, 0.009016322, 0.44048977, 0.89771235)
|
|
||||||
bones/34/rotation = Quaternion(-0.018226523, 0.017689873, 0.23132406, 0.97254515)
|
|
||||||
bones/36/rotation = Quaternion(-0.13272016, -0.101737194, 0.26830983, 0.9487069)
|
|
||||||
bones/37/rotation = Quaternion(0.010193698, -0.046628788, 0.19672133, 0.97929704)
|
|
||||||
bones/39/rotation = Quaternion(-0.110196866, -0.05036995, 0.35450295, 0.9271716)
|
|
||||||
bones/40/rotation = Quaternion(0.0042593707, -0.028552007, 0.17841409, 0.983532)
|
|
||||||
bones/42/rotation = Quaternion(0.7297342, 0.26573184, -0.09265223, 0.6231294)
|
|
||||||
bones/43/rotation = Quaternion(0.06426929, 0.22943345, 0.1991351, 0.95056564)
|
|
||||||
bones/47/rotation = Quaternion(0.00421817, -0.00037953872, -0.21590644, 0.9764049)
|
|
||||||
bones/49/rotation = Quaternion(0.14012733, -0.038448263, 0.6819175, 0.7168505)
|
|
||||||
bones/50/rotation = Quaternion(-0.05631607, 0.020481886, -0.74316776, 0.6664162)
|
|
||||||
bones/52/rotation = Quaternion(-0.0004946971, -0.048858073, -0.0074254284, 0.998778)
|
|
||||||
bones/55/rotation = Quaternion(0.0132777635, 0.10731075, 0.71409845, -0.6916441)
|
|
||||||
bones/56/rotation = Quaternion(0.03920827, -0.09832406, -0.75485575, 0.64729285)
|
|
||||||
bones/58/rotation = Quaternion(0.01656407, -0.06386153, 0.030505493, 0.9973549)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="HumanMannequin" parent_id_path=PackedInt32Array(333236377) index="1" unique_id=233699491]
|
|
||||||
autoplay = &"custom/sit"
|
|
||||||
|
|
||||||
[editable path="HumanMannequin"]
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://bnnuke5e7e1yr"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bdqeshcwwnyc4" path="res://core/ai/agents/human/ai_citizen.tscn" id="1_dms8s"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="2_awhwq"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_8d0tj"]
|
|
||||||
|
|
||||||
[node name="AiCitizenWalker" unique_id=1228675528 instance=ExtResource("1_dms8s")]
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="3" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("IdleState")
|
|
||||||
|
|
||||||
[node name="IdleState" type="Node" parent="StateMachine" index="0" unique_id=42226979]
|
|
||||||
script = ExtResource("2_awhwq")
|
|
||||||
state_id = &"idle"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/idle"
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="1" unique_id=1357892786]
|
|
||||||
script = ExtResource("3_8d0tj")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"idle"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[editable path="HumanMannequin"]
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://ceqxsqfiotm5j"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://mvh2v6v72stt" path="res://core/ai/agents/human/ai_human.tscn" id="1_l2y7m"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_2oda6"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="4_2oda6"]
|
|
||||||
|
|
||||||
[node name="AiFarmer" unique_id=1228675528 instance=ExtResource("1_l2y7m")]
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="3" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("GatherState")
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="0" unique_id=930272128]
|
|
||||||
script = ExtResource("3_2oda6")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"gather"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[node name="GatherState" type="Node" parent="StateMachine" index="1" unique_id=48091671]
|
|
||||||
script = ExtResource("4_2oda6")
|
|
||||||
state_id = &"gather"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/gather"
|
|
||||||
exit_on_animation_finished = true
|
|
||||||
|
|
||||||
[editable path="HumanMannequin"]
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://mvh2v6v72stt"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_hko2w"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://legcajdd0jsy" path="res://core/ai/agents/human/human_mannequin.tscn" id="2_cnrgi"]
|
|
||||||
|
|
||||||
[node name="AiHuman" unique_id=1228675528 node_paths=PackedStringArray("anim_player") instance=ExtResource("1_hko2w")]
|
|
||||||
anim_player = NodePath("HumanMannequin/AnimationPlayer")
|
|
||||||
|
|
||||||
[node name="HumanMannequin" parent="." index="3" unique_id=333236377 instance=ExtResource("2_cnrgi")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.9, 0)
|
|
||||||
|
|
||||||
[node name="SK_Mannequin" parent="HumanMannequin" index="0" unique_id=2096894453]
|
|
||||||
transform = Transform3D(0.99999994, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="HumanMannequin/SK_Mannequin" index="0" unique_id=1402189960]
|
|
||||||
bones/2/rotation = Quaternion(-2.1971985e-24, 0, -0.062388558, 0.99805194)
|
|
||||||
bones/3/rotation = Quaternion(4.135903e-25, 1.6543612e-24, 0.12241964, 0.99247843)
|
|
||||||
bones/4/rotation = Quaternion(2.2850868e-23, 0, 0.024252614, 0.9997059)
|
|
||||||
bones/5/rotation = Quaternion(0.20891805, 0.7294167, 0.12304399, 0.6396598)
|
|
||||||
bones/6/rotation = Quaternion(0.11299576, 0.33062968, -0.16141911, 0.92296255)
|
|
||||||
bones/7/rotation = Quaternion(-0.05401651, -0.079182714, -0.26340967, 0.9599103)
|
|
||||||
bones/8/rotation = Quaternion(-0.61789525, 0.019371983, 0.010653294, 0.7859496)
|
|
||||||
bones/9/rotation = Quaternion(0.1333045, -0.0031801206, 0.22317973, 0.96561414)
|
|
||||||
bones/10/rotation = Quaternion(0.012043531, -0.0029058352, 0.10444825, 0.9944532)
|
|
||||||
bones/12/rotation = Quaternion(0.028522171, -0.05687394, 0.19848494, 0.9780366)
|
|
||||||
bones/13/rotation = Quaternion(-0.018628873, 0.007972199, 0.10711657, 0.99404)
|
|
||||||
bones/15/rotation = Quaternion(-0.1295377, -0.18789689, 0.14421311, 0.9628693)
|
|
||||||
bones/16/rotation = Quaternion(0.010359715, -0.010519396, 0.09774818, 0.9951017)
|
|
||||||
bones/18/rotation = Quaternion(-0.095480494, -0.116765715, 0.18851167, 0.9704188)
|
|
||||||
bones/19/rotation = Quaternion(0.00430111, -0.0141675975, 0.11596311, 0.9931432)
|
|
||||||
bones/21/rotation = Quaternion(0.6303091, 0.37152508, -0.07729015, 0.6772783)
|
|
||||||
bones/22/rotation = Quaternion(0.0026046867, 0.086798474, 0.13014112, 0.98768544)
|
|
||||||
bones/26/rotation = Quaternion(0.7294168, -0.20891781, -0.6396598, 0.12304417)
|
|
||||||
bones/27/rotation = Quaternion(0.11299576, 0.33062968, -0.16141911, 0.92296255)
|
|
||||||
bones/28/rotation = Quaternion(-0.05401651, -0.079182714, -0.26340967, 0.9599103)
|
|
||||||
bones/29/rotation = Quaternion(-0.61789525, 0.019371983, 0.010653294, 0.7859496)
|
|
||||||
bones/30/rotation = Quaternion(0.1333045, -0.0031801206, 0.22317973, 0.96561414)
|
|
||||||
bones/31/rotation = Quaternion(0.012043531, -0.0029058352, 0.10444825, 0.9944532)
|
|
||||||
bones/33/rotation = Quaternion(0.028522171, -0.05687394, 0.19848494, 0.9780366)
|
|
||||||
bones/34/rotation = Quaternion(-0.018628873, 0.007972199, 0.10711657, 0.99404)
|
|
||||||
bones/36/rotation = Quaternion(-0.1295377, -0.18789689, 0.14421311, 0.9628693)
|
|
||||||
bones/37/rotation = Quaternion(0.010359715, -0.010519396, 0.09774818, 0.9951017)
|
|
||||||
bones/39/rotation = Quaternion(-0.095480494, -0.116765715, 0.18851167, 0.9704188)
|
|
||||||
bones/40/rotation = Quaternion(0.00430111, -0.0141675975, 0.11596311, 0.9931432)
|
|
||||||
bones/42/rotation = Quaternion(0.6303091, 0.37152508, -0.07729015, 0.6772783)
|
|
||||||
bones/43/rotation = Quaternion(0.0026047025, 0.08679848, 0.13014114, 0.98768544)
|
|
||||||
bones/47/rotation = Quaternion(-1.5923227e-23, 0, -0.20371072, 0.97903115)
|
|
||||||
bones/49/rotation = Quaternion(0.07370486, -0.062138822, -0.008584324, 0.9953053)
|
|
||||||
bones/50/rotation = Quaternion(-0.048884246, 0.018863896, -0.06552225, 0.99647444)
|
|
||||||
bones/52/rotation = Quaternion(-0.0058857696, 0.03199128, 0.07035475, 0.9969916)
|
|
||||||
bones/55/rotation = Quaternion(0.062138822, 0.07370486, 0.9953054, 0.008584333)
|
|
||||||
bones/56/rotation = Quaternion(-0.048884246, 0.018863896, -0.06552225, 0.99647444)
|
|
||||||
bones/58/rotation = Quaternion(-0.0058857696, 0.03199128, 0.07035475, 0.9969916)
|
|
||||||
|
|
||||||
[editable path="HumanMannequin"]
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,94 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://legcajdd0jsy"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://ys8pesrqeyv2" path="res://core/ai/agents/human/human_mannequin_mixamo.fbx" id="1_561x5"]
|
|
||||||
[ext_resource type="Animation" uid="uid://bod5wup7tap24" path="res://core/ai/agents/human/gather.res" id="2_3r4wv"]
|
|
||||||
[ext_resource type="Animation" uid="uid://cp4pl635iv3g7" path="res://core/ai/agents/human/idle.res" id="2_b4vfe"]
|
|
||||||
[ext_resource type="Animation" uid="uid://ckkmrph86jlsd" path="res://core/ai/agents/human/walking.res" id="3_jl3mr"]
|
|
||||||
[ext_resource type="Animation" uid="uid://byksuipm2bly7" path="res://core/ai/agents/human/sit.res" id="4_xaokg"]
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_3r4wv"]
|
|
||||||
_data = {
|
|
||||||
&"gather": ExtResource("2_3r4wv"),
|
|
||||||
&"idle": ExtResource("2_b4vfe"),
|
|
||||||
&"sit": ExtResource("4_xaokg"),
|
|
||||||
&"walking": ExtResource("3_jl3mr")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="HumanMannequin" unique_id=1583776159 instance=ExtResource("1_561x5")]
|
|
||||||
|
|
||||||
[node name="SK_Mannequin" parent="." index="0" unique_id=2096894453]
|
|
||||||
transform = Transform3D(0.9990688, 0.025971903, -0.034447376, 0.038254507, -0.16420223, 0.9856846, 0.019943757, -0.9860846, -0.16504289, 0.034450583, -0.44864154, 0.18535595)
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="SK_Mannequin" index="0" unique_id=1402189960]
|
|
||||||
bones/2/rotation = Quaternion(-0.007029906, 0.032859802, -0.23654123, 0.97104025)
|
|
||||||
bones/3/rotation = Quaternion(-0.000884556, 0.0033522977, 0.10280211, 0.99469584)
|
|
||||||
bones/4/position = Vector3(0.13407329, 0.004204774, -5.584202e-15)
|
|
||||||
bones/4/rotation = Quaternion(-0.00040807336, 0.0034836144, 0.0045103733, 0.9999837)
|
|
||||||
bones/5/rotation = Quaternion(0.13797933, 0.74176145, 0.017092831, 0.6560942)
|
|
||||||
bones/6/position = Vector3(0.15784872, 1.4317955e-11, 6.3591354e-11)
|
|
||||||
bones/6/rotation = Quaternion(0.049281683, 0.43982458, -0.36467218, 0.81923133)
|
|
||||||
bones/7/position = Vector3(0.3033993, 8.407472e-11, 3.197531e-11)
|
|
||||||
bones/7/rotation = Quaternion(-0.049351897, 0.03842162, -0.476375, 0.87701494)
|
|
||||||
bones/8/position = Vector3(0.26975143, 1.572964e-11, -9.6207486e-11)
|
|
||||||
bones/8/rotation = Quaternion(-0.41694272, -0.05554785, -0.18030654, 0.889136)
|
|
||||||
bones/9/rotation = Quaternion(0.094457716, 0.050416686, 0.50820345, 0.85455555)
|
|
||||||
bones/10/position = Vector3(0.04287498, -2.9850333e-10, 5.048406e-11)
|
|
||||||
bones/10/rotation = Quaternion(0.011606372, 0.08610083, 0.2719557, 0.95838)
|
|
||||||
bones/11/position = Vector3(0.0339379, 1.1695445e-10, -2.349232e-11)
|
|
||||||
bones/12/rotation = Quaternion(-0.00016985182, 0.0032503307, 0.42722064, 0.90414155)
|
|
||||||
bones/13/position = Vector3(0.046403743, -3.648193e-11, 1.830866e-11)
|
|
||||||
bones/13/rotation = Quaternion(-0.018024907, 0.015150134, 0.27278355, 0.9617873)
|
|
||||||
bones/14/position = Vector3(0.036488436, -1.9989443e-10, 1.6076356e-11)
|
|
||||||
bones/15/rotation = Quaternion(-0.13467012, -0.10029431, 0.2853874, 0.94358844)
|
|
||||||
bones/16/position = Vector3(0.03570981, 1.8669866e-10, 3.9181436e-12)
|
|
||||||
bones/16/rotation = Quaternion(0.010311794, -0.034373257, 0.13259757, 0.9905202)
|
|
||||||
bones/17/position = Vector3(0.029856307, -3.005879e-10, -4.0375425e-11)
|
|
||||||
bones/18/rotation = Quaternion(-0.09865642, -0.08747626, 0.37470394, 0.917721)
|
|
||||||
bones/19/position = Vector3(0.04430177, 4.6665116e-11, -9.4033115e-12)
|
|
||||||
bones/19/rotation = Quaternion(0.0042531197, -0.033760007, 0.1860149, 0.98195755)
|
|
||||||
bones/20/position = Vector3(0.034766525, -1.6786372e-10, 2.768652e-11)
|
|
||||||
bones/21/rotation = Quaternion(0.70078146, 0.36200625, -0.001720201, 0.61469823)
|
|
||||||
bones/22/position = Vector3(0.038696717, 5.0118687e-11, 9.9849684e-11)
|
|
||||||
bones/22/rotation = Quaternion(-0.001820262, 0.12128391, 0.22490783, 0.9668006)
|
|
||||||
bones/23/position = Vector3(0.040621713, 1.0721979e-11, -5.127232e-12)
|
|
||||||
bones/24/position = Vector3(0.14, 1.110223e-16, 2.220446e-16)
|
|
||||||
bones/24/rotation = Quaternion(-2.7755576e-17, -6.938894e-17, -6.938894e-18, 1)
|
|
||||||
bones/25/position = Vector3(0.005, -2.7755576e-17, 0)
|
|
||||||
bones/25/rotation = Quaternion(-9.540979e-18, -2.7755576e-17, 9.540979e-18, 1)
|
|
||||||
bones/26/rotation = Quaternion(0.76902086, -0.13267346, -0.62528044, -0.005393706)
|
|
||||||
bones/27/rotation = Quaternion(0.034201004, 0.38763282, -0.48749813, 0.7816117)
|
|
||||||
bones/28/rotation = Quaternion(-0.053170834, 0.025972798, -0.32202634, 0.9448796)
|
|
||||||
bones/29/position = Vector3(-0.26975244, 2.563412e-07, -1.1905385e-08)
|
|
||||||
bones/29/rotation = Quaternion(-0.43919632, 0.049489442, -0.098192796, 0.89163643)
|
|
||||||
bones/30/rotation = Quaternion(0.103668794, 0.04579189, 0.46590617, 0.8775462)
|
|
||||||
bones/31/rotation = Quaternion(0.011519267, 0.09922818, 0.29214594, 0.95114243)
|
|
||||||
bones/33/rotation = Quaternion(9.437185e-05, 0.009016322, 0.44048977, 0.89771235)
|
|
||||||
bones/34/rotation = Quaternion(-0.018226523, 0.017689873, 0.23132406, 0.97254515)
|
|
||||||
bones/36/rotation = Quaternion(-0.13272016, -0.101737194, 0.26830983, 0.9487069)
|
|
||||||
bones/37/rotation = Quaternion(0.010193698, -0.046628788, 0.19672133, 0.97929704)
|
|
||||||
bones/39/rotation = Quaternion(-0.110196866, -0.05036995, 0.35450295, 0.9271716)
|
|
||||||
bones/40/rotation = Quaternion(0.0042593707, -0.028552007, 0.17841409, 0.983532)
|
|
||||||
bones/42/rotation = Quaternion(0.7297342, 0.26573184, -0.09265223, 0.6231294)
|
|
||||||
bones/43/rotation = Quaternion(0.06426929, 0.22943345, 0.1991351, 0.95056564)
|
|
||||||
bones/45/rotation = Quaternion(-0.1176271, 1.3974802e-16, -6.288661e-17, 0.99305785)
|
|
||||||
bones/46/rotation = Quaternion(-0.17323487, -2.099698e-25, 1.9374898e-17, 0.9848805)
|
|
||||||
bones/47/rotation = Quaternion(0.00421817, -0.00037953872, -0.21590644, 0.9764049)
|
|
||||||
bones/48/position = Vector3(0.092836134, 0.0036415688, 2.7747754e-17)
|
|
||||||
bones/48/rotation = Quaternion(1.2661336e-17, 9.989056e-18, 0.13354194, 0.99104315)
|
|
||||||
bones/49/rotation = Quaternion(0.14012733, -0.038448263, 0.6819175, 0.7168505)
|
|
||||||
bones/50/position = Vector3(-0.42572036, 1.7074263e-12, -4.667877e-12)
|
|
||||||
bones/50/rotation = Quaternion(-0.05631607, 0.020481886, -0.74316776, 0.6664162)
|
|
||||||
bones/51/position = Vector3(-0.20476776, -1.3877788e-17, 0)
|
|
||||||
bones/52/position = Vector3(-0.4019669, -3.933849e-11, 1.899425e-12)
|
|
||||||
bones/52/rotation = Quaternion(-0.0004946971, -0.048858073, -0.0074254284, 0.998778)
|
|
||||||
bones/54/position = Vector3(-0.22094238, 4.7704896e-18, 0)
|
|
||||||
bones/55/rotation = Quaternion(0.0132777635, 0.10731075, 0.71409845, -0.6916441)
|
|
||||||
bones/56/rotation = Quaternion(0.03920827, -0.09832406, -0.75485575, 0.64729285)
|
|
||||||
bones/57/position = Vector3(0.20476907, 0, -5.551115e-17)
|
|
||||||
bones/58/rotation = Quaternion(0.01656407, -0.06386153, 0.030505493, 0.9973549)
|
|
||||||
bones/60/position = Vector3(0.22094241, 3.035766e-18, -2.7755576e-17)
|
|
||||||
bones/67/position = Vector3(-4.440892e-16, 0, 7.632783e-17)
|
|
||||||
bones/67/rotation = Quaternion(-2.8449465e-16, 8.326673e-17, 2.7755576e-17, 1)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="." index="1" unique_id=1304782348]
|
|
||||||
libraries/custom = SubResource("AnimationLibrary_3r4wv")
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -1,76 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://c2hg6hu2y5srb"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_j8spt"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="2_acc6o"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://b0xb7kl4rjd66" path="res://core/ai/agents/pig/pig_mannequin.tscn" id="2_qmc2e"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_3n8ak"]
|
|
||||||
[ext_resource type="Animation" uid="uid://c4ingpw0co8v2" path="res://core/ai/agents/pig/idle.res" id="3_lvpc5"]
|
|
||||||
[ext_resource type="Animation" uid="uid://0563r715lmw1" path="res://core/ai/agents/pig/walking.res" id="4_3f3hl"]
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lvpc5"]
|
|
||||||
_data = {
|
|
||||||
&"idle": ExtResource("3_lvpc5"),
|
|
||||||
&"walking": ExtResource("4_3f3hl")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="AiPig" unique_id=1228675528 node_paths=PackedStringArray("anim_player") instance=ExtResource("1_j8spt")]
|
|
||||||
anim_player = NodePath("PigMannequin/AnimationPlayer")
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="1" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("IdleState")
|
|
||||||
|
|
||||||
[node name="IdleState" type="Node" parent="StateMachine" index="0" unique_id=403305255]
|
|
||||||
script = ExtResource("2_acc6o")
|
|
||||||
state_id = &"idle"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/idle"
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="1" unique_id=1237150984]
|
|
||||||
script = ExtResource("3_3n8ak")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"idle"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[node name="PigMannequin" parent="." index="3" unique_id=926755470 instance=ExtResource("2_qmc2e")]
|
|
||||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -0.9, 0)
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="PigMannequin/Armature" parent_id_path=PackedInt32Array(926755470, 695496535) index="0" unique_id=725647261]
|
|
||||||
bones/1/rotation = Quaternion(0.7071068, -7.052583e-07, -7.052583e-07, 0.7071067)
|
|
||||||
bones/3/position = Vector3(5.37765e-05, 0.017809996, -0.007695386)
|
|
||||||
bones/3/rotation = Quaternion(-0.027121998, 0, 0, 0.99963224)
|
|
||||||
bones/4/position = Vector3(-0.004269575, -0.0009057691, 0.018837402)
|
|
||||||
bones/4/rotation = Quaternion(-0.20850496, 0.20850474, 0.675667, 0.6756669)
|
|
||||||
bones/5/rotation = Quaternion(0.70767504, -0.7007484, -0.04928623, 0.07562217)
|
|
||||||
bones/6/rotation = Quaternion(0.5074964, -0.016355418, 0.009635334, 0.86144483)
|
|
||||||
bones/8/position = Vector3(-0.004269574, 0.0008725248, -0.02819033)
|
|
||||||
bones/8/rotation = Quaternion(-0.021000031, 0.020999499, 0.7067949, 0.7067949)
|
|
||||||
bones/9/rotation = Quaternion(0.6762797, -0.7030302, 0.13760945, -0.17163305)
|
|
||||||
bones/10/rotation = Quaternion(-0.76131815, 0.012544005, 0.014735432, 0.64808965)
|
|
||||||
bones/12/position = Vector3(0.0036532492, -0.0009057691, 0.018837402)
|
|
||||||
bones/12/rotation = Quaternion(0.67572093, 0.6757209, -0.20832984, 0.20832963)
|
|
||||||
bones/13/rotation = Quaternion(-0.025831472, -0.099082425, 0.70891863, 0.6978179)
|
|
||||||
bones/14/rotation = Quaternion(0.50689334, 0.045050938, -0.026540417, 0.8604216)
|
|
||||||
bones/16/position = Vector3(0.0036521717, 0.0008013838, -0.028183708)
|
|
||||||
bones/16/rotation = Quaternion(0.7068031, 0.7068031, -0.020723455, 0.020722982)
|
|
||||||
bones/17/rotation = Quaternion(0.1443776, 0.16487122, 0.6747477, 0.7047611)
|
|
||||||
bones/18/rotation = Quaternion(-0.7649948, -0.0061196624, -0.0072699804, 0.64396644)
|
|
||||||
bones/20/position = Vector3(-0.00042349403, 0.0063493187, -0.030968314)
|
|
||||||
bones/20/rotation = Quaternion(0.60138106, 0.012805484, 0.0019118772, 0.79885745)
|
|
||||||
bones/22/position = Vector3(-0.0002038494, 0.0041766805, 0.0044565103)
|
|
||||||
bones/22/rotation = Quaternion(0.0076635648, 0.7548352, 0.6556045, -0.018651871)
|
|
||||||
bones/23/rotation = Quaternion(0.065689825, -0.010677165, -0.019551655, 0.99759144)
|
|
||||||
bones/24/rotation = Quaternion(-0.24106143, -0.2388839, 0.03569213, 0.9399734)
|
|
||||||
bones/26/position = Vector3(-0.00032282702, 0.010153349, -0.021613695)
|
|
||||||
bones/26/rotation = Quaternion(3.6196245e-06, 0.6452338, 0.7639852, 3.2175833e-06)
|
|
||||||
bones/27/rotation = Quaternion(0.0455184, 0.00040800165, -0.025042463, 0.99864954)
|
|
||||||
bones/29/position = Vector3(-0.01117923, 0.0010000349, -0.03163386)
|
|
||||||
bones/29/rotation = Quaternion(0.7071068, -6.178108e-07, -6.178107e-07, 0.7071067)
|
|
||||||
bones/31/rotation = Quaternion(0.7071068, -1.0424332e-06, -1.0424329e-06, 0.7071067)
|
|
||||||
bones/33/position = Vector3(0.010670463, 0.0010000349, -0.03166372)
|
|
||||||
bones/33/rotation = Quaternion(0.70755845, -7.1388774e-07, -1.0355643e-06, 0.7066547)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="PigMannequin" index="1" unique_id=904091745]
|
|
||||||
libraries/custom = SubResource("AnimationLibrary_lvpc5")
|
|
||||||
|
|
||||||
[editable path="PigMannequin"]
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://b0xb7kl4rjd66"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bi5f24frndw7j" path="res://core/ai/agents/pig/pig.fbx" id="1_ptg6h"]
|
|
||||||
|
|
||||||
[node name="PigMannequin" unique_id=926755470 instance=ExtResource("1_ptg6h")]
|
|
||||||
Binary file not shown.
@@ -1,55 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://2md4l83fy8kr"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_0bu1i"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="2_iapui"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://c16j3umhplew4" path="res://core/ai/agents/pug/pug_mannequin.tscn" id="2_n0mit"]
|
|
||||||
[ext_resource type="Animation" uid="uid://c8hy2tftqb7su" path="res://core/ai/agents/pug/idle.res" id="3_hv1px"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_xc1yq"]
|
|
||||||
[ext_resource type="Animation" uid="uid://bqrhidcnublea" path="res://core/ai/agents/pug/walking.res" id="4_cjq2y"]
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_iapui"]
|
|
||||||
_data = {
|
|
||||||
&"idle": ExtResource("3_hv1px"),
|
|
||||||
&"walking": ExtResource("4_cjq2y")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="AiPug" unique_id=1228675528 node_paths=PackedStringArray("anim_player") instance=ExtResource("1_0bu1i")]
|
|
||||||
anim_player = NodePath("PugMannequin/AnimationPlayer")
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="1" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("IdleState")
|
|
||||||
|
|
||||||
[node name="IdleState" type="Node" parent="StateMachine" index="0" unique_id=1079848975]
|
|
||||||
script = ExtResource("2_iapui")
|
|
||||||
state_id = &"idle"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/idle"
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="1" unique_id=1573670396]
|
|
||||||
script = ExtResource("3_xc1yq")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"idle"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[node name="PugMannequin" parent="." index="3" unique_id=1732134047 instance=ExtResource("2_n0mit")]
|
|
||||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -0.9, 0)
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="PugMannequin/Armature" parent_id_path=PackedInt32Array(1732134047, 199608791) index="0" unique_id=33809722]
|
|
||||||
bones/8/position = Vector3(-0.0054483665, 0.008346455, -0.020266803)
|
|
||||||
bones/8/rotation = Quaternion(-0.007561639, 0.007561228, 0.70706636, 0.70706636)
|
|
||||||
bones/9/rotation = Quaternion(0.6665347, -0.6790185, 0.20055033, -0.23333457)
|
|
||||||
bones/10/rotation = Quaternion(-0.37439552, 0.017943675, 0.007246467, 0.92706716)
|
|
||||||
bones/14/rotation = Quaternion(0.13296904, 0.051822018, -0.0069621373, 0.9897401)
|
|
||||||
bones/16/position = Vector3(0.0048320387, 0.008252437, -0.02027757)
|
|
||||||
bones/16/rotation = Quaternion(0.7070978, 0.7070978, -0.0035577225, 0.0035573125)
|
|
||||||
bones/17/rotation = Quaternion(0.20727697, 0.22687204, 0.66435784, 0.68131787)
|
|
||||||
bones/18/rotation = Quaternion(-0.38250104, -0.0087800585, -0.0036350952, 0.9239062)
|
|
||||||
bones/20/rotation = Quaternion(0.6013276, -0.007656022, 0.017799761, 0.79876757)
|
|
||||||
bones/24/rotation = Quaternion(-0.45064288, -0.22904137, 0.090387635, 0.858074)
|
|
||||||
bones/27/rotation = Quaternion(0.05229574, 5.703821e-05, -0.025155801, 0.99831474)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="PugMannequin" index="1" unique_id=1653203922]
|
|
||||||
libraries/custom = SubResource("AnimationLibrary_iapui")
|
|
||||||
|
|
||||||
[editable path="PugMannequin"]
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,29 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://c16j3umhplew4"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://buqmw5lbfom07" path="res://core/ai/agents/pug/pug.fbx" id="1_3c2yk"]
|
|
||||||
|
|
||||||
[node name="PugMannequin" unique_id=1732134047 instance=ExtResource("1_3c2yk")]
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="Armature" parent_id_path=PackedInt32Array(251322627) index="0" unique_id=1067550931]
|
|
||||||
bones/1/rotation = Quaternion(0.7071068, -8.7384586e-07, -8.7384575e-07, 0.7071067)
|
|
||||||
bones/3/position = Vector3(5.37765e-05, 0.023020823, -0.0001735416)
|
|
||||||
bones/4/rotation = Quaternion(0.0013124894, -0.0013127187, 0.7071056, 0.7071056)
|
|
||||||
bones/5/rotation = Quaternion(0.7071125, -0.70201516, -0.045116592, 0.07163183)
|
|
||||||
bones/6/rotation = Quaternion(0.13312602, -0.018813718, 0.0025276097, 0.9909174)
|
|
||||||
bones/8/rotation = Quaternion(0.0006567046, -0.0006571151, 0.7071065, 0.7071065)
|
|
||||||
bones/9/rotation = Quaternion(0.66675293, -0.67880416, 0.20062506, -0.23327015)
|
|
||||||
bones/10/rotation = Quaternion(-0.35678986, 0.01807761, 0.006905738, 0.9339843)
|
|
||||||
bones/12/rotation = Quaternion(0.70710534, 0.70710546, 0.0014091316, -0.0014093613)
|
|
||||||
bones/13/rotation = Quaternion(-0.021626502, -0.09508007, 0.7082199, 0.6992257)
|
|
||||||
bones/14/rotation = Quaternion(0.13296904, 0.051822014, -0.0069621364, 0.98974)
|
|
||||||
bones/16/rotation = Quaternion(0.7071066, 0.7071067, 0.00044525132, -0.00044566192)
|
|
||||||
bones/17/rotation = Quaternion(0.20738536, 0.2267729, 0.6646832, 0.6810004)
|
|
||||||
bones/18/rotation = Quaternion(-0.35684106, -0.008877046, -0.003391197, 0.93411684)
|
|
||||||
bones/20/rotation = Quaternion(0.6013276, -0.007656024, 0.017799761, 0.79876757)
|
|
||||||
bones/22/rotation = Quaternion(0.0076703057, 0.9327372, 0.3595561, -0.025732514)
|
|
||||||
bones/23/rotation = Quaternion(-0.089636706, -0.019697238, -0.01825219, 0.99561244)
|
|
||||||
bones/24/rotation = Quaternion(-0.44343108, -0.23039742, 0.11800072, 0.85811526)
|
|
||||||
bones/26/rotation = Quaternion(5.170388e-06, 0.6954638, 0.7185612, 5.0026606e-06)
|
|
||||||
bones/27/rotation = Quaternion(0.052304644, 0.00074447604, -0.01352817, 0.99853927)
|
|
||||||
bones/29/rotation = Quaternion(0.7071068, -9.581396e-07, -9.581394e-07, 0.7071067)
|
|
||||||
bones/31/rotation = Quaternion(0.7071068, -1.2110207e-06, -1.2110205e-06, 0.7071067)
|
|
||||||
Binary file not shown.
@@ -1,44 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://bs1bdtm7jdtgb"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_smbiq"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://58u6viv3qd63" path="res://core/ai/agents/sheep/sheep_mannequin.tscn" id="2_hnenk"]
|
|
||||||
[ext_resource type="Script" uid="uid://d3hy70ec8vqo5" path="res://core/ai/framework/run_animation_state.gd" id="2_vlyix"]
|
|
||||||
[ext_resource type="Animation" uid="uid://bjvoxmyf4vdy8" path="res://core/ai/agents/sheep/idle.res" id="3_i3d22"]
|
|
||||||
[ext_resource type="Script" uid="uid://bngfthvt04ivv" path="res://core/ai/framework/patrol_state.gd" id="3_uqv5v"]
|
|
||||||
[ext_resource type="Animation" uid="uid://8r05h8e7nmic" path="res://core/ai/agents/sheep/walking.res" id="4_hxh1r"]
|
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vlyix"]
|
|
||||||
_data = {
|
|
||||||
&"idle": ExtResource("3_i3d22"),
|
|
||||||
&"walking": ExtResource("4_hxh1r")
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="AiSheep" unique_id=1228675528 node_paths=PackedStringArray("anim_player") instance=ExtResource("1_smbiq")]
|
|
||||||
anim_player = NodePath("SheepMannequin/AnimationPlayer")
|
|
||||||
|
|
||||||
[node name="StateMachine" parent="." index="1" unique_id=1286404264 node_paths=PackedStringArray("initial_state")]
|
|
||||||
initial_state = NodePath("IdleState")
|
|
||||||
|
|
||||||
[node name="IdleState" type="Node" parent="StateMachine" index="0" unique_id=190711451]
|
|
||||||
script = ExtResource("2_vlyix")
|
|
||||||
state_id = &"idle"
|
|
||||||
next_state_id = &"patrol"
|
|
||||||
animation_name = "custom/idle"
|
|
||||||
|
|
||||||
[node name="PatrolState" type="Node" parent="StateMachine" index="1" unique_id=431976868]
|
|
||||||
script = ExtResource("3_uqv5v")
|
|
||||||
state_id = &"patrol"
|
|
||||||
next_state_id = &"idle"
|
|
||||||
animation_name = "custom/walking"
|
|
||||||
exit_on_action_finished = true
|
|
||||||
|
|
||||||
[node name="SheepMannequin" parent="." index="3" unique_id=1153770042 instance=ExtResource("2_hnenk")]
|
|
||||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -0.9, 0)
|
|
||||||
|
|
||||||
[node name="Armature" parent="SheepMannequin" index="0" unique_id=62421163]
|
|
||||||
transform = Transform3D(100, 0, 0, 0, -4.3711384e-06, 99.99999, 0, -99.99999, -4.3711384e-06, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="SheepMannequin" index="1" unique_id=676833932]
|
|
||||||
libraries/custom = SubResource("AnimationLibrary_vlyix")
|
|
||||||
|
|
||||||
[editable path="SheepMannequin"]
|
|
||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,29 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://58u6viv3qd63"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://oog8biov508a" path="res://core/ai/agents/sheep/sheep.fbx" id="1_pnkxh"]
|
|
||||||
|
|
||||||
[node name="SheepMannequin" unique_id=1153770042 instance=ExtResource("1_pnkxh")]
|
|
||||||
|
|
||||||
[node name="Skeleton3D" parent="Armature" parent_id_path=PackedInt32Array(1644576745) index="0" unique_id=811031257]
|
|
||||||
bones/1/rotation = Quaternion(0.7071068, -7.052583e-07, -7.052583e-07, 0.7071067)
|
|
||||||
bones/4/rotation = Quaternion(0.0017592248, -0.0017595046, 0.7071046, 0.7071046)
|
|
||||||
bones/5/rotation = Quaternion(0.706397, -0.7005701, -0.057003256, 0.08339989)
|
|
||||||
bones/6/rotation = Quaternion(0.17354831, -0.018694565, 0.003295098, 0.98464245)
|
|
||||||
bones/8/rotation = Quaternion(0.0011415672, -0.0011422854, 0.7071059, 0.7071059)
|
|
||||||
bones/9/rotation = Quaternion(0.66940695, -0.67618734, 0.20153745, -0.23248184)
|
|
||||||
bones/10/rotation = Quaternion(-0.38440856, 0.017864142, 0.0074402345, 0.92296034)
|
|
||||||
bones/12/rotation = Quaternion(0.70710427, 0.7071044, 0.001866237, -0.0018665171)
|
|
||||||
bones/13/rotation = Quaternion(-0.033540055, -0.106803544, 0.7078988, 0.6973861)
|
|
||||||
bones/14/rotation = Quaternion(0.17334078, 0.051493812, -0.009075931, 0.9834729)
|
|
||||||
bones/16/rotation = Quaternion(0.70710605, 0.7071062, 0.0009843343, -0.0009850523)
|
|
||||||
bones/17/rotation = Quaternion(0.2082713, 0.22595985, 0.6673435, 0.67839366)
|
|
||||||
bones/18/rotation = Quaternion(-0.384463, -0.008772296, -0.0036537221, 0.92309153)
|
|
||||||
bones/20/rotation = Quaternion(0.6012591, 0.022893472, -0.005923484, 0.7987042)
|
|
||||||
bones/22/rotation = Quaternion(0.006586622, 0.9146406, 0.40345904, -0.02469813)
|
|
||||||
bones/23/rotation = Quaternion(0.07927493, -0.021147288, -0.014362239, 0.996525)
|
|
||||||
bones/24/rotation = Quaternion(-0.6495659, -0.19198355, 0.17329836, 0.71496445)
|
|
||||||
bones/26/rotation = Quaternion(3.4527793e-06, 0.6944211, 0.71956885, 3.3297817e-06)
|
|
||||||
bones/27/rotation = Quaternion(0.0651835, 0.0008379451, -0.017830681, 0.9977136)
|
|
||||||
bones/29/rotation = Quaternion(0.7071068, -7.052583e-07, -7.052583e-07, 0.7071067)
|
|
||||||
bones/31/rotation = Quaternion(0.7071068, -1.0424332e-06, -1.0424329e-06, 0.7071067)
|
|
||||||
bones/33/rotation = Quaternion(0.7071068, -1.0424332e-06, -1.0424329e-06, 0.7071067)
|
|
||||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
|||||||
extends State
|
|
||||||
|
|
||||||
func enter() -> void:
|
|
||||||
super.enter()
|
|
||||||
run_animation()
|
|
||||||
agent.navigate_to_random_point()
|
|
||||||
|
|
||||||
func physics_update(_delta) -> void:
|
|
||||||
if agent.nav_agent.is_navigation_finished():
|
|
||||||
transitioned.emit(self, next_state_id)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://bngfthvt04ivv
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
extends State
|
|
||||||
|
|
||||||
|
|
||||||
func enter() -> void:
|
|
||||||
super.enter()
|
|
||||||
run_animation()
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://d3hy70ec8vqo5
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
extends Node
|
|
||||||
|
|
||||||
class_name State
|
|
||||||
|
|
||||||
@export var state_id: StringName = &""
|
|
||||||
@export var next_state_id: StringName
|
|
||||||
@export var animation_name: String
|
|
||||||
@export var exit_on_action_finished: bool
|
|
||||||
@export var exit_on_animation_finished: bool
|
|
||||||
@export var min_wait_time: float = 3.0
|
|
||||||
@export var max_wait_time: float = 10
|
|
||||||
|
|
||||||
var runtime_timer: Timer
|
|
||||||
|
|
||||||
@onready var agent: AIBase = owner
|
|
||||||
|
|
||||||
signal transitioned(state: State, new_state_id: StringName)
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
if min_wait_time > 0 and !exit_on_action_finished:
|
|
||||||
runtime_timer = Timer.new()
|
|
||||||
runtime_timer.name = "IdleTimer"
|
|
||||||
runtime_timer.one_shot = true
|
|
||||||
add_child(runtime_timer)
|
|
||||||
runtime_timer.timeout.connect(_on_timer_timeout)
|
|
||||||
|
|
||||||
func enter() -> void:
|
|
||||||
if exit_on_animation_finished:
|
|
||||||
if not agent.anim_player.animation_finished.is_connected(_on_animation_finished):
|
|
||||||
agent.anim_player.animation_finished.connect(_on_animation_finished)
|
|
||||||
elif min_wait_time > 0 and !exit_on_action_finished:
|
|
||||||
var wait_time:= randf_range(min_wait_time, max_wait_time)
|
|
||||||
runtime_timer.start(wait_time)
|
|
||||||
|
|
||||||
func exit() -> void:
|
|
||||||
if exit_on_animation_finished and agent.anim_player.animation_finished.is_connected(_on_animation_finished):
|
|
||||||
agent.anim_player.animation_finished.disconnect(_on_animation_finished)
|
|
||||||
|
|
||||||
if runtime_timer and not runtime_timer.is_stopped():
|
|
||||||
runtime_timer.stop()
|
|
||||||
|
|
||||||
func update(_delta: float) -> void:
|
|
||||||
pass
|
|
||||||
|
|
||||||
func physics_update(_delta: float) -> void:
|
|
||||||
pass
|
|
||||||
|
|
||||||
func run_animation() -> void:
|
|
||||||
if agent.anim_player and agent.anim_player.has_animation(animation_name):
|
|
||||||
agent.anim_player.play(animation_name)
|
|
||||||
|
|
||||||
func _on_animation_finished(anim_name: StringName) -> void:
|
|
||||||
if animation_name == anim_name:
|
|
||||||
if exit_on_action_finished:
|
|
||||||
return
|
|
||||||
elif min_wait_time > 0:
|
|
||||||
var wait_time := randf_range(min_wait_time, max_wait_time)
|
|
||||||
runtime_timer.start(wait_time)
|
|
||||||
else:
|
|
||||||
transitioned.emit(self, next_state_id)
|
|
||||||
|
|
||||||
func _on_timer_timeout() -> void:
|
|
||||||
transitioned.emit(self, next_state_id)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://dpso7abi5ftyw
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
extends Node
|
|
||||||
|
|
||||||
class_name StateMachine
|
|
||||||
|
|
||||||
@export var initial_state: State
|
|
||||||
|
|
||||||
var current_state: State
|
|
||||||
var states: Dictionary[StringName, State] = {}
|
|
||||||
var is_initialized: bool = false
|
|
||||||
var _enabled: bool = true
|
|
||||||
var enable: bool:
|
|
||||||
set(value):
|
|
||||||
_enabled = value
|
|
||||||
_set_enabled(value)
|
|
||||||
get:
|
|
||||||
return _enabled
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
_initialize_states()
|
|
||||||
_set_enabled(enable)
|
|
||||||
|
|
||||||
func _initialize_states() -> void:
|
|
||||||
if is_initialized:
|
|
||||||
return
|
|
||||||
|
|
||||||
for state in get_children():
|
|
||||||
if state is State:
|
|
||||||
states[state.state_id] = state
|
|
||||||
state.transitioned.connect(_on_state_transition)
|
|
||||||
|
|
||||||
is_initialized = true
|
|
||||||
|
|
||||||
func _set_enabled(value: bool) -> void:
|
|
||||||
_enabled = value
|
|
||||||
|
|
||||||
if not _enabled:
|
|
||||||
return
|
|
||||||
|
|
||||||
_initialize_states()
|
|
||||||
|
|
||||||
if initial_state and current_state == null:
|
|
||||||
current_state = initial_state
|
|
||||||
current_state.enter()
|
|
||||||
|
|
||||||
func physics_process(delta) -> void:
|
|
||||||
if current_state and _enabled:
|
|
||||||
current_state.physics_update(delta)
|
|
||||||
|
|
||||||
func _on_state_transition(state: State, new_state_id: StringName) -> void:
|
|
||||||
if state != current_state:
|
|
||||||
return
|
|
||||||
|
|
||||||
var new_state = states.get(new_state_id)
|
|
||||||
if not new_state:
|
|
||||||
return
|
|
||||||
|
|
||||||
if current_state:
|
|
||||||
current_state.exit()
|
|
||||||
|
|
||||||
current_state = new_state
|
|
||||||
current_state.enter()
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://ps3vlu2qvmop
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
extends Node
|
|
||||||
|
|
||||||
signal volume_changed(bus_name: StringName, linear_value: float)
|
|
||||||
|
|
||||||
const MIN_VOLUME: float = 0.0
|
|
||||||
const MAX_VOLUME: float = 1.0
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
load_save_data()
|
|
||||||
|
|
||||||
func load_save_data() -> void:
|
|
||||||
for bus_name in GameState.save_data.audio_bus_volumes:
|
|
||||||
_apply_audio_bus_volume(bus_name, GameState.save_data.audio_bus_volumes[bus_name])
|
|
||||||
|
|
||||||
func set_audio_bus_volume(bus_name: StringName, linear_value: float) -> void:
|
|
||||||
var normalized_bus_name := str(bus_name)
|
|
||||||
var clamped_value := clampf(linear_value, MIN_VOLUME, MAX_VOLUME)
|
|
||||||
|
|
||||||
GameState.save_data.audio_bus_volumes[normalized_bus_name] = clamped_value
|
|
||||||
_apply_audio_bus_volume(normalized_bus_name, clamped_value)
|
|
||||||
GameState.save_game()
|
|
||||||
volume_changed.emit(bus_name, clamped_value)
|
|
||||||
|
|
||||||
func get_audio_bus_volume(bus_name: StringName, default_value: float = 1.0) -> float:
|
|
||||||
return float(GameState.save_data.audio_bus_volumes.get(str(bus_name), default_value))
|
|
||||||
|
|
||||||
func _apply_audio_bus_volume(bus_name: String, linear_value: float) -> void:
|
|
||||||
var bus_index := AudioServer.get_bus_index(bus_name)
|
|
||||||
if bus_index == -1:
|
|
||||||
return
|
|
||||||
|
|
||||||
var clamped_value := clampf(linear_value, MIN_VOLUME, MAX_VOLUME)
|
|
||||||
AudioServer.set_bus_volume_db(bus_index, linear_to_db(clamped_value))
|
|
||||||
AudioServer.set_bus_mute(bus_index, is_zero_approx(clamped_value))
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://dcttbbavtwtsg
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -2,9 +2,7 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" uid="uid://ct2k25kslaxe5" path="res://core/biome_generator/biome_generator.gd" id="1_c7ilo"]
|
[ext_resource type="Script" uid="uid://ct2k25kslaxe5" path="res://core/biome_generator/biome_generator.gd" id="1_c7ilo"]
|
||||||
[ext_resource type="Material" uid="uid://b8p1sjxisi522" path="res://core/biome_generator/wires.tres" id="2_w42pm"]
|
[ext_resource type="Material" uid="uid://b8p1sjxisi522" path="res://core/biome_generator/wires.tres" id="2_w42pm"]
|
||||||
[ext_resource type="Resource" path="res://core/biome_generator/railway_pool.tres" id="3_railway_pool"]
|
|
||||||
|
|
||||||
[node name="biome_generator" type="Node3D" unique_id=1861369341]
|
[node name="biome_generator" type="Node3D" unique_id=1861369341]
|
||||||
script = ExtResource("1_c7ilo")
|
script = ExtResource("1_c7ilo")
|
||||||
railway_pool = ExtResource("3_railway_pool")
|
|
||||||
lamppost_wire_material = ExtResource("2_w42pm")
|
lamppost_wire_material = ExtResource("2_w42pm")
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ class_name ChunkInfo
|
|||||||
|
|
||||||
@export_group("Set Piece Rules (Unique pieces)")
|
@export_group("Set Piece Rules (Unique pieces)")
|
||||||
@export var exclusive_biome: String = "" # Es: "Forest"
|
@export var exclusive_biome: String = "" # Es: "Forest"
|
||||||
@export_range(0, 5, 1) var uniqueness: int = 0 #0=common; 5=unique
|
|
||||||
|
|
||||||
@export_group("Base exit")
|
@export_group("Base exit")
|
||||||
@export var north: bool = false
|
@export var north: bool = false
|
||||||
@@ -13,12 +12,6 @@ class_name ChunkInfo
|
|||||||
@export var south: bool = false
|
@export var south: bool = false
|
||||||
@export var west: bool = false
|
@export var west: bool = false
|
||||||
|
|
||||||
@export_group("River exit")
|
|
||||||
@export var river_north: bool = false
|
|
||||||
@export var river_est: bool = false
|
|
||||||
@export var river_south: bool = false
|
|
||||||
@export var river_west: bool = false
|
|
||||||
|
|
||||||
@export_group("Margin heights (level 0, 1, 2)")
|
@export_group("Margin heights (level 0, 1, 2)")
|
||||||
@export_range(0, 2, 1) var height_north: int = 0
|
@export_range(0, 2, 1) var height_north: int = 0
|
||||||
@export_range(0, 2, 1) var height_est: int = 0
|
@export_range(0, 2, 1) var height_est: int = 0
|
||||||
@@ -36,17 +29,14 @@ func _ready() -> void:
|
|||||||
|
|
||||||
func get_rotated_data(steps_90: int) -> Dictionary:
|
func get_rotated_data(steps_90: int) -> Dictionary:
|
||||||
var original_exit = [north, est, south, west]
|
var original_exit = [north, est, south, west]
|
||||||
var original_river_exit = [river_north, river_est, river_south, river_west]
|
|
||||||
var original_height = [height_north, height_est, height_south, height_west]
|
var original_height = [height_north, height_est, height_south, height_west]
|
||||||
|
|
||||||
var calculated_exit = []
|
var calculated_exit = []
|
||||||
var calculated_river_exit = []
|
|
||||||
var calculated_height = []
|
var calculated_height = []
|
||||||
|
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
var index = (i - steps_90 + 4) % 4
|
var index = (i - steps_90 + 4) % 4
|
||||||
calculated_exit.append(original_exit[index])
|
calculated_exit.append(original_exit[index])
|
||||||
calculated_river_exit.append(original_river_exit[index])
|
|
||||||
calculated_height.append(original_height[index])
|
calculated_height.append(original_height[index])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -54,10 +44,6 @@ func get_rotated_data(steps_90: int) -> Dictionary:
|
|||||||
"north": calculated_exit[0], "est": calculated_exit[1],
|
"north": calculated_exit[0], "est": calculated_exit[1],
|
||||||
"south": calculated_exit[2], "west": calculated_exit[3]
|
"south": calculated_exit[2], "west": calculated_exit[3]
|
||||||
},
|
},
|
||||||
"river_connections": {
|
|
||||||
"north": calculated_river_exit[0], "est": calculated_river_exit[1],
|
|
||||||
"south": calculated_river_exit[2], "west": calculated_river_exit[3]
|
|
||||||
},
|
|
||||||
"heights": {
|
"heights": {
|
||||||
"north": calculated_height[0], "est": calculated_height[1],
|
"north": calculated_height[0], "est": calculated_height[1],
|
||||||
"south": calculated_height[2], "west": calculated_height[3]
|
"south": calculated_height[2], "west": calculated_height[3]
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="Resource" script_class="EntityPool" format=3 uid="uid://cmd6s6thq4f7r"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://clx701xdwelgx" path="res://core/ai/agents/base/ai_base.tscn" id="1_0kfj8"]
|
|
||||||
[ext_resource type="Script" uid="uid://53ryr0fsqiq7" path="res://core/biome_generator/entity_pool.gd" id="1_vccp2"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
script = ExtResource("1_vccp2")
|
|
||||||
name = "Entity Pool"
|
|
||||||
available_entities = Array[PackedScene]([ExtResource("1_0kfj8")])
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
extends Resource
|
|
||||||
class_name EntityPool
|
|
||||||
|
|
||||||
@export var name: String = "New Entity Pool"
|
|
||||||
@export var available_entities: Array[PackedScene] = []
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://53ryr0fsqiq7
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
extends Marker3D
|
|
||||||
class_name EntitySpawnPoint
|
|
||||||
|
|
||||||
enum AllowedType { ANY, HUMANOID_ONLY, ANIMAL_ONLY }
|
|
||||||
|
|
||||||
@export var allowed_type: AllowedType = AllowedType.ANY
|
|
||||||
@export_range(0.0, 1.0, 0.01) var spawn_chance: float = 1.0
|
|
||||||
@export var random_y_rotation: bool = true
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://c5ercbqy7srx3
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
extends Marker3D
|
|
||||||
class_name PropInfo
|
|
||||||
|
|
||||||
@export var available_props: Array[PackedScene]
|
|
||||||
@export_range(0, 5, 1) var uniqueness: int = 0 #0=common; 5=unique
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://dg6ngy4pmtsyc
|
|
||||||
@@ -1,60 +1,31 @@
|
|||||||
extends Path3D
|
extends Path3D
|
||||||
|
|
||||||
@export_group("Train")
|
@export_group("Train")
|
||||||
##train speed
|
|
||||||
@export var train_speed: float = 6.0
|
@export var train_speed: float = 6.0
|
||||||
##if true the train is in motion
|
|
||||||
@export var is_inmotion: bool = true
|
@export var is_inmotion: bool = true
|
||||||
##the model for the locomotive
|
|
||||||
@export var train_model: PackedScene
|
@export var train_model: PackedScene
|
||||||
##array of wagon scenes
|
|
||||||
@export var wagon_pool: Resource
|
|
||||||
##if true the number of wagons is random from 1 to wagon_count
|
|
||||||
@export var wagon_random_number: bool = true
|
|
||||||
##if wagon_random_number = true is used as max wagons
|
|
||||||
@export_range(0, 32, 1, "or_greater") var wagon_count: int = 3
|
|
||||||
##the distance between two wagons
|
|
||||||
@export var wagon_gap: float = 0.4
|
|
||||||
##the scale to calculate the distance of the bounds
|
|
||||||
@export_range(0.1, 2.0, 0.05, "or_greater") var wagon_spacing_scale: float = 0.5
|
|
||||||
##override spacing using this value
|
|
||||||
@export var wagon_spacing_override: float = 0.0
|
|
||||||
##distance of the rail axes
|
|
||||||
@export var axes_distance: float = 3.0
|
@export var axes_distance: float = 3.0
|
||||||
##discance between rails
|
|
||||||
@export var rail_distance: float = 1.2
|
@export var rail_distance: float = 1.2
|
||||||
##current camera
|
|
||||||
@export var cameras: Node3D
|
@export var cameras: Node3D
|
||||||
##swing of the train during the ran
|
|
||||||
@export_range(0.0, 1.0) var basic_swing: float = 0.1
|
@export_range(0.0, 1.0) var basic_swing: float = 0.1
|
||||||
|
|
||||||
@export_group("Rails Bulding")
|
@export_group("Rails Bulding")
|
||||||
##distance between sleepers of the rails
|
|
||||||
@export var sleepers_distance: float = 1.0
|
@export var sleepers_distance: float = 1.0
|
||||||
##nodel for the sleeper of the rail
|
|
||||||
@export var sleepers_model: PackedScene
|
@export var sleepers_model: PackedScene
|
||||||
|
|
||||||
@export_group("Manual Controls")
|
@export_group("Manual Controls")
|
||||||
##max speed
|
|
||||||
@export var speed_max: float = 15.0
|
@export var speed_max: float = 15.0
|
||||||
##min speed
|
|
||||||
@export var speed_min: float = -5.0
|
@export var speed_min: float = -5.0
|
||||||
##acceleration
|
|
||||||
@export var manual_acceleration: float = 5.0
|
@export var manual_acceleration: float = 5.0
|
||||||
|
|
||||||
@export_group("Train Stops")
|
@export_group("Train Stops")
|
||||||
##if true the train stop the ran on stops
|
|
||||||
@export var enable_stops: bool = true
|
@export var enable_stops: bool = true
|
||||||
##time of stop
|
|
||||||
@export var stop_time: float = 4.0
|
@export var stop_time: float = 4.0
|
||||||
##distance when the train start to brake
|
|
||||||
@export var brake_distance: float = 15.0
|
@export var brake_distance: float = 15.0
|
||||||
##restart time
|
|
||||||
@export var restart_time: float = 3.0
|
@export var restart_time: float = 3.0
|
||||||
##scene for fireworks
|
|
||||||
@export var fireworks_scene: PackedScene
|
@export var fireworks_scene: PackedScene
|
||||||
##array of colors for fireworks
|
|
||||||
@export var fireworks_colors: Array[Color] = [
|
var fireworks_colors: Array[Color] = [
|
||||||
Color(1.0, 0.2, 0.2), # Rosso vivo
|
Color(1.0, 0.2, 0.2), # Rosso vivo
|
||||||
Color(0.2, 1.0, 0.2), # Verde lime
|
Color(0.2, 1.0, 0.2), # Verde lime
|
||||||
Color(0.3, 0.5, 1.0), # Blu cielo
|
Color(0.3, 0.5, 1.0), # Blu cielo
|
||||||
@@ -77,14 +48,9 @@ var stop_multiply: float = 1.0
|
|||||||
var is_restarting: bool = false
|
var is_restarting: bool = false
|
||||||
var tween_restart: Tween
|
var tween_restart: Tween
|
||||||
var environment_config: EnvironmentConfig
|
var environment_config: EnvironmentConfig
|
||||||
var wagon_instances: Array[Node3D] = []
|
|
||||||
var wagon_progress_offsets: Array[float] = []
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
randomize()
|
|
||||||
|
|
||||||
_cache_environment_config()
|
_cache_environment_config()
|
||||||
|
|
||||||
if curve != null and curve.get_baked_length() > 0:
|
if curve != null and curve.get_baked_length() > 0:
|
||||||
build_rails()
|
build_rails()
|
||||||
build_train()
|
build_train()
|
||||||
@@ -187,8 +153,6 @@ func _snap_train_to_progress() -> void:
|
|||||||
cameras.global_position = center_position
|
cameras.global_position = center_position
|
||||||
cameras.global_basis = train_instance.global_basis
|
cameras.global_basis = train_instance.global_basis
|
||||||
|
|
||||||
_snap_wagons_to_progress(total_length)
|
|
||||||
|
|
||||||
func build_rails() -> void:
|
func build_rails() -> void:
|
||||||
var mat_wood = StandardMaterial3D.new()
|
var mat_wood = StandardMaterial3D.new()
|
||||||
mat_wood.albedo_color = Color(0.35, 0.2, 0.1)
|
mat_wood.albedo_color = Color(0.35, 0.2, 0.1)
|
||||||
@@ -264,8 +228,8 @@ func _input(event: InputEvent) -> void:
|
|||||||
if event is InputEventKey and event.pressed and not event.echo:
|
if event is InputEventKey and event.pressed and not event.echo:
|
||||||
if event.keycode == KEY_T:
|
if event.keycode == KEY_T:
|
||||||
_goto_next_stop()
|
_goto_next_stop()
|
||||||
#elif event.keycode == KEY_F:
|
elif event.keycode == KEY_F:
|
||||||
#_test_manual_fireworks()
|
_test_manual_fireworks()
|
||||||
|
|
||||||
func _test_manual_fireworks() -> void:
|
func _test_manual_fireworks() -> void:
|
||||||
if fireworks_scene == null or train_instance == null: return
|
if fireworks_scene == null or train_instance == null: return
|
||||||
@@ -360,8 +324,6 @@ func train_move(delta: float) -> void:
|
|||||||
cameras.global_position = center_position
|
cameras.global_position = center_position
|
||||||
cameras.global_basis = train_instance.global_basis
|
cameras.global_basis = train_instance.global_basis
|
||||||
|
|
||||||
_snap_wagons_to_progress(total_length)
|
|
||||||
|
|
||||||
var real_speed = abs(train_speed * stop_multiply)
|
var real_speed = abs(train_speed * stop_multiply)
|
||||||
var speed_factor = clamp(real_speed / max(speed_max, 0.001), 0.0, 1.0)
|
var speed_factor = clamp(real_speed / max(speed_max, 0.001), 0.0, 1.0)
|
||||||
var dir_prev = (center_position - back_position).normalized()
|
var dir_prev = (center_position - back_position).normalized()
|
||||||
@@ -439,34 +401,6 @@ func build_train() -> void:
|
|||||||
else:
|
else:
|
||||||
build_default_train()
|
build_default_train()
|
||||||
|
|
||||||
var wagons = wagon_count
|
|
||||||
if wagon_random_number:
|
|
||||||
wagons = randi_range(1, wagon_count)
|
|
||||||
build_train_wagons(wagons)
|
|
||||||
|
|
||||||
func build_train_wagons(wagon_number: int) -> void:
|
|
||||||
_clear_train_wagons()
|
|
||||||
if wagon_number <= 0 or wagon_pool == null or not "available_wagons" in wagon_pool:
|
|
||||||
return
|
|
||||||
if wagon_pool.available_wagons.is_empty():
|
|
||||||
return
|
|
||||||
|
|
||||||
for i in range(wagon_number):
|
|
||||||
var wagon_scene: PackedScene = wagon_pool.available_wagons.pick_random()
|
|
||||||
if wagon_scene == null:
|
|
||||||
continue
|
|
||||||
|
|
||||||
var wagon: Node3D = wagon_scene.instantiate() as Node3D
|
|
||||||
if wagon == null:
|
|
||||||
push_warning("Wagon scene root must be a Node3D.")
|
|
||||||
continue
|
|
||||||
|
|
||||||
add_child(wagon)
|
|
||||||
wagon_instances.append(wagon)
|
|
||||||
|
|
||||||
_update_wagon_progress_offsets()
|
|
||||||
_snap_wagons_to_progress()
|
|
||||||
|
|
||||||
func build_default_train() -> void:
|
func build_default_train() -> void:
|
||||||
train_instance = Node3D.new()
|
train_instance = Node3D.new()
|
||||||
add_child(train_instance)
|
add_child(train_instance)
|
||||||
@@ -501,114 +435,3 @@ func build_default_train() -> void:
|
|||||||
stack.material_override = mat_body
|
stack.material_override = mat_body
|
||||||
stack.position = Vector3(0, 1.2, 1.0)
|
stack.position = Vector3(0, 1.2, 1.0)
|
||||||
train_instance.add_child(stack)
|
train_instance.add_child(stack)
|
||||||
|
|
||||||
func _clear_train_wagons() -> void:
|
|
||||||
for wagon in wagon_instances:
|
|
||||||
if is_instance_valid(wagon):
|
|
||||||
wagon.queue_free()
|
|
||||||
wagon_instances.clear()
|
|
||||||
wagon_progress_offsets.clear()
|
|
||||||
|
|
||||||
func _update_wagon_progress_offsets() -> void:
|
|
||||||
wagon_progress_offsets.clear()
|
|
||||||
if train_instance == null or wagon_instances.is_empty():
|
|
||||||
return
|
|
||||||
|
|
||||||
var train_length: float = _get_vehicle_length(train_instance)
|
|
||||||
var previous_length: float = train_length
|
|
||||||
var accumulated_distance: float = 0.0
|
|
||||||
|
|
||||||
for wagon in wagon_instances:
|
|
||||||
var wagon_length: float = _get_vehicle_length(wagon)
|
|
||||||
if wagon_spacing_override > 0.0:
|
|
||||||
accumulated_distance += wagon_spacing_override + wagon_gap
|
|
||||||
else:
|
|
||||||
var detected_spacing: float = previous_length * 0.5 + wagon_length * 0.5
|
|
||||||
accumulated_distance += detected_spacing * wagon_spacing_scale + wagon_gap
|
|
||||||
|
|
||||||
wagon_progress_offsets.append(accumulated_distance)
|
|
||||||
previous_length = wagon_length
|
|
||||||
|
|
||||||
func _snap_wagons_to_progress(total_length: float = 0.0) -> void:
|
|
||||||
if curve == null or wagon_instances.is_empty():
|
|
||||||
return
|
|
||||||
|
|
||||||
if total_length <= 0.0:
|
|
||||||
total_length = curve.get_baked_length()
|
|
||||||
if total_length <= 0.0:
|
|
||||||
return
|
|
||||||
|
|
||||||
var direction: float = 1.0
|
|
||||||
if train_speed < 0.0:
|
|
||||||
direction = -1.0
|
|
||||||
|
|
||||||
for i in range(wagon_instances.size()):
|
|
||||||
var wagon: Node3D = wagon_instances[i]
|
|
||||||
if not is_instance_valid(wagon):
|
|
||||||
continue
|
|
||||||
|
|
||||||
var wagon_offset: float = float(i + 1) * 7.0
|
|
||||||
if i < wagon_progress_offsets.size():
|
|
||||||
wagon_offset = wagon_progress_offsets[i]
|
|
||||||
|
|
||||||
var wagon_progress: float = train_progress - direction * wagon_offset
|
|
||||||
|
|
||||||
var vehicle_progress: float = wrapf(wagon_progress, 0.0, total_length)
|
|
||||||
var center_position: Vector3 = to_global(curve.sample_baked(vehicle_progress, true))
|
|
||||||
var prog_forward: float = wrapf(vehicle_progress + 2.0, 0.0, total_length)
|
|
||||||
var forward_position: Vector3 = to_global(curve.sample_baked(prog_forward, true))
|
|
||||||
|
|
||||||
wagon.global_position = center_position
|
|
||||||
if center_position.distance_to(forward_position) > 0.01:
|
|
||||||
wagon.look_at(forward_position, Vector3.UP)
|
|
||||||
wagon.rotate_y(PI)
|
|
||||||
|
|
||||||
func _get_vehicle_length(vehicle: Node3D) -> float:
|
|
||||||
var bounds: AABB = _get_node_local_bounds(vehicle, vehicle)
|
|
||||||
if bounds.size == Vector3.ZERO:
|
|
||||||
return 7.0
|
|
||||||
|
|
||||||
return maxf(bounds.size.z, 0.1)
|
|
||||||
|
|
||||||
func _get_node_local_bounds(root: Node3D, node: Node) -> AABB:
|
|
||||||
var result: AABB = AABB()
|
|
||||||
var has_bounds: bool = false
|
|
||||||
|
|
||||||
var mesh_instance := node as MeshInstance3D
|
|
||||||
if mesh_instance != null and mesh_instance.mesh != null:
|
|
||||||
var mesh_bounds: AABB = mesh_instance.get_aabb()
|
|
||||||
var mesh_transform: Transform3D = root.global_transform.affine_inverse() * mesh_instance.global_transform
|
|
||||||
for corner in _get_aabb_corners(mesh_bounds):
|
|
||||||
var local_point: Vector3 = mesh_transform * corner
|
|
||||||
if has_bounds:
|
|
||||||
result = result.expand(local_point)
|
|
||||||
else:
|
|
||||||
result = AABB(local_point, Vector3.ZERO)
|
|
||||||
has_bounds = true
|
|
||||||
|
|
||||||
for child in node.get_children():
|
|
||||||
var child_bounds: AABB = _get_node_local_bounds(root, child)
|
|
||||||
if child_bounds.size == Vector3.ZERO:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if has_bounds:
|
|
||||||
result = result.merge(child_bounds)
|
|
||||||
else:
|
|
||||||
result = child_bounds
|
|
||||||
has_bounds = true
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
func _get_aabb_corners(bounds: AABB) -> Array[Vector3]:
|
|
||||||
var start: Vector3 = bounds.position
|
|
||||||
var end: Vector3 = bounds.end
|
|
||||||
return [
|
|
||||||
Vector3(start.x, start.y, start.z),
|
|
||||||
Vector3(end.x, start.y, start.z),
|
|
||||||
Vector3(start.x, end.y, start.z),
|
|
||||||
Vector3(end.x, end.y, start.z),
|
|
||||||
Vector3(start.x, start.y, end.z),
|
|
||||||
Vector3(end.x, start.y, end.z),
|
|
||||||
Vector3(start.x, end.y, end.z),
|
|
||||||
Vector3(end.x, end.y, end.z),
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
extends Resource
|
|
||||||
class_name RailwayPool
|
|
||||||
|
|
||||||
@export var name: String = "New Railway Pool"
|
|
||||||
@export var available_railways: Array[PackedScene] = []
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://c374rv220mvh1
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
[gd_resource type="Resource" script_class="RailwayPool" format=3 uid="uid://nrm040srfjwo"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cl2ast2tk7ifw" path="res://tgcc/chunk/railway/scene/chunk_railway_curve.tscn" id="1_86h1y"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cewdxvcpqb53f" path="res://tgcc/chunk/railway/scene/chunk_railway_station_doubleside.tscn" id="3_3auto"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://d3pcshw2bioic" path="res://tgcc/chunk/railway/scene/chunk_railway_station_oneside.tscn" id="4_i1umq"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bqxpqhla2kogq" path="res://tgcc/chunk/railway/scene/chunk_railway_straight.tscn" id="5_x44at"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://c3ub6rj0tlt6q" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_2.tscn" id="6_vrrkw"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cqevecsd1cm1v" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_3.tscn" id="7_l17bw"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://f53hfrjaxkwa" path="res://tgcc/chunk/railway/scene/chunk_railway_straight_bridge.tscn" id="8_qcl5o"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://fi6faw7ag1i0" path="res://tgcc/chunk/railway/scene/chunk_railway_curve_3.tscn" id="8_r0882"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dglpoh63x2lpy" path="res://tgcc/chunk/railway/scene/chunk_railway_curve_4.tscn" id="9_3auto"]
|
|
||||||
[ext_resource type="Script" uid="uid://c374rv220mvh1" path="res://core/biome_generator/railway_pool.gd" id="9_8tdc7"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bup6gwlxos0w2" path="res://tgcc/chunk/railway/hero/chunk_railway_station_hero.tscn" id="10_3auto"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
script = ExtResource("9_8tdc7")
|
|
||||||
name = "Railway Pool"
|
|
||||||
available_railways = Array[PackedScene]([ExtResource("1_86h1y"), ExtResource("3_3auto"), ExtResource("4_i1umq"), ExtResource("5_x44at"), ExtResource("6_vrrkw"), ExtResource("7_l17bw"), ExtResource("8_qcl5o"), ExtResource("8_r0882"), ExtResource("9_3auto"), ExtResource("10_3auto")])
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
## Resource that lists the wagon scenes available for train composition.
|
|
||||||
class_name WagonPool
|
|
||||||
extends Resource
|
|
||||||
|
|
||||||
@export var name: String = "New Wagon Pool"
|
|
||||||
@export var available_wagons: Array[PackedScene] = []
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://c3bgupfogjvv2
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="Resource" script_class="WagonPool" format=3 uid="uid://bjnytgwt8tmf4"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bny4kv08j8j40" path="res://tgcc/train/wagon.tscn" id="1_t6q5r"]
|
|
||||||
[ext_resource type="Script" uid="uid://c3bgupfogjvv2" path="res://core/biome_generator/wagon_pool.gd" id="2_x6bmc"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
script = ExtResource("2_x6bmc")
|
|
||||||
name = "Wagon Pool"
|
|
||||||
available_wagons = Array[PackedScene]([ExtResource("1_t6q5r")])
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
[gd_resource type="NoiseTexture2D" format=3 uid="uid://b2xcpt2y8v32x"]
|
|
||||||
|
|
||||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_oqwsk"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
noise = SubResource("FastNoiseLite_oqwsk")
|
|
||||||
seamless = true
|
|
||||||
@@ -9,7 +9,6 @@
|
|||||||
[ext_resource type="Material" uid="uid://codq5gx71rj4o" path="res://core/daynight/environment_dust_material.tres" id="8_amaf0"]
|
[ext_resource type="Material" uid="uid://codq5gx71rj4o" path="res://core/daynight/environment_dust_material.tres" id="8_amaf0"]
|
||||||
[ext_resource type="Shader" uid="uid://bkn6eqgbn37jx" path="res://core/daynight/blur.gdshader" id="9_amaf0"]
|
[ext_resource type="Shader" uid="uid://bkn6eqgbn37jx" path="res://core/daynight/blur.gdshader" id="9_amaf0"]
|
||||||
[ext_resource type="Shader" uid="uid://b5wa82soyhsqm" path="res://core/daynight/environment_shadows.gdshader" id="10_tuauy"]
|
[ext_resource type="Shader" uid="uid://b5wa82soyhsqm" path="res://core/daynight/environment_shadows.gdshader" id="10_tuauy"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b2xcpt2y8v32x" path="res://core/daynight/FogNoise.tres" id="11_tuauy"]
|
|
||||||
[ext_resource type="FastNoiseLite" uid="uid://c0mtwrkptjcuw" path="res://core/daynight/environment_shadows_noise_clouds.tres" id="11_yn8v8"]
|
[ext_resource type="FastNoiseLite" uid="uid://c0mtwrkptjcuw" path="res://core/daynight/environment_shadows_noise_clouds.tres" id="11_yn8v8"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ruhh7"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ruhh7"]
|
||||||
@@ -32,7 +31,6 @@ render_priority = 0
|
|||||||
shader = ExtResource("2_r4tfj")
|
shader = ExtResource("2_r4tfj")
|
||||||
shader_parameter/use_red_as_alpha = true
|
shader_parameter/use_red_as_alpha = true
|
||||||
shader_parameter/fog_color = Color(0.8, 0.85, 0.9, 0.5)
|
shader_parameter/fog_color = Color(0.8, 0.85, 0.9, 0.5)
|
||||||
shader_parameter/fog_density = 0.25
|
|
||||||
shader_parameter/scroll_speed = Vector2(0.05, 0.01)
|
shader_parameter/scroll_speed = Vector2(0.05, 0.01)
|
||||||
shader_parameter/texture_scale = Vector2(1, 1)
|
shader_parameter/texture_scale = Vector2(1, 1)
|
||||||
shader_parameter/edge_softness_y = 0.2
|
shader_parameter/edge_softness_y = 0.2
|
||||||
@@ -67,13 +65,12 @@ grad_intensity_morning = 0.05
|
|||||||
grad_intensity_afternoon = 0.1
|
grad_intensity_afternoon = 0.1
|
||||||
grad_intensity_night = 0.5
|
grad_intensity_night = 0.5
|
||||||
fog_color_morning = Color(0.7490196, 0.8509804, 0.9490196, 1)
|
fog_color_morning = Color(0.7490196, 0.8509804, 0.9490196, 1)
|
||||||
fog_color_afternoon = Color(0.9823975, 0.8034449, 0.8778439, 1)
|
fog_color_afternoon = Color(0.9647059, 0.5882353, 0.7607843, 1)
|
||||||
fog_color_night = Color(0.38409987, 0.28720453, 0.5907528, 1)
|
fog_color_night = Color(0.14901961, 0.101960786, 0.2509804, 1)
|
||||||
fog_density_morning = 0.01
|
fog_density_morning = 0.01
|
||||||
fog_density_afternoon = 0.02
|
fog_density_afternoon = 0.02
|
||||||
glow_morning = 0.4
|
glow_morning = 0.4
|
||||||
glow_night = 0.8
|
glow_night = 0.6
|
||||||
enable_fog = true
|
|
||||||
material_fog = SubResource("ShaderMaterial_b5atu")
|
material_fog = SubResource("ShaderMaterial_b5atu")
|
||||||
material_drops = SubResource("StandardMaterial3D_r4tfj")
|
material_drops = SubResource("StandardMaterial3D_r4tfj")
|
||||||
material_clouds = SubResource("ShaderMaterial_ruhh7")
|
material_clouds = SubResource("ShaderMaterial_ruhh7")
|
||||||
@@ -82,7 +79,7 @@ lightning_min = 2
|
|||||||
lightning_max = 4
|
lightning_max = 4
|
||||||
lightning_scale_min = 2.0
|
lightning_scale_min = 2.0
|
||||||
lightning_scale_max = 5.0
|
lightning_scale_max = 5.0
|
||||||
godray_max_rain = 30
|
godray_max_rain = 60
|
||||||
godray_spawn_radius = 100.0
|
godray_spawn_radius = 100.0
|
||||||
godray_spawn_offset = Vector3(20, 80, 20)
|
godray_spawn_offset = Vector3(20, 80, 20)
|
||||||
godray_rotation_degrees = Vector3(50, 30, 0)
|
godray_rotation_degrees = Vector3(50, 30, 0)
|
||||||
@@ -92,9 +89,6 @@ wind_amount = 50
|
|||||||
cloud_speed = 0.01
|
cloud_speed = 0.01
|
||||||
fireflies_amount = 550
|
fireflies_amount = 550
|
||||||
fireflies_spawn_ray = 60.0
|
fireflies_spawn_ray = 60.0
|
||||||
water_color_morning = Color(0.33333334, 0.654902, 0.5294118, 1)
|
|
||||||
water_color_afternoon = Color(0.5803922, 0.5137255, 0.2901961, 1)
|
|
||||||
water_color_night = Color(0.48235294, 0.45490196, 0.69411767, 1)
|
|
||||||
metadata/_custom_type_script = "uid://butda6k2tli3o"
|
metadata/_custom_type_script = "uid://butda6k2tli3o"
|
||||||
|
|
||||||
[sub_resource type="Gradient" id="Gradient_i3hjl"]
|
[sub_resource type="Gradient" id="Gradient_i3hjl"]
|
||||||
@@ -254,24 +248,7 @@ shader_parameter/fade_end = 800.000035625
|
|||||||
shader_parameter/height_fade_start = 10.0
|
shader_parameter/height_fade_start = 10.0
|
||||||
shader_parameter/height_fade_end = 50.0
|
shader_parameter/height_fade_end = 50.0
|
||||||
|
|
||||||
[sub_resource type="QuadMesh" id="QuadMesh_yn8v8"]
|
[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "environment_dust", "blur", "environment_shadows")]
|
||||||
size = Vector2(2, 2)
|
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_sxgg7"]
|
|
||||||
render_priority = 2
|
|
||||||
shader = ExtResource("2_r4tfj")
|
|
||||||
shader_parameter/fog_noise = ExtResource("11_tuauy")
|
|
||||||
shader_parameter/use_red_as_alpha = true
|
|
||||||
shader_parameter/fog_color = Color(0.8, 0.8509804, 0.9019608, 0.2509804)
|
|
||||||
shader_parameter/fog_density = 0.25
|
|
||||||
shader_parameter/scroll_speed = Vector2(0, 0.01)
|
|
||||||
shader_parameter/texture_scale = Vector2(1, 1)
|
|
||||||
shader_parameter/edge_softness_y = 0.16400000779
|
|
||||||
shader_parameter/edge_softness_x = 0.5
|
|
||||||
shader_parameter/night_intensity = 0.0
|
|
||||||
shader_parameter/sun_color = Color(1, 1, 1, 1)
|
|
||||||
|
|
||||||
[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "environment_dust", "blur", "environment_shadows", "fog")]
|
|
||||||
script = ExtResource("1_wecen")
|
script = ExtResource("1_wecen")
|
||||||
environment_config = SubResource("Resource_r4tfj")
|
environment_config = SubResource("Resource_r4tfj")
|
||||||
particles_wind = NodePath("Particles_Wind")
|
particles_wind = NodePath("Particles_Wind")
|
||||||
@@ -282,7 +259,6 @@ godray = ExtResource("5_411rw")
|
|||||||
environment_dust = NodePath("EnvironmentDust")
|
environment_dust = NodePath("EnvironmentDust")
|
||||||
blur = NodePath("Blur")
|
blur = NodePath("Blur")
|
||||||
environment_shadows = NodePath("EnvironmentCloudsShadows")
|
environment_shadows = NodePath("EnvironmentCloudsShadows")
|
||||||
fog = NodePath("Fog")
|
|
||||||
|
|
||||||
[node name="Particles_Fireflies" type="GPUParticles3D" parent="." unique_id=947538133]
|
[node name="Particles_Fireflies" type="GPUParticles3D" parent="." unique_id=947538133]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||||
@@ -295,7 +271,6 @@ draw_pass_1 = SubResource("QuadMesh_b5atu")
|
|||||||
[node name="Particles_Wind" type="GPUParticles3D" parent="." unique_id=1238214694]
|
[node name="Particles_Wind" type="GPUParticles3D" parent="." unique_id=1238214694]
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 50, 0)
|
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 50, 0)
|
||||||
cast_shadow = 0
|
cast_shadow = 0
|
||||||
emitting = false
|
|
||||||
amount = 25
|
amount = 25
|
||||||
lifetime = 3.0
|
lifetime = 3.0
|
||||||
fixed_fps = 60
|
fixed_fps = 60
|
||||||
@@ -343,15 +318,3 @@ mouse_filter = 2
|
|||||||
extra_cull_margin = 16384.0
|
extra_cull_margin = 16384.0
|
||||||
mesh = SubResource("QuadMesh_sxgg7")
|
mesh = SubResource("QuadMesh_sxgg7")
|
||||||
surface_material_override/0 = SubResource("ShaderMaterial_oqt1s")
|
surface_material_override/0 = SubResource("ShaderMaterial_oqt1s")
|
||||||
|
|
||||||
[node name="Fog" type="Node3D" parent="." unique_id=1626352238]
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Fog" unique_id=96635311]
|
|
||||||
transform = Transform3D(-42.075005, 7.553328e-06, 1.7196172e-13, 0, -3.7766642e-06, 45, 3.6783138e-06, 86.4, 1.9670128e-06, -41.926987, 14, 0)
|
|
||||||
mesh = SubResource("QuadMesh_yn8v8")
|
|
||||||
surface_material_override/0 = SubResource("ShaderMaterial_sxgg7")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Fog" unique_id=10121049]
|
|
||||||
transform = Transform3D(-42.075005, 7.553328e-06, 1.7196172e-13, 0, -3.7766642e-06, 45, 3.6783138e-06, 86.4, 1.9670128e-06, 59.320038, 14, 0)
|
|
||||||
mesh = SubResource("QuadMesh_yn8v8")
|
|
||||||
surface_material_override/0 = SubResource("ShaderMaterial_sxgg7")
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ extends Node3D
|
|||||||
|
|
||||||
const NOISE_TEXTURE: Texture2D = preload("res://core/daynight/noise.tres")
|
const NOISE_TEXTURE: Texture2D = preload("res://core/daynight/noise.tres")
|
||||||
const WEATHER_SHADER: Material = preload("res://core/daynight/weather_overlay.tres")
|
const WEATHER_SHADER: Material = preload("res://core/daynight/weather_overlay.tres")
|
||||||
const DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME: int = 2 #how many update of the environment (apply materials) will be done per frame
|
const WEATHER_PLAIN_SHADER: Material = preload("res://core/daynight/weather_plain_shader.tres")
|
||||||
|
|
||||||
@export var environment_config: EnvironmentConfig
|
@export var environment_config: EnvironmentConfig
|
||||||
|
|
||||||
@@ -20,7 +20,6 @@ const DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME: int = 2 #how many update of the env
|
|||||||
@export var environment_dust: ColorRect
|
@export var environment_dust: ColorRect
|
||||||
@export var blur: ColorRect
|
@export var blur: ColorRect
|
||||||
@export var environment_shadows: MeshInstance3D
|
@export var environment_shadows: MeshInstance3D
|
||||||
@export var fog: Node3D
|
|
||||||
|
|
||||||
@export_group("Sound")
|
@export_group("Sound")
|
||||||
@export var thunder_sounds: Array[AudioStream]
|
@export var thunder_sounds: Array[AudioStream]
|
||||||
@@ -35,7 +34,6 @@ var weather_controller: WeatherController
|
|||||||
|
|
||||||
var day_tween: Tween
|
var day_tween: Tween
|
||||||
var day_time: float = 0.0
|
var day_time: float = 0.0
|
||||||
var pending_environment_nodes: Dictionary = {}
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
|
||||||
@@ -64,7 +62,6 @@ func _ready() -> void:
|
|||||||
godray,
|
godray,
|
||||||
environment_dust,
|
environment_dust,
|
||||||
blur,
|
blur,
|
||||||
fog,
|
|
||||||
environment_shadows,
|
environment_shadows,
|
||||||
sun,
|
sun,
|
||||||
environment,
|
environment,
|
||||||
@@ -77,50 +74,9 @@ func _ready() -> void:
|
|||||||
weather_controller.name = "WeatherController"
|
weather_controller.name = "WeatherController"
|
||||||
add_child(weather_controller)
|
add_child(weather_controller)
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
|
||||||
_process_pending_environment_nodes()
|
|
||||||
|
|
||||||
func _on_tree_node_added(node: Node) -> void:
|
func _on_tree_node_added(node: Node) -> void:
|
||||||
if node.is_in_group("wind_node") or node.is_in_group("weather_node") or node.is_in_group("weather_vegetables_node"):
|
if node.is_in_group("wind_node") or node.is_in_group("weather_node") or node.is_in_group("weather_vegetables_node"):
|
||||||
_queue_dynamic_environment_node(node)
|
call_deferred("_apply_dynamic_environment_materials", node)
|
||||||
|
|
||||||
func _queue_dynamic_environment_node(node: Node) -> void:
|
|
||||||
if not is_instance_valid(node):
|
|
||||||
return
|
|
||||||
|
|
||||||
var ancestor = node.get_parent()
|
|
||||||
while ancestor != null:
|
|
||||||
if pending_environment_nodes.has(ancestor.get_instance_id()):
|
|
||||||
return
|
|
||||||
ancestor = ancestor.get_parent()
|
|
||||||
|
|
||||||
var stale_ids: Array[int] = []
|
|
||||||
for node_id in pending_environment_nodes.keys():
|
|
||||||
var pending_node = pending_environment_nodes[node_id]
|
|
||||||
if not is_instance_valid(pending_node):
|
|
||||||
stale_ids.append(node_id)
|
|
||||||
continue
|
|
||||||
if node.is_ancestor_of(pending_node):
|
|
||||||
stale_ids.append(node_id)
|
|
||||||
|
|
||||||
for node_id in stale_ids:
|
|
||||||
pending_environment_nodes.erase(node_id)
|
|
||||||
|
|
||||||
pending_environment_nodes[node.get_instance_id()] = node
|
|
||||||
|
|
||||||
func _process_pending_environment_nodes() -> void:
|
|
||||||
var processed = 0
|
|
||||||
for node_id in pending_environment_nodes.keys():
|
|
||||||
if processed >= DYNAMIC_ENVIRONMENT_UPDATES_PER_FRAME:
|
|
||||||
break
|
|
||||||
|
|
||||||
var node = pending_environment_nodes[node_id]
|
|
||||||
pending_environment_nodes.erase(node_id)
|
|
||||||
if not is_instance_valid(node):
|
|
||||||
continue
|
|
||||||
|
|
||||||
_apply_dynamic_environment_materials(node)
|
|
||||||
processed += 1
|
|
||||||
|
|
||||||
func _apply_dynamic_environment_materials(node: Node) -> void:
|
func _apply_dynamic_environment_materials(node: Node) -> void:
|
||||||
if not is_instance_valid(node):
|
if not is_instance_valid(node):
|
||||||
@@ -133,7 +89,7 @@ func _apply_dynamic_environment_materials(node: Node) -> void:
|
|||||||
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
|
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
|
||||||
|
|
||||||
if node.is_in_group("weather_vegetables_node"):
|
if node.is_in_group("weather_vegetables_node"):
|
||||||
_clear_weather_overlay_from_node(node)
|
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
|
||||||
|
|
||||||
func ApplyWindNoiseToMaterials():
|
func ApplyWindNoiseToMaterials():
|
||||||
for node in get_tree().get_nodes_in_group("wind_node"):
|
for node in get_tree().get_nodes_in_group("wind_node"):
|
||||||
@@ -159,54 +115,15 @@ func ApplyWeatherShaderToMaterials():
|
|||||||
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
|
_apply_weather_overlay_to_node(node, WEATHER_SHADER)
|
||||||
|
|
||||||
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
|
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
|
||||||
_clear_weather_overlay_from_node(node)
|
_apply_weather_overlay_to_node(node, WEATHER_PLAIN_SHADER)
|
||||||
|
|
||||||
func _apply_weather_overlay_to_node(node: Node, material: Material) -> void:
|
func _apply_weather_overlay_to_node(node: Node, material: Material) -> void:
|
||||||
if node.is_in_group("weather_vegetables_node"):
|
|
||||||
_clear_weather_overlay_from_node(node)
|
|
||||||
return
|
|
||||||
|
|
||||||
if node is GeometryInstance3D:
|
if node is GeometryInstance3D:
|
||||||
if _geometry_uses_alpha_texture(node):
|
node.material_overlay = material
|
||||||
node.material_overlay = null
|
|
||||||
else:
|
|
||||||
node.material_overlay = material
|
|
||||||
|
|
||||||
for child in node.get_children():
|
for child in node.get_children():
|
||||||
_apply_weather_overlay_to_node(child, material)
|
_apply_weather_overlay_to_node(child, material)
|
||||||
|
|
||||||
func _clear_weather_overlay_from_node(node: Node) -> void:
|
|
||||||
if node is GeometryInstance3D:
|
|
||||||
node.material_overlay = null
|
|
||||||
|
|
||||||
for child in node.get_children():
|
|
||||||
_clear_weather_overlay_from_node(child)
|
|
||||||
|
|
||||||
func _geometry_uses_alpha_texture(node: GeometryInstance3D) -> bool:
|
|
||||||
var material_override := node.material_override as ShaderMaterial
|
|
||||||
if _shader_material_uses_alpha_texture(material_override):
|
|
||||||
return true
|
|
||||||
|
|
||||||
if node is MeshInstance3D:
|
|
||||||
for surface_index in node.get_surface_override_material_count():
|
|
||||||
var surface_material := node.get_surface_override_material(surface_index) as ShaderMaterial
|
|
||||||
if _shader_material_uses_alpha_texture(surface_material):
|
|
||||||
return true
|
|
||||||
|
|
||||||
if node.mesh:
|
|
||||||
for surface_index in node.mesh.get_surface_count():
|
|
||||||
var mesh_material := node.mesh.surface_get_material(surface_index) as ShaderMaterial
|
|
||||||
if _shader_material_uses_alpha_texture(mesh_material):
|
|
||||||
return true
|
|
||||||
|
|
||||||
return false
|
|
||||||
|
|
||||||
func _shader_material_uses_alpha_texture(material: ShaderMaterial) -> bool:
|
|
||||||
if material == null or material.shader == null:
|
|
||||||
return false
|
|
||||||
|
|
||||||
return material.shader.code.find("alpha_texture") != -1
|
|
||||||
|
|
||||||
func select_day_time(normalized_time: float) -> void:
|
func select_day_time(normalized_time: float) -> void:
|
||||||
#set show_day_time_debug = true to show debug on screen
|
#set show_day_time_debug = true to show debug on screen
|
||||||
#normalized_time is a value between 0 and 1; the time of the day is calculate as "normalized_time" * 1440; day_time is the step to pass from sunrise, to day, to sunset, to night
|
#normalized_time is a value between 0 and 1; the time of the day is calculate as "normalized_time" * 1440; day_time is the step to pass from sunrise, to day, to sunset, to night
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ void fragment() {
|
|||||||
float is_center = step(center_sharpness, internal_n);
|
float is_center = step(center_sharpness, internal_n);
|
||||||
|
|
||||||
ALBEDO = shadow_color;
|
ALBEDO = shadow_color;
|
||||||
|
|
||||||
ALPHA = mix(opacity_edge, opacity_center, is_center) * final_fade;
|
ALPHA = mix(opacity_edge, opacity_center, is_center) * final_fade;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ uniform bool use_red_as_alpha = true;
|
|||||||
|
|
||||||
group_uniforms Settings;
|
group_uniforms Settings;
|
||||||
uniform vec4 fog_color : source_color = vec4(0.8, 0.85, 0.9, 0.5);
|
uniform vec4 fog_color : source_color = vec4(0.8, 0.85, 0.9, 0.5);
|
||||||
uniform float fog_density : hint_range(0.0, 1.0) = 0.25;
|
|
||||||
uniform vec2 scroll_speed = vec2(0.05, 0.01);
|
uniform vec2 scroll_speed = vec2(0.05, 0.01);
|
||||||
uniform vec2 texture_scale = vec2(1.0, 1.0);
|
uniform vec2 texture_scale = vec2(1.0, 1.0);
|
||||||
|
|
||||||
@@ -37,5 +36,5 @@ void fragment() {
|
|||||||
vec3 dark_fog = tinted_fog * 0.5;
|
vec3 dark_fog = tinted_fog * 0.5;
|
||||||
ALBEDO = mix(tinted_fog, dark_fog, night_intensity);
|
ALBEDO = mix(tinted_fog, dark_fog, night_intensity);
|
||||||
|
|
||||||
ALPHA = fog_color.a * fog_density * noise_alpha * edge_mask;
|
ALPHA = fog_color.a * noise_alpha * edge_mask;
|
||||||
}
|
}
|
||||||
@@ -8,12 +8,10 @@ global uniform float global_wind_speed;
|
|||||||
global uniform float global_wind_strength;
|
global uniform float global_wind_strength;
|
||||||
global uniform vec2 global_wind_direction;
|
global uniform vec2 global_wind_direction;
|
||||||
//global uniform sampler2D global_wind_noise : filter_linear_mipmap;
|
//global uniform sampler2D global_wind_noise : filter_linear_mipmap;
|
||||||
global uniform float global_snow_start_time = -1.0;
|
global uniform float global_snow_start_time;
|
||||||
global uniform float global_snow_accumulation_speed = 0.005;
|
global uniform float global_snow_accumulation_speed;
|
||||||
global uniform float global_snow_melt_time = -1.0;
|
global uniform float global_snow_melt_time;
|
||||||
global uniform float global_snow_melt_speed = 0.1;
|
global uniform float global_snow_melt_speed;
|
||||||
global uniform float global_snow_amount = 0.0;
|
|
||||||
global uniform float global_rain_intensity;
|
|
||||||
|
|
||||||
// --- PARAMETRI ESTETICI ---
|
// --- PARAMETRI ESTETICI ---
|
||||||
uniform bool billboard_enabled = true;
|
uniform bool billboard_enabled = true;
|
||||||
@@ -33,7 +31,6 @@ uniform vec4 variance_color : source_color = vec4(0.3, 0.5, 0.2, 1.0); // Colore
|
|||||||
uniform float variance_intensity : hint_range(0.0, 1.0) = 0.4; // Quanto si vedono le chiazze
|
uniform float variance_intensity : hint_range(0.0, 1.0) = 0.4; // Quanto si vedono le chiazze
|
||||||
|
|
||||||
uniform vec4 snow_color : source_color = vec4(0.85, 0.9, 0.95, 1.0);
|
uniform vec4 snow_color : source_color = vec4(0.85, 0.9, 0.95, 1.0);
|
||||||
uniform float snow_visibility : hint_range(0.0, 1.0) = 1.0;
|
|
||||||
|
|
||||||
// --- CONTROLLO GRADIENTE E RANDOM ---
|
// --- CONTROLLO GRADIENTE E RANDOM ---
|
||||||
uniform float height_min = 0.0;
|
uniform float height_min = 0.0;
|
||||||
@@ -44,7 +41,6 @@ uniform float light_steps : hint_range(1.0, 10.0) = 4.0;
|
|||||||
uniform float random_mix : hint_range(0.0, 1.0) = 0.3;
|
uniform float random_mix : hint_range(0.0, 1.0) = 0.3;
|
||||||
|
|
||||||
uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6;
|
uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6;
|
||||||
uniform float wetness_darkening : hint_range(0.0, 0.5) = 0.25;
|
|
||||||
|
|
||||||
varying vec3 v_final_color;
|
varying vec3 v_final_color;
|
||||||
varying float v_shade_factor;
|
varying float v_shade_factor;
|
||||||
@@ -56,21 +52,6 @@ float hash(vec3 p) {
|
|||||||
return fract((p.x + p.y) * p.z);
|
return fract((p.x + p.y) * p.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
float get_snow_progress() {
|
|
||||||
float snow_progress = clamp(global_snow_amount, 0.0, 1.0);
|
|
||||||
|
|
||||||
if (global_snow_start_time >= 0.0) {
|
|
||||||
float timed_progress = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
|
|
||||||
snow_progress = max(snow_progress, timed_progress);
|
|
||||||
}
|
|
||||||
if (global_snow_melt_time >= 0.0) {
|
|
||||||
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
|
|
||||||
snow_progress = min(snow_progress, 1.0 - melt);
|
|
||||||
}
|
|
||||||
|
|
||||||
return snow_progress;
|
|
||||||
}
|
|
||||||
|
|
||||||
void vertex() {
|
void vertex() {
|
||||||
vec3 instance_pos = MODEL_MATRIX[3].xyz;
|
vec3 instance_pos = MODEL_MATRIX[3].xyz;
|
||||||
v_world_pos = instance_pos; // Salviamo la posizione dell'istanza
|
v_world_pos = instance_pos; // Salviamo la posizione dell'istanza
|
||||||
@@ -132,10 +113,17 @@ void fragment() {
|
|||||||
// Applichiamo la variazione al colore finale dell'erba
|
// Applichiamo la variazione al colore finale dell'erba
|
||||||
vec3 varied_grass_color = mix(v_final_color, variance_color.rgb, noise_sample * variance_intensity);
|
vec3 varied_grass_color = mix(v_final_color, variance_color.rgb, noise_sample * variance_intensity);
|
||||||
|
|
||||||
float snow_amount = smoothstep(0.0, 1.0, get_snow_progress());
|
float snow_amount = 0.0;
|
||||||
|
if (global_snow_start_time >= 0.0) {
|
||||||
|
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
if (global_snow_melt_time >= 0.0) {
|
||||||
|
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
|
||||||
|
snow_amount *= (1.0 - melt);
|
||||||
|
}
|
||||||
|
|
||||||
float top_mask = 1.0 - shifted_uv.y;
|
float top_mask = 1.0 - shifted_uv.y;
|
||||||
float snow_mask = smoothstep(0.65, 1.0, top_mask) * snow_amount * snow_visibility;
|
float snow_mask = smoothstep(1.0 - snow_amount, 1.2 - snow_amount, top_mask);
|
||||||
snow_mask *= step(0.01, snow_amount);
|
snow_mask *= step(0.01, snow_amount);
|
||||||
|
|
||||||
vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity);
|
vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity);
|
||||||
@@ -143,15 +131,12 @@ void fragment() {
|
|||||||
|
|
||||||
// Mescoliamo il colore variato con la neve
|
// Mescoliamo il colore variato con la neve
|
||||||
vec3 final_albedo = mix(varied_grass_color, shaded_snow, snow_mask);
|
vec3 final_albedo = mix(varied_grass_color, shaded_snow, snow_mask);
|
||||||
float rain_int = clamp(global_rain_intensity, 0.0, 1.0);
|
|
||||||
final_albedo *= mix(1.0, 1.0 - wetness_darkening, rain_int);
|
|
||||||
float final_roughness = mix(0.02, 0.005, rain_int);
|
|
||||||
|
|
||||||
ALBEDO = final_albedo;
|
ALBEDO = final_albedo;
|
||||||
ALPHA = tex.r * opacity;
|
ALPHA = tex.r * opacity;
|
||||||
ALPHA_SCISSOR_THRESHOLD = 0.5;
|
ALPHA_SCISSOR_THRESHOLD = 0.5;
|
||||||
|
|
||||||
ROUGHNESS = final_roughness;
|
ROUGHNESS = 0.02;
|
||||||
}
|
}
|
||||||
|
|
||||||
void light() {
|
void light() {
|
||||||
|
|||||||
@@ -20,14 +20,17 @@ const SNOW_CAP_SHADER: Shader = preload("res://core/daynight/snow_cap.gdshader")
|
|||||||
|
|
||||||
var _mesh_instance: MeshInstance3D
|
var _mesh_instance: MeshInstance3D
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
add_to_group("weather_overlay_ignore")
|
add_to_group("weather_overlay_ignore")
|
||||||
_ensure_mesh_instance()
|
_ensure_mesh_instance()
|
||||||
_rebuild()
|
_rebuild()
|
||||||
|
|
||||||
|
|
||||||
func rebuild() -> void:
|
func rebuild() -> void:
|
||||||
_rebuild()
|
_rebuild()
|
||||||
|
|
||||||
|
|
||||||
func _ensure_mesh_instance() -> void:
|
func _ensure_mesh_instance() -> void:
|
||||||
_mesh_instance = get_node_or_null("SnowCapMesh") as MeshInstance3D
|
_mesh_instance = get_node_or_null("SnowCapMesh") as MeshInstance3D
|
||||||
if _mesh_instance != null:
|
if _mesh_instance != null:
|
||||||
@@ -38,6 +41,7 @@ func _ensure_mesh_instance() -> void:
|
|||||||
_mesh_instance.add_to_group("weather_overlay_ignore")
|
_mesh_instance.add_to_group("weather_overlay_ignore")
|
||||||
add_child(_mesh_instance)
|
add_child(_mesh_instance)
|
||||||
|
|
||||||
|
|
||||||
func _rebuild() -> void:
|
func _rebuild() -> void:
|
||||||
var cap_width: float = 0.0
|
var cap_width: float = 0.0
|
||||||
var cap_depth: float = 0.0
|
var cap_depth: float = 0.0
|
||||||
@@ -74,6 +78,7 @@ func _rebuild() -> void:
|
|||||||
_mesh_instance.material_override = _build_material(cap_width, cap_depth)
|
_mesh_instance.material_override = _build_material(cap_width, cap_depth)
|
||||||
_mesh_instance.visible = true
|
_mesh_instance.visible = true
|
||||||
|
|
||||||
|
|
||||||
func _build_material(cap_width: float, cap_depth: float) -> ShaderMaterial:
|
func _build_material(cap_width: float, cap_depth: float) -> ShaderMaterial:
|
||||||
var material := ShaderMaterial.new()
|
var material := ShaderMaterial.new()
|
||||||
material.shader = SNOW_CAP_SHADER
|
material.shader = SNOW_CAP_SHADER
|
||||||
@@ -82,6 +87,7 @@ func _build_material(cap_width: float, cap_depth: float) -> ShaderMaterial:
|
|||||||
material.set_shader_parameter("half_depth", cap_depth * 0.5)
|
material.set_shader_parameter("half_depth", cap_depth * 0.5)
|
||||||
return material
|
return material
|
||||||
|
|
||||||
|
|
||||||
func _get_target_aabb(target_mesh: MeshInstance3D) -> AABB:
|
func _get_target_aabb(target_mesh: MeshInstance3D) -> AABB:
|
||||||
var points: Array[Vector3] = []
|
var points: Array[Vector3] = []
|
||||||
for point in _get_aabb_points(target_mesh.get_aabb()):
|
for point in _get_aabb_points(target_mesh.get_aabb()):
|
||||||
@@ -92,6 +98,7 @@ func _get_target_aabb(target_mesh: MeshInstance3D) -> AABB:
|
|||||||
merged = merged.expand(point)
|
merged = merged.expand(point)
|
||||||
return merged
|
return merged
|
||||||
|
|
||||||
|
|
||||||
func _get_aabb_points(aabb: AABB) -> Array[Vector3]:
|
func _get_aabb_points(aabb: AABB) -> Array[Vector3]:
|
||||||
var p: Vector3 = aabb.position
|
var p: Vector3 = aabb.position
|
||||||
var s: Vector3 = aabb.size
|
var s: Vector3 = aabb.size
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user