generated from krampus/template-godot4
Beast look target
This commit is contained in:
parent
2061d0072b
commit
047a5557f4
@ -53,3 +53,19 @@ static func pick_unseen_from_group(group_name: String) -> Node3D:
|
|||||||
return target
|
return target
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
## Coerce a position from the given value
|
||||||
|
##
|
||||||
|
## Use this to handle Vector3 and Node3D generically e.g. in behaviors.
|
||||||
|
static func get_position(value: Variant) -> Vector3:
|
||||||
|
if value is Vector3:
|
||||||
|
@warning_ignore("unsafe_cast")
|
||||||
|
return value as Vector3
|
||||||
|
if value is Node3D and is_instance_valid(value):
|
||||||
|
@warning_ignore("unsafe_cast")
|
||||||
|
return (value as Node3D).global_position
|
||||||
|
if value is Vector3i:
|
||||||
|
@warning_ignore("unsafe_cast")
|
||||||
|
return Vector3(value as Vector3i)
|
||||||
|
return Vector3.ZERO
|
||||||
|
@ -12,6 +12,14 @@ func set_target_rotation(_theta: float) -> void:
|
|||||||
pass # Implemented in derived type
|
pass # Implemented in derived type
|
||||||
|
|
||||||
|
|
||||||
|
func set_look_target(_target: Vector3) -> void:
|
||||||
|
pass # Implemented in derived type
|
||||||
|
|
||||||
|
|
||||||
|
func unset_look_target() -> void:
|
||||||
|
pass # Implemented in derived type
|
||||||
|
|
||||||
|
|
||||||
func set_move_speed(_speed: float) -> void:
|
func set_move_speed(_speed: float) -> void:
|
||||||
pass # Implemented in derived type
|
pass # Implemented in derived type
|
||||||
|
|
||||||
|
@ -18,8 +18,10 @@ class_name GetRandomTarget extends ActionLeaf
|
|||||||
|
|
||||||
|
|
||||||
func tick(actor: Node, blackboard: Blackboard) -> int:
|
func tick(actor: Node, blackboard: Blackboard) -> int:
|
||||||
var center: Vector3 = blackboard.get_value(center_target_key, (actor as Node3D).global_position)
|
|
||||||
var beast := actor as GrunkBeast
|
var beast := actor as GrunkBeast
|
||||||
|
var center: Vector3 = beast.global_position
|
||||||
|
if blackboard.has_value(center_target_key):
|
||||||
|
center = SceneTools.get_position(blackboard.get_value(center_target_key))
|
||||||
|
|
||||||
var target := Vector3(
|
var target := Vector3(
|
||||||
randfn(center.x, st_dev.x), randfn(center.y, st_dev.y), randfn(center.z, st_dev.z)
|
randfn(center.x, st_dev.x), randfn(center.y, st_dev.y), randfn(center.z, st_dev.z)
|
||||||
|
@ -16,14 +16,9 @@ func tick(actor: Node, blackboard: Blackboard) -> int:
|
|||||||
if beast.traversing_link:
|
if beast.traversing_link:
|
||||||
return RUNNING
|
return RUNNING
|
||||||
|
|
||||||
var target: Variant = blackboard.get_value(blackboard_key)
|
if not blackboard.has_value(blackboard_key):
|
||||||
if target is Vector3:
|
|
||||||
@warning_ignore("unsafe_cast")
|
|
||||||
nav_agent.target_position = target as Vector3
|
|
||||||
elif target is Node3D and is_instance_valid(target):
|
|
||||||
@warning_ignore("unsafe_cast")
|
|
||||||
nav_agent.target_position = (target as Node3D).global_position
|
|
||||||
else:
|
|
||||||
return FAILURE
|
return FAILURE
|
||||||
|
|
||||||
|
nav_agent.target_position = SceneTools.get_position(blackboard.get_value(blackboard_key))
|
||||||
|
|
||||||
return SUCCESS if nav_agent.is_navigation_finished() else RUNNING
|
return SUCCESS if nav_agent.is_navigation_finished() else RUNNING
|
||||||
|
19
src/world/grunk_beast/behaviors/actions/set_look_target.gd
Normal file
19
src/world/grunk_beast/behaviors/actions/set_look_target.gd
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
@tool
|
||||||
|
class_name SetLookTarget extends ActionLeaf
|
||||||
|
## Set the look target of the given model to a point stored on the blackboard.
|
||||||
|
|
||||||
|
## Blackboard key to set as the model's look target
|
||||||
|
@export var blackboard_key := "target"
|
||||||
|
|
||||||
|
## Model controller whose look target should be set
|
||||||
|
@export var controller: BeastModel
|
||||||
|
|
||||||
|
|
||||||
|
func tick(_actor: Node, blackboard: Blackboard) -> int:
|
||||||
|
if not blackboard.has_value(blackboard_key):
|
||||||
|
return FAILURE
|
||||||
|
|
||||||
|
var target: Vector3 = SceneTools.get_position(blackboard.get_value(blackboard_key))
|
||||||
|
controller.set_look_target(target)
|
||||||
|
|
||||||
|
return SUCCESS
|
@ -0,0 +1 @@
|
|||||||
|
uid://bkp4xe18nfqj
|
@ -19,13 +19,8 @@ func tick(actor: Node, blackboard: Blackboard) -> int:
|
|||||||
if beast.traversing_link:
|
if beast.traversing_link:
|
||||||
return RUNNING
|
return RUNNING
|
||||||
|
|
||||||
var value: Variant = blackboard.get_value(blackboard_key)
|
if not blackboard.has_value(blackboard_key):
|
||||||
if value is Vector3:
|
|
||||||
@warning_ignore("unsafe_cast")
|
|
||||||
nav_agent.target_position = value as Vector3
|
|
||||||
elif value is Node3D and is_instance_valid(value):
|
|
||||||
@warning_ignore("unsafe_cast")
|
|
||||||
nav_agent.target_position = (value as Node3D).global_position
|
|
||||||
else:
|
|
||||||
return FAILURE
|
return FAILURE
|
||||||
|
|
||||||
|
nav_agent.target_position = SceneTools.get_position(blackboard.get_value(blackboard_key))
|
||||||
return SUCCESS
|
return SUCCESS
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
@tool
|
|
||||||
class_name SetPlayerNavTarget extends ActionLeaf
|
|
||||||
## Set the current nav target to the player's current position.
|
|
||||||
|
|
||||||
@onready var nav_agent: NavigationAgent3D = %NavAgent
|
|
||||||
|
|
||||||
|
|
||||||
func tick(_actor: Node, _blackboard: Blackboard) -> int:
|
|
||||||
if Player.instance:
|
|
||||||
nav_agent.target_position = Player.instance.global_position
|
|
||||||
return SUCCESS
|
|
||||||
return FAILURE
|
|
@ -1 +0,0 @@
|
|||||||
uid://cx8cifdmdrlpe
|
|
@ -1,21 +0,0 @@
|
|||||||
@tool
|
|
||||||
class_name SetTargetPositionFromArea extends ActionLeaf
|
|
||||||
## Store the global position of the first node in the given area on the blackboard.
|
|
||||||
##
|
|
||||||
## Returns FAILURE if there is no such node overlapping the given area.
|
|
||||||
## NOTE: You probably should only use this with areas masked to only have one possible body.
|
|
||||||
|
|
||||||
## Key to store the target under.
|
|
||||||
@export var blackboard_key := "target"
|
|
||||||
|
|
||||||
## Area to get target from.
|
|
||||||
@export var area: Area3D
|
|
||||||
|
|
||||||
|
|
||||||
func tick(_actor: Node, blackboard: Blackboard) -> int:
|
|
||||||
var bodies := area.get_overlapping_bodies()
|
|
||||||
if not bodies or bodies[0] is not Node3D:
|
|
||||||
return FAILURE
|
|
||||||
|
|
||||||
blackboard.set_value(blackboard_key, (bodies[0] as Node3D).global_position)
|
|
||||||
return SUCCESS
|
|
@ -1 +0,0 @@
|
|||||||
uid://dj7a2tj4cqap2
|
|
12
src/world/grunk_beast/behaviors/actions/unset_look_target.gd
Normal file
12
src/world/grunk_beast/behaviors/actions/unset_look_target.gd
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
@tool
|
||||||
|
class_name UnsetLookTarget extends ActionLeaf
|
||||||
|
## Unset the look target of the given model controller.
|
||||||
|
|
||||||
|
## Model controller whose look target should be unset
|
||||||
|
@export var controller: BeastModel
|
||||||
|
|
||||||
|
|
||||||
|
func tick(_actor: Node, _blackboard: Blackboard) -> int:
|
||||||
|
controller.unset_look_target()
|
||||||
|
|
||||||
|
return SUCCESS
|
@ -0,0 +1 @@
|
|||||||
|
uid://bogt3htgqe12s
|
@ -1,18 +0,0 @@
|
|||||||
@tool
|
|
||||||
class_name UpdateStalkingTarget extends ActionLeaf
|
|
||||||
## Copy the pursuit target to the stalking target during pursuit.
|
|
||||||
|
|
||||||
const SOURCE_KEY := "pursuit_target"
|
|
||||||
const DEST_KEY := "stalking_target"
|
|
||||||
|
|
||||||
@onready var stalking_timer: Timer = %StalkingTimer
|
|
||||||
|
|
||||||
|
|
||||||
func tick(_actor: Node, blackboard: Blackboard) -> int:
|
|
||||||
@warning_ignore("unsafe_cast")
|
|
||||||
var target := blackboard.get_value(SOURCE_KEY) as Node3D
|
|
||||||
if not is_instance_valid(target):
|
|
||||||
return FAILURE
|
|
||||||
blackboard.set_value(DEST_KEY, target.global_position)
|
|
||||||
stalking_timer.start()
|
|
||||||
return SUCCESS
|
|
@ -1 +0,0 @@
|
|||||||
uid://yw2u7rlr0whk
|
|
@ -22,12 +22,12 @@ func _excluded_rids() -> Array[RID]:
|
|||||||
|
|
||||||
|
|
||||||
func tick(_actor: Node, blackboard: Blackboard) -> int:
|
func tick(_actor: Node, blackboard: Blackboard) -> int:
|
||||||
var target: Node3D = blackboard.get_value(blackboard_key)
|
if not blackboard.has_value(blackboard_key):
|
||||||
if not target:
|
|
||||||
return FAILURE
|
return FAILURE
|
||||||
|
var target: Vector3 = SceneTools.get_position(blackboard.get_value(blackboard_key))
|
||||||
var collisions := sight_origin.get_world_3d().direct_space_state.intersect_ray(
|
var collisions := sight_origin.get_world_3d().direct_space_state.intersect_ray(
|
||||||
PhysicsRayQueryParameters3D.create(
|
PhysicsRayQueryParameters3D.create(
|
||||||
sight_origin.global_position, target.global_position, collision_mask, _excluded_rids()
|
sight_origin.global_position, target, collision_mask, _excluded_rids()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -13,5 +13,5 @@ func tick(actor: Node, blackboard: Blackboard) -> int:
|
|||||||
var actor_3d: Node3D = actor
|
var actor_3d: Node3D = actor
|
||||||
if not blackboard.has_value(blackboard_key):
|
if not blackboard.has_value(blackboard_key):
|
||||||
return FAILURE
|
return FAILURE
|
||||||
var target: Vector3 = blackboard.get_value(blackboard_key)
|
var target: Vector3 = SceneTools.get_position(blackboard.get_value(blackboard_key))
|
||||||
return SUCCESS if target.distance_to(actor_3d.global_position) <= max_range else FAILURE
|
return SUCCESS if target.distance_to(actor_3d.global_position) <= max_range else FAILURE
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=41 format=3 uid="uid://ehf5sg3ahvbf"]
|
[gd_scene load_steps=43 format=3 uid="uid://ehf5sg3ahvbf"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="2_csisu"]
|
[ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="2_csisu"]
|
||||||
[ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_lak6w"]
|
[ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_lak6w"]
|
||||||
@ -17,19 +17,21 @@
|
|||||||
[ext_resource type="Script" uid="uid://du7uk56300y28" path="res://src/world/grunk_beast/behaviors/conditions/compare_setting.gd" id="12_a1qno"]
|
[ext_resource type="Script" uid="uid://du7uk56300y28" path="res://src/world/grunk_beast/behaviors/conditions/compare_setting.gd" id="12_a1qno"]
|
||||||
[ext_resource type="Script" uid="uid://cg55nu4y0a5ud" path="res://src/world/grunk_beast/behaviors/actions/pick_random_from_group.gd" id="12_ml8dd"]
|
[ext_resource type="Script" uid="uid://cg55nu4y0a5ud" path="res://src/world/grunk_beast/behaviors/actions/pick_random_from_group.gd" id="12_ml8dd"]
|
||||||
[ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="12_xde72"]
|
[ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="12_xde72"]
|
||||||
|
[ext_resource type="Script" uid="uid://b34l3v4sr8rmq" path="res://src/world/grunk_beast/behaviors/actions/set_target_from_area.gd" id="13_x8l6r"]
|
||||||
[ext_resource type="Script" uid="uid://om57w2acvgb7" path="res://src/world/grunk_beast/behaviors/actions/travel_to_destination.gd" id="14_4y64f"]
|
[ext_resource type="Script" uid="uid://om57w2acvgb7" path="res://src/world/grunk_beast/behaviors/actions/travel_to_destination.gd" id="14_4y64f"]
|
||||||
[ext_resource type="Script" uid="uid://uoy6r3dbnq25" path="res://addons/beehave/nodes/leaves/blackboard_compare.gd" id="14_urnsk"]
|
[ext_resource type="Script" uid="uid://uoy6r3dbnq25" path="res://addons/beehave/nodes/leaves/blackboard_compare.gd" id="14_urnsk"]
|
||||||
[ext_resource type="Script" uid="uid://rdfsxwehjjrd" path="res://src/world/grunk_beast/behaviors/actions/set_player_target.gd" id="15_1cnlk"]
|
[ext_resource type="Script" uid="uid://rdfsxwehjjrd" path="res://src/world/grunk_beast/behaviors/actions/set_player_target.gd" id="15_1cnlk"]
|
||||||
[ext_resource type="Script" uid="uid://dwfdg523bk776" path="res://addons/beehave/nodes/decorators/failer.gd" id="15_oons1"]
|
[ext_resource type="Script" uid="uid://dwfdg523bk776" path="res://addons/beehave/nodes/decorators/failer.gd" id="15_oons1"]
|
||||||
[ext_resource type="Script" uid="uid://cvq483a337v6s" path="res://addons/beehave/nodes/leaves/blackboard_set.gd" id="17_6qixb"]
|
[ext_resource type="Script" uid="uid://cvq483a337v6s" path="res://addons/beehave/nodes/leaves/blackboard_set.gd" id="17_6qixb"]
|
||||||
|
[ext_resource type="Script" uid="uid://bkp4xe18nfqj" path="res://src/world/grunk_beast/behaviors/actions/set_look_target.gd" id="17_vbkm0"]
|
||||||
[ext_resource type="Script" uid="uid://ubcelage67hs" path="res://src/world/grunk_beast/behaviors/actions/get_random_target.gd" id="24_asd50"]
|
[ext_resource type="Script" uid="uid://ubcelage67hs" path="res://src/world/grunk_beast/behaviors/actions/get_random_target.gd" id="24_asd50"]
|
||||||
[ext_resource type="Script" uid="uid://bksvlal4gjhfr" path="res://src/world/grunk_beast/behaviors/actions/sniff.gd" id="26_lak6w"]
|
[ext_resource type="Script" uid="uid://bksvlal4gjhfr" path="res://src/world/grunk_beast/behaviors/actions/sniff.gd" id="26_lak6w"]
|
||||||
|
[ext_resource type="Script" uid="uid://bogt3htgqe12s" path="res://src/world/grunk_beast/behaviors/actions/unset_look_target.gd" id="27_vbkm0"]
|
||||||
[ext_resource type="Script" uid="uid://crkjak4kyv56m" path="res://addons/beehave/nodes/decorators/inverter.gd" id="28_csisu"]
|
[ext_resource type="Script" uid="uid://crkjak4kyv56m" path="res://addons/beehave/nodes/decorators/inverter.gd" id="28_csisu"]
|
||||||
[ext_resource type="Script" uid="uid://bjgvke8pjbdiq" path="res://src/world/grunk_beast/behaviors/actions/await_signal.gd" id="29_sm756"]
|
[ext_resource type="Script" uid="uid://bjgvke8pjbdiq" path="res://src/world/grunk_beast/behaviors/actions/await_signal.gd" id="29_sm756"]
|
||||||
[ext_resource type="Script" uid="uid://ccifed50rmjm2" path="res://src/world/grunk_beast/behaviors/actions/increment_beast_anger.gd" id="31_6qixb"]
|
[ext_resource type="Script" uid="uid://ccifed50rmjm2" path="res://src/world/grunk_beast/behaviors/actions/increment_beast_anger.gd" id="31_6qixb"]
|
||||||
[ext_resource type="Script" uid="uid://rpsd3i11lnur" path="res://src/world/grunk_beast/behaviors/conditions/target_reachable.gd" id="32_6qixb"]
|
[ext_resource type="Script" uid="uid://rpsd3i11lnur" path="res://src/world/grunk_beast/behaviors/conditions/target_reachable.gd" id="32_6qixb"]
|
||||||
[ext_resource type="Script" uid="uid://dlbmi25edn8b7" path="res://src/world/grunk_beast/behaviors/conditions/has_line_of_sight.gd" id="32_urnsk"]
|
[ext_resource type="Script" uid="uid://dlbmi25edn8b7" path="res://src/world/grunk_beast/behaviors/conditions/has_line_of_sight.gd" id="32_urnsk"]
|
||||||
[ext_resource type="Script" uid="uid://dj7a2tj4cqap2" path="res://src/world/grunk_beast/behaviors/actions/set_target_position_from_area.gd" id="32_vbkm0"]
|
|
||||||
[ext_resource type="Script" uid="uid://o625e667ig2e" path="res://src/world/grunk_beast/behaviors/conditions/point_in_range.gd" id="34_vbkm0"]
|
[ext_resource type="Script" uid="uid://o625e667ig2e" path="res://src/world/grunk_beast/behaviors/conditions/point_in_range.gd" id="34_vbkm0"]
|
||||||
[ext_resource type="Script" uid="uid://dsf3a8vlolhx8" path="res://addons/beehave/nodes/decorators/succeeder.gd" id="35_4alar"]
|
[ext_resource type="Script" uid="uid://dsf3a8vlolhx8" path="res://addons/beehave/nodes/decorators/succeeder.gd" id="35_4alar"]
|
||||||
[ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="36_uy7at"]
|
[ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="36_uy7at"]
|
||||||
@ -218,7 +220,17 @@ metadata/_custom_type_script = "uid://cw22yurt5l74k"
|
|||||||
script = ExtResource("15_oons1")
|
script = ExtResource("15_oons1")
|
||||||
metadata/_custom_type_script = "uid://dwfdg523bk776"
|
metadata/_custom_type_script = "uid://dwfdg523bk776"
|
||||||
|
|
||||||
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/AlwaysFailDecorator"]
|
[node name="SetLookTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/AlwaysFailDecorator" node_paths=PackedStringArray("controller")]
|
||||||
|
script = ExtResource("17_vbkm0")
|
||||||
|
blackboard_key = "pursuit_target"
|
||||||
|
controller = NodePath("../../../../../../../FrameSkipper/Shambler")
|
||||||
|
metadata/_custom_type_script = "uid://bkp4xe18nfqj"
|
||||||
|
|
||||||
|
[node name="AlwaysFailDecorator2" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector"]
|
||||||
|
script = ExtResource("15_oons1")
|
||||||
|
metadata/_custom_type_script = "uid://dwfdg523bk776"
|
||||||
|
|
||||||
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/AlwaysFailDecorator2"]
|
||||||
script = ExtResource("10_kjykp")
|
script = ExtResource("10_kjykp")
|
||||||
blackboard_key = "pursuit_target"
|
blackboard_key = "pursuit_target"
|
||||||
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
|
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
|
||||||
@ -318,6 +330,11 @@ settings_key = "game/gameplay/beast/anger_pursuit_frustrated"
|
|||||||
delta = 4.0
|
delta = 4.0
|
||||||
metadata/_custom_type_script = "uid://ccifed50rmjm2"
|
metadata/_custom_type_script = "uid://ccifed50rmjm2"
|
||||||
|
|
||||||
|
[node name="UnsetLookTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/AlwaysSucceedDecorator/TransitionToTracking" node_paths=PackedStringArray("controller")]
|
||||||
|
script = ExtResource("27_vbkm0")
|
||||||
|
controller = NodePath("../../../../../../FrameSkipper/Shambler")
|
||||||
|
metadata/_custom_type_script = "uid://bogt3htgqe12s"
|
||||||
|
|
||||||
[node name="SetTrackingModeActive" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
|
[node name="SetTrackingModeActive" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
|
||||||
script = ExtResource("17_6qixb")
|
script = ExtResource("17_6qixb")
|
||||||
key = "\"current_mode\""
|
key = "\"current_mode\""
|
||||||
@ -350,7 +367,7 @@ metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
|||||||
script = ExtResource("11_mbqcc")
|
script = ExtResource("11_mbqcc")
|
||||||
mean_time = 4.0
|
mean_time = 4.0
|
||||||
st_dev_time = 0.6
|
st_dev_time = 0.6
|
||||||
wait_time = 4.15553
|
wait_time = 4.77435
|
||||||
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
||||||
|
|
||||||
[node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"]
|
[node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"]
|
||||||
@ -360,6 +377,12 @@ center_target_key = "point_of_interest"
|
|||||||
st_dev = Vector3(5, 0, 5)
|
st_dev = Vector3(5, 0, 5)
|
||||||
metadata/_custom_type_script = "uid://ubcelage67hs"
|
metadata/_custom_type_script = "uid://ubcelage67hs"
|
||||||
|
|
||||||
|
[node name="SetLookTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence" node_paths=PackedStringArray("controller")]
|
||||||
|
script = ExtResource("17_vbkm0")
|
||||||
|
blackboard_key = "investigation_target"
|
||||||
|
controller = NodePath("../../../../../../../../FrameSkipper/Shambler")
|
||||||
|
metadata/_custom_type_script = "uid://bkp4xe18nfqj"
|
||||||
|
|
||||||
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
|
||||||
script = ExtResource("10_kjykp")
|
script = ExtResource("10_kjykp")
|
||||||
blackboard_key = "investigation_target"
|
blackboard_key = "investigation_target"
|
||||||
@ -382,11 +405,17 @@ metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
|||||||
script = ExtResource("26_lak6w")
|
script = ExtResource("26_lak6w")
|
||||||
metadata/_custom_type_script = "uid://bksvlal4gjhfr"
|
metadata/_custom_type_script = "uid://bksvlal4gjhfr"
|
||||||
|
|
||||||
[node name="SetPointOfInterest" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence" node_paths=PackedStringArray("area")]
|
[node name="SetTargetFromArea" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence" node_paths=PackedStringArray("area")]
|
||||||
script = ExtResource("32_vbkm0")
|
script = ExtResource("13_x8l6r")
|
||||||
blackboard_key = "point_of_interest"
|
blackboard_key = "point_of_interest"
|
||||||
area = NodePath("../../../../../../../../../../SniffRange")
|
area = NodePath("../../../../../../../../../../SniffRange")
|
||||||
metadata/_custom_type_script = "uid://dj7a2tj4cqap2"
|
metadata/_custom_type_script = "uid://b34l3v4sr8rmq"
|
||||||
|
|
||||||
|
[node name="SetLookTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence" node_paths=PackedStringArray("controller")]
|
||||||
|
script = ExtResource("17_vbkm0")
|
||||||
|
blackboard_key = "point_of_interest"
|
||||||
|
controller = NodePath("../../../../../../../../../../FrameSkipper/Shambler")
|
||||||
|
metadata/_custom_type_script = "uid://bkp4xe18nfqj"
|
||||||
|
|
||||||
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"]
|
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"]
|
||||||
script = ExtResource("31_6qixb")
|
script = ExtResource("31_6qixb")
|
||||||
@ -398,6 +427,12 @@ metadata/_custom_type_script = "uid://ccifed50rmjm2"
|
|||||||
script = ExtResource("8_0gxpq")
|
script = ExtResource("8_0gxpq")
|
||||||
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
||||||
|
|
||||||
|
[node name="SetLookTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/TravelSequence" node_paths=PackedStringArray("controller")]
|
||||||
|
script = ExtResource("17_vbkm0")
|
||||||
|
blackboard_key = "point_of_interest"
|
||||||
|
controller = NodePath("../../../../../../FrameSkipper/Shambler")
|
||||||
|
metadata/_custom_type_script = "uid://bkp4xe18nfqj"
|
||||||
|
|
||||||
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/TravelSequence"]
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/TravelSequence"]
|
||||||
script = ExtResource("10_kjykp")
|
script = ExtResource("10_kjykp")
|
||||||
blackboard_key = "point_of_interest"
|
blackboard_key = "point_of_interest"
|
||||||
@ -417,11 +452,16 @@ key = "\"current_mode\""
|
|||||||
value = "\"lurking\""
|
value = "\"lurking\""
|
||||||
metadata/_custom_type_script = "uid://cvq483a337v6s"
|
metadata/_custom_type_script = "uid://cvq483a337v6s"
|
||||||
|
|
||||||
|
[node name="UnsetLookTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode" node_paths=PackedStringArray("controller")]
|
||||||
|
script = ExtResource("27_vbkm0")
|
||||||
|
controller = NodePath("../../../../FrameSkipper/Shambler")
|
||||||
|
metadata/_custom_type_script = "uid://bogt3htgqe12s"
|
||||||
|
|
||||||
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
|
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
|
||||||
script = ExtResource("11_mbqcc")
|
script = ExtResource("11_mbqcc")
|
||||||
mean_time = 9.0
|
mean_time = 9.0
|
||||||
st_dev_time = 1.0
|
st_dev_time = 1.0
|
||||||
wait_time = 7.90497
|
wait_time = 8.60673
|
||||||
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
||||||
|
|
||||||
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"]
|
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"]
|
||||||
|
@ -21,7 +21,9 @@ var blend_input := 0.0
|
|||||||
@onready var armature: Node3D = %Armature
|
@onready var armature: Node3D = %Armature
|
||||||
@onready var animation_player: AnimationPlayer = %AnimationPlayer
|
@onready var animation_player: AnimationPlayer = %AnimationPlayer
|
||||||
@onready var animation_tree: AnimationTree = %AnimationTree
|
@onready var animation_tree: AnimationTree = %AnimationTree
|
||||||
@onready var look_target_pivot: Node3D = %LookTargetPivot
|
@onready var dynamic_look_target: Marker3D = %DynamicLookTarget
|
||||||
|
|
||||||
|
@onready var look_target_pivot: Node3D = %DefaultLookTargetPivot
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@ -29,12 +31,6 @@ func _ready() -> void:
|
|||||||
_update_transform()
|
_update_transform()
|
||||||
|
|
||||||
|
|
||||||
func play_spawn_animation() -> void:
|
|
||||||
animation_tree["parameters/emerge_floor_trigger/request"] = (
|
|
||||||
AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
func _start_player_rumble() -> void:
|
func _start_player_rumble() -> void:
|
||||||
# TODO this is awful. Integrate PhantomCamera or similar
|
# TODO this is awful. Integrate PhantomCamera or similar
|
||||||
if Player.instance:
|
if Player.instance:
|
||||||
@ -47,10 +43,26 @@ func _end_player_rumble() -> void:
|
|||||||
create_tween().tween_property(Player.instance, "camera_rumble", 0.0, 0.4)
|
create_tween().tween_property(Player.instance, "camera_rumble", 0.0, 0.4)
|
||||||
|
|
||||||
|
|
||||||
|
func play_spawn_animation() -> void:
|
||||||
|
animation_tree["parameters/emerge_floor_trigger/request"] = (
|
||||||
|
AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
func set_target_rotation(theta: float) -> void:
|
func set_target_rotation(theta: float) -> void:
|
||||||
target_theta = theta
|
target_theta = theta
|
||||||
|
|
||||||
|
|
||||||
|
func set_look_target(target: Vector3) -> void:
|
||||||
|
dynamic_look_target.top_level = true
|
||||||
|
dynamic_look_target.global_position = target
|
||||||
|
|
||||||
|
|
||||||
|
func unset_look_target() -> void:
|
||||||
|
dynamic_look_target.top_level = false
|
||||||
|
dynamic_look_target.position = Vector3.ZERO
|
||||||
|
|
||||||
|
|
||||||
func set_move_speed(speed: float) -> void:
|
func set_move_speed(speed: float) -> void:
|
||||||
blend_target = speed
|
blend_target = speed
|
||||||
animation_tree["parameters/anim_scale/scale"] = (
|
animation_tree["parameters/anim_scale/scale"] = (
|
||||||
|
@ -166,19 +166,19 @@ bones/42/position = Vector3(3.2303e-07, 2.28217e-07, -7.45868e-09)
|
|||||||
surface_material_override/0 = ExtResource("2_nayyt")
|
surface_material_override/0 = ExtResource("2_nayyt")
|
||||||
|
|
||||||
[node name="LookIK" type="LookAtModifier3D" parent="Armature/Skeleton3D" index="1"]
|
[node name="LookIK" type="LookAtModifier3D" parent="Armature/Skeleton3D" index="1"]
|
||||||
target_node = NodePath("../../../LookTargetPivot/LookTarget")
|
target_node = NodePath("../../../DefaultLookTargetPivot/DefaultLookPosition/DynamicLookTarget")
|
||||||
bone_name = "Spine.005"
|
bone_name = "Spine.005"
|
||||||
bone = 5
|
bone = 5
|
||||||
forward_axis = 2
|
forward_axis = 2
|
||||||
primary_rotation_axis = 2
|
primary_rotation_axis = 2
|
||||||
use_secondary_rotation = false
|
use_secondary_rotation = false
|
||||||
duration = 0.3
|
duration = 0.4
|
||||||
transition_type = 7
|
transition_type = 7
|
||||||
ease_type = 1
|
ease_type = 1
|
||||||
use_angle_limitation = true
|
use_angle_limitation = true
|
||||||
symmetry_limitation = true
|
symmetry_limitation = true
|
||||||
primary_limit_angle = 1.5708
|
primary_limit_angle = 1.5708
|
||||||
primary_damp_threshold = 0.7
|
primary_damp_threshold = 0.4
|
||||||
|
|
||||||
[node name="SleeveL" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="2"]
|
[node name="SleeveL" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="2"]
|
||||||
transform = Transform3D(0.0438309, 7.45058e-08, -0.999039, 0.999039, 6.10948e-07, 0.0438309, 7.37607e-07, -1, -4.47035e-08, 1.63061, 0.0124229, 0.803842)
|
transform = Transform3D(0.0438309, 7.45058e-08, -0.999039, 0.999039, 6.10948e-07, 0.0438309, 7.37607e-07, -1, -4.47035e-08, 1.63061, 0.0124229, 0.803842)
|
||||||
@ -219,15 +219,18 @@ parameters/idle_blend/blend_amount = 0.0
|
|||||||
parameters/rear_add/add_amount = 0.0
|
parameters/rear_add/add_amount = 0.0
|
||||||
parameters/rear_scale/scale = 1.0
|
parameters/rear_scale/scale = 1.0
|
||||||
|
|
||||||
[node name="LookTargetPivot" type="Node3D" parent="." index="3"]
|
[node name="DefaultLookTargetPivot" type="Node3D" parent="." index="3"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
|
||||||
top_level = true
|
top_level = true
|
||||||
|
|
||||||
[node name="LookTarget" type="Marker3D" parent="LookTargetPivot" index="0"]
|
[node name="DefaultLookPosition" type="Marker3D" parent="DefaultLookTargetPivot" index="0"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
|
||||||
|
|
||||||
[node name="DebugBall" type="MeshInstance3D" parent="LookTargetPivot/LookTarget" index="0"]
|
[node name="DynamicLookTarget" type="Marker3D" parent="DefaultLookTargetPivot/DefaultLookPosition" index="0"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="DebugBall" type="MeshInstance3D" parent="DefaultLookTargetPivot/DefaultLookPosition/DynamicLookTarget" index="0"]
|
||||||
visible = false
|
visible = false
|
||||||
mesh = SubResource("SphereMesh_s7rwx")
|
mesh = SubResource("SphereMesh_s7rwx")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user