Basic player controls and aiming
This commit is contained in:
parent
56695d303e
commit
f5999da412
114 changed files with 6611 additions and 2 deletions
17
objects/interactable.gd
Normal file
17
objects/interactable.gd
Normal file
|
@ -0,0 +1,17 @@
|
|||
@tool
|
||||
class_name Interactable
|
||||
extends Area2D
|
||||
|
||||
|
||||
signal interacted(user: Node)
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
collision_layer = 0b0100_0000 # Layer 7 (interactable)
|
||||
collision_mask = 0
|
||||
input_pickable = false
|
||||
monitoring = false
|
||||
|
||||
|
||||
func interact(user: Node) -> void:
|
||||
interacted.emit(user)
|
119
objects/player/player.gd
Normal file
119
objects/player/player.gd
Normal file
|
@ -0,0 +1,119 @@
|
|||
class_name Player
|
||||
extends CharacterBody2D
|
||||
|
||||
|
||||
@export_group("Grounded Movement")
|
||||
@export var walk_speed: float = 120.0
|
||||
@export var acceleration: float = 120.0
|
||||
@export var stopping_force: float = 320.0
|
||||
@export var stop_threshold: float = 4.0
|
||||
@export var turning_force: float = 450.0
|
||||
|
||||
|
||||
@onready var state_chart: StateChart = %StateChart
|
||||
@onready var graphics: Node2D = %Graphics
|
||||
@onready var animation_player: AnimationPlayer = %AnimationPlayer
|
||||
|
||||
@onready var front_arm_pivot: Node2D = %FrontArmPivot
|
||||
@onready var back_arm_pivot: Node2D = %BackArmPivot
|
||||
|
||||
|
||||
var input_dir: float = 0.0
|
||||
var aim_back_arm: bool = false
|
||||
|
||||
var _was_on_floor: bool = true
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
state_chart.set_expression_property(&"player", self)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
_face_body_to_mouse()
|
||||
|
||||
if is_on_floor():
|
||||
state_chart.send_event(&"landed")
|
||||
else:
|
||||
state_chart.send_event(&"left_ground")
|
||||
|
||||
var old_input_dir = input_dir
|
||||
input_dir = signf(Input.get_axis(&"move_left", &"move_right"))
|
||||
if input_dir != old_input_dir:
|
||||
state_chart.send_event(&"input_dir_changed")
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed(&"aim"):
|
||||
state_chart.send_event(&"aim_pressed")
|
||||
elif event.is_action_released(&"aim"):
|
||||
state_chart.send_event(&"aim_released")
|
||||
|
||||
|
||||
func toss_held_object() -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _face_body_to_mouse() -> void:
|
||||
if get_local_mouse_position().x < 0.0:
|
||||
graphics.scale.x = -1.0
|
||||
else:
|
||||
graphics.scale.x = 1.0
|
||||
|
||||
|
||||
func _face_arm_to_mouse(pivot: Node2D) -> void:
|
||||
var mouse_pos = graphics.get_local_mouse_position()
|
||||
|
||||
var pivot_xform = pivot.get_relative_transform_to_parent(graphics)
|
||||
pivot.rotation = pivot_xform.origin.angle_to_point(mouse_pos)
|
||||
|
||||
|
||||
#region Movement States
|
||||
func _active_physics_process(delta: float) -> void:
|
||||
move_and_slide()
|
||||
|
||||
|
||||
#region Grounded States
|
||||
func _grounded_child_state_entered() -> void:
|
||||
state_chart.send_event(&"input_dir_changed")
|
||||
|
||||
|
||||
func _standing_entered() -> void:
|
||||
velocity.x = 0.0
|
||||
|
||||
|
||||
func _walking_process(delta: float) -> void:
|
||||
velocity.x += acceleration * input_dir * delta
|
||||
velocity.x = clampf(velocity.x, -walk_speed, walk_speed)
|
||||
animation_player.speed_scale = inverse_lerp(0, walk_speed, velocity.x) * graphics.scale.x
|
||||
|
||||
|
||||
func _stopping_physics_process(delta: float) -> void:
|
||||
velocity.x -= stopping_force * signf(velocity.x) * delta
|
||||
if absf(velocity.x) <= stop_threshold:
|
||||
velocity.x = 0.0
|
||||
state_chart.send_event(&"stopped")
|
||||
|
||||
|
||||
func _turning_physics_process(delta: float) -> void:
|
||||
velocity.x += turning_force * input_dir * delta
|
||||
if signf(velocity.x) != -input_dir:
|
||||
state_chart.send_event(&"turn_finished")
|
||||
|
||||
|
||||
func _aiming_physics_process(delta: float) -> void:
|
||||
_face_arm_to_mouse(front_arm_pivot)
|
||||
if aim_back_arm:
|
||||
_face_arm_to_mouse(back_arm_pivot)
|
||||
|
||||
|
||||
func _aiming_exited() -> void:
|
||||
front_arm_pivot.rotation = PI * 0.5
|
||||
back_arm_pivot.rotation = PI * 0.5
|
||||
#endregion
|
||||
|
||||
|
||||
#region Airborn States
|
||||
func _airborn_physics_process(delta: float) -> void:
|
||||
velocity += get_gravity() * delta
|
||||
#endregion
|
||||
#endregion
|
889
objects/player/player.tscn
Normal file
889
objects/player/player.tscn
Normal file
|
@ -0,0 +1,889 @@
|
|||
[gd_scene load_steps=34 format=3 uid="uid://dfx8h6eplcm6t"]
|
||||
|
||||
[ext_resource type="Script" path="res://objects/player/player.gd" id="1_0jtcw"]
|
||||
[ext_resource type="Texture2D" uid="uid://cm07m02mxkaah" path="res://textures/player/arm_back.png" id="2_ux0fy"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/state_chart.gd" id="2_wtq62"]
|
||||
[ext_resource type="Texture2D" uid="uid://c5mdfp0haxjhw" path="res://textures/player/arm_back_hand.png" id="3_7fclw"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/parallel_state.gd" id="3_h5pyx"]
|
||||
[ext_resource type="Texture2D" uid="uid://qfsmi63hvbwj" path="res://textures/player/arm_front.png" id="3_jvia3"]
|
||||
[ext_resource type="Texture2D" uid="uid://b8mjub1y54bsp" path="res://textures/player/arm_front_hand.png" id="4_kyw60"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/compound_state.gd" id="4_le3t4"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/atomic_state.gd" id="5_8e8ei"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/transition.gd" id="6_d3xxl"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/expression_guard.gd" id="7_yp0np"]
|
||||
[ext_resource type="Texture2D" uid="uid://x3q6bebo0qwg" path="res://textures/player/leg_back.png" id="8_kdi1l"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/not_guard.gd" id="8_qwrs2"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/guard.gd" id="9_0g7ju"]
|
||||
[ext_resource type="Texture2D" uid="uid://dd6x23rk0jkhv" path="res://textures/player/foot_back.png" id="9_2a4p0"]
|
||||
[ext_resource type="Script" path="res://scripts/debug_visualization/draw_basis.gd" id="9_x2hvg"]
|
||||
[ext_resource type="Texture2D" uid="uid://damqh4mqwpv4b" path="res://textures/player/torso.png" id="10_2vegm"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/all_of_guard.gd" id="10_lprgf"]
|
||||
[ext_resource type="Texture2D" uid="uid://cp7sodu1rhdje" path="res://textures/player/leg_front.png" id="11_6xvc8"]
|
||||
[ext_resource type="Texture2D" uid="uid://c4odsqtqmj8g" path="res://textures/player/head.png" id="11_nngs1"]
|
||||
[ext_resource type="Texture2D" uid="uid://d1qyuom3pxifj" path="res://textures/player/foot_front.png" id="12_dda5a"]
|
||||
[ext_resource type="Texture2D" uid="uid://cssnogcrn57xv" path="res://textures/player/skirt.png" id="13_qgkik"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_6roai"]
|
||||
resource_name = "stand"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Graphics/Hip:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, -14)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Graphics/Hip:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Graphics/Hip/BackLeg:rotation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Graphics/Hip/BackLeg/BackFoot:rotation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Graphics/Hip/BackArmPivot/BackArm:rotation")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-1.57079]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Graphics/Hip/BackArmPivot/BackArm/BackHand:rotation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Graphics/Hip/Torso:rotation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Graphics/Hip/Torso/Head:rotation")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Graphics/Hip/FrontArmPivot/FrontArm:rotation")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-1.5708]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Graphics/Hip/FrontArmPivot/FrontArm/FrontHand:rotation")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Graphics/Hip/FrontLeg:rotation")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Graphics/Hip/FrontLeg/FrontFoot:rotation")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Graphics/Hip/Skirt:rotation")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/path = NodePath("Graphics/Hip/FrontLeg:position")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-2, 6)]
|
||||
}
|
||||
tracks/14/type = "value"
|
||||
tracks/14/imported = false
|
||||
tracks/14/enabled = true
|
||||
tracks/14/path = NodePath("Graphics/Hip/BackLeg:position")
|
||||
tracks/14/interp = 1
|
||||
tracks/14/loop_wrap = true
|
||||
tracks/14/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 6)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_7ampj"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Graphics/Hip:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, -14)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Graphics/Hip:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Graphics/Hip/BackLeg:rotation")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Graphics/Hip/BackLeg/BackFoot:rotation")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Graphics/Hip/BackArmPivot/BackArm:rotation")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-1.57079]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Graphics/Hip/BackArmPivot/BackArm/BackHand:rotation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Graphics/Hip/Torso:rotation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Graphics/Hip/Torso/Head:rotation")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Graphics/Hip/FrontArmPivot/FrontArm:rotation")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-1.5708]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Graphics/Hip/FrontArmPivot/FrontArm/FrontHand:rotation")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Graphics/Hip/FrontLeg:rotation")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Graphics/Hip/FrontLeg/FrontFoot:rotation")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Graphics/Hip/Skirt:rotation")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/path = NodePath("Graphics/Hip/FrontLeg:position")
|
||||
tracks/13/interp = 1
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-2, 6)]
|
||||
}
|
||||
tracks/14/type = "value"
|
||||
tracks/14/imported = false
|
||||
tracks/14/enabled = true
|
||||
tracks/14/path = NodePath("Graphics/Hip/BackLeg:position")
|
||||
tracks/14/interp = 1
|
||||
tracks/14/loop_wrap = true
|
||||
tracks/14/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 6)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_eoejb"]
|
||||
resource_name = "walk"
|
||||
length = 0.960004
|
||||
loop_mode = 1
|
||||
step = 0.04
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Graphics/Hip:position")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.24, 0.36, 0.48, 0.6, 0.72, 0.84),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, -13), Vector2(0, -12), Vector2(0, -14), Vector2(0, -15), Vector2(0, -13), Vector2(0, -12), Vector2(0, -14), Vector2(0, -15)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Graphics/Hip:rotation")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Graphics/Hip/BackLeg:rotation")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.24, 0.36, 0.48, 0.6, 0.72, 0.84),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [0.595709, 0.637986, -0.261799, -0.648994, -0.629291, -0.971209, 0.0, 0.430862]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Graphics/Hip/BackLeg/BackFoot:rotation")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.24, 0.36, 0.48, 0.6, 0.72),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [0.364786, 0.570075, 1.309, 0.98228, 0.0486702, 0.958074, 0.0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Graphics/Hip/BackArmPivot/BackArm:rotation")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-1.57079]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Graphics/Hip/BackArmPivot/BackArm/BackHand:rotation")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Graphics/Hip/Torso:rotation")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("Graphics/Hip/Torso/Head:rotation")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("Graphics/Hip/FrontArmPivot/FrontArm:rotation")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [-1.5708]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("Graphics/Hip/FrontArmPivot/FrontArm/FrontHand:rotation")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("Graphics/Hip/FrontLeg:rotation")
|
||||
tracks/10/interp = 2
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.24, 0.36, 0.48, 0.6, 0.72, 0.84),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [-0.633345, -1.02087, 0.0, 0.376222, 0.593412, 0.681726, -0.399987, -0.691819]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("Graphics/Hip/FrontLeg/FrontFoot:rotation")
|
||||
tracks/11/interp = 2
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.24, 0.48, 0.6, 0.72, 0.84),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [0.023663, 1.03073, 0.0, 0.349066, 0.618152, 1.4997, 0.971881]
|
||||
}
|
||||
tracks/12/type = "value"
|
||||
tracks/12/imported = false
|
||||
tracks/12/enabled = true
|
||||
tracks/12/path = NodePath("Graphics/Hip/Skirt:rotation")
|
||||
tracks/12/interp = 1
|
||||
tracks/12/loop_wrap = true
|
||||
tracks/12/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
tracks/13/type = "value"
|
||||
tracks/13/imported = false
|
||||
tracks/13/enabled = true
|
||||
tracks/13/path = NodePath("Graphics/Hip/FrontLeg:position")
|
||||
tracks/13/interp = 2
|
||||
tracks/13/loop_wrap = true
|
||||
tracks/13/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.24, 0.36, 0.48, 0.6, 0.72),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-1, 6), Vector2(-1, 6), Vector2(-1, 6), Vector2(-1, 7), Vector2(-1, 6), Vector2(0, 6), Vector2(-1, 6)]
|
||||
}
|
||||
tracks/14/type = "value"
|
||||
tracks/14/imported = false
|
||||
tracks/14/enabled = true
|
||||
tracks/14/path = NodePath("Graphics/Hip/BackLeg:position")
|
||||
tracks/14/interp = 2
|
||||
tracks/14/loop_wrap = true
|
||||
tracks/14/keys = {
|
||||
"times": PackedFloat32Array(0, 0.12, 0.36, 0.48, 0.84),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(-2.38419e-07, 6), Vector2(-2.38419e-07, 6), Vector2(-2.38419e-07, 6), Vector2(2.38419e-07, 6), Vector2(-1, 7)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_claqb"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_7ampj"),
|
||||
"stand": SubResource("Animation_6roai"),
|
||||
"walk": SubResource("Animation_eoejb")
|
||||
}
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_wydm2"]
|
||||
size = Vector2(7, 32)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_hwvj2"]
|
||||
resource_name = "HoldingDirection"
|
||||
script = ExtResource("7_yp0np")
|
||||
expression = "player.input_dir != 0.0"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_h756l"]
|
||||
resource_name = "NotHoldingDirection"
|
||||
script = ExtResource("8_qwrs2")
|
||||
guard = SubResource("Resource_hwvj2")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_42obj"]
|
||||
resource_name = "HoldingSameDirection"
|
||||
script = ExtResource("7_yp0np")
|
||||
expression = "player.input_dir == signf(player.velocity.x)"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_hbuhf"]
|
||||
resource_name = "NotHoldingSame"
|
||||
script = ExtResource("8_qwrs2")
|
||||
guard = SubResource("Resource_42obj")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_7h7ld"]
|
||||
script = ExtResource("10_lprgf")
|
||||
guards = Array[ExtResource("9_0g7ju")]([SubResource("Resource_hwvj2"), SubResource("Resource_hbuhf")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_5aa0s"]
|
||||
resource_name = "HoldingTowardsVelocity"
|
||||
script = ExtResource("10_lprgf")
|
||||
guards = Array[ExtResource("9_0g7ju")]([SubResource("Resource_hwvj2"), SubResource("Resource_42obj")])
|
||||
|
||||
[node name="Player" type="CharacterBody2D"]
|
||||
process_physics_priority = -100
|
||||
editor_description = "Has lower physics processing priority so that state events happen first."
|
||||
collision_layer = 2
|
||||
floor_snap_length = 4.0
|
||||
script = ExtResource("1_0jtcw")
|
||||
walk_speed = 50.0
|
||||
acceleration = 100.0
|
||||
stopping_force = 100.0
|
||||
turning_force = 200.0
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_claqb")
|
||||
}
|
||||
playback_default_blend_time = 0.25
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-0.5, -16)
|
||||
shape = SubResource("RectangleShape2D_wydm2")
|
||||
debug_color = Color(0.720957, 0.248475, 1, 0.42)
|
||||
|
||||
[node name="Graphics" type="Node2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Hip" type="Node2D" parent="Graphics"]
|
||||
position = Vector2(0, -14)
|
||||
|
||||
[node name="BackLeg" type="Sprite2D" parent="Graphics/Hip"]
|
||||
position = Vector2(1, 6)
|
||||
texture = ExtResource("8_kdi1l")
|
||||
offset = Vector2(0, 2)
|
||||
|
||||
[node name="BackFoot" type="Sprite2D" parent="Graphics/Hip/BackLeg"]
|
||||
position = Vector2(0, 4)
|
||||
texture = ExtResource("9_2a4p0")
|
||||
offset = Vector2(0, 1)
|
||||
|
||||
[node name="BackArmPivot" type="Node2D" parent="Graphics/Hip"]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(1, -9)
|
||||
rotation = 1.57079
|
||||
|
||||
[node name="DirectionVisualizer" type="Node2D" parent="Graphics/Hip/BackArmPivot"]
|
||||
z_index = 1
|
||||
script = ExtResource("9_x2hvg")
|
||||
x_length = 12.0
|
||||
y_length = 2.0
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="BackArm" type="Sprite2D" parent="Graphics/Hip/BackArmPivot"]
|
||||
rotation = -1.57079
|
||||
texture = ExtResource("2_ux0fy")
|
||||
offset = Vector2(0, 2)
|
||||
|
||||
[node name="BackHand" type="Sprite2D" parent="Graphics/Hip/BackArmPivot/BackArm"]
|
||||
position = Vector2(0, 5)
|
||||
texture = ExtResource("3_7fclw")
|
||||
offset = Vector2(0, 2)
|
||||
|
||||
[node name="Torso" type="Sprite2D" parent="Graphics/Hip"]
|
||||
texture = ExtResource("10_2vegm")
|
||||
offset = Vector2(-1, -4)
|
||||
|
||||
[node name="Head" type="Sprite2D" parent="Graphics/Hip/Torso"]
|
||||
position = Vector2(0, -10)
|
||||
texture = ExtResource("11_nngs1")
|
||||
offset = Vector2(-1, -4)
|
||||
|
||||
[node name="FrontArmPivot" type="Node2D" parent="Graphics/Hip"]
|
||||
unique_name_in_owner = true
|
||||
z_index = 1
|
||||
position = Vector2(-3, -9)
|
||||
rotation = 1.57079
|
||||
|
||||
[node name="DirectionVisualizer" type="Node2D" parent="Graphics/Hip/FrontArmPivot"]
|
||||
z_index = 1
|
||||
script = ExtResource("9_x2hvg")
|
||||
x_length = 12.0
|
||||
y_length = 2.0
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="FrontArm" type="Sprite2D" parent="Graphics/Hip/FrontArmPivot"]
|
||||
rotation = -1.5708
|
||||
texture = ExtResource("3_jvia3")
|
||||
offset = Vector2(0, 2)
|
||||
|
||||
[node name="FrontHand" type="Sprite2D" parent="Graphics/Hip/FrontArmPivot/FrontArm"]
|
||||
position = Vector2(0, 5)
|
||||
texture = ExtResource("4_kyw60")
|
||||
offset = Vector2(0, 2)
|
||||
|
||||
[node name="HeldItemSlot" type="Node2D" parent="Graphics/Hip/FrontArmPivot/FrontArm/FrontHand"]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(0.999977, 5)
|
||||
|
||||
[node name="FrontLeg" type="Sprite2D" parent="Graphics/Hip"]
|
||||
position = Vector2(-2, 6)
|
||||
texture = ExtResource("11_6xvc8")
|
||||
offset = Vector2(0, 2)
|
||||
|
||||
[node name="FrontFoot" type="Sprite2D" parent="Graphics/Hip/FrontLeg"]
|
||||
position = Vector2(0, 4)
|
||||
texture = ExtResource("12_dda5a")
|
||||
offset = Vector2(0, 1)
|
||||
|
||||
[node name="Skirt" type="Sprite2D" parent="Graphics/Hip"]
|
||||
texture = ExtResource("13_qgkik")
|
||||
offset = Vector2(-1, 3)
|
||||
|
||||
[node name="StateChart" type="Node" parent="."]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("2_wtq62")
|
||||
|
||||
[node name="Root" type="Node" parent="StateChart"]
|
||||
script = ExtResource("3_h5pyx")
|
||||
|
||||
[node name="Movement" type="Node" parent="StateChart/Root"]
|
||||
editor_description = "State of character movement."
|
||||
script = ExtResource("4_le3t4")
|
||||
initial_state = NodePath("Active")
|
||||
|
||||
[node name="Active" type="Node" parent="StateChart/Root/Movement"]
|
||||
process_physics_priority = 100
|
||||
editor_description = "Performs movement. Has higher physics processing priority so that move_and_slide happens last."
|
||||
script = ExtResource("4_le3t4")
|
||||
initial_state = NodePath("Grounded")
|
||||
|
||||
[node name="Grounded" type="Node" parent="StateChart/Root/Movement/Active"]
|
||||
script = ExtResource("4_le3t4")
|
||||
initial_state = NodePath("Standing")
|
||||
|
||||
[node name="OnLeftGround" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Airborn")
|
||||
event = &"left_ground"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnAimPressed" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../Aiming")
|
||||
event = &"aim_pressed"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Standing" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
editor_description = "Character is standing still."
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="OnWalkStart" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Standing"]
|
||||
editor_description = "A direction starts being held."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Walking")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_hwvj2")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Walking" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
editor_description = "Character is walking in the direction being pressed."
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="OnWalkStop" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Walking"]
|
||||
editor_description = "A direction stops being held."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Stopping")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_h756l")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnTurnAround" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Walking"]
|
||||
editor_description = "The opposite direction from movement is held."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Turning")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_7h7ld")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Stopping" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
editor_description = "Player is holding no direction, character slows to stop."
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="OnWalkStart" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Stopping"]
|
||||
editor_description = "The original"
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Walking")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_5aa0s")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnTurnAround" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Stopping"]
|
||||
editor_description = "The opposite direction from movement is held."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Turning")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_7h7ld")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnStopped" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Stopping"]
|
||||
editor_description = "The character has come to a stop.
|
||||
(velocity.x < stop_threshold)"
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Standing")
|
||||
event = &"stopped"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Turning" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
editor_description = "Character is holding opposite direction of horizontal velocity, character will more quickly turn around."
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="OnWalkStart" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Turning"]
|
||||
editor_description = "The player cancels turning and starts walking in the same direction again."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Walking")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_5aa0s")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnWalkStop" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Turning"]
|
||||
editor_description = "The player cancels turning and just comes to a stop."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Stopping")
|
||||
event = &"input_dir_changed"
|
||||
guard = SubResource("Resource_h756l")
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnTurnFinished" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Turning"]
|
||||
editor_description = "The character has crossed the 0 velocity boundary and is facing the other direction now."
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Walking")
|
||||
event = &"turn_finished"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Aiming" type="Node" parent="StateChart/Root/Movement/Active/Grounded"]
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="OnAimReleased" type="Node" parent="StateChart/Root/Movement/Active/Grounded/Aiming"]
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Standing")
|
||||
event = &"aim_released"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Airborn" type="Node" parent="StateChart/Root/Movement/Active"]
|
||||
script = ExtResource("4_le3t4")
|
||||
initial_state = NodePath("Falling")
|
||||
|
||||
[node name="Falling" type="Node" parent="StateChart/Root/Movement/Active/Airborn"]
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="OnLanded" type="Node" parent="StateChart/Root/Movement/Active/Airborn"]
|
||||
script = ExtResource("6_d3xxl")
|
||||
to = NodePath("../../Grounded")
|
||||
event = &"landed"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Inactive" type="Node" parent="StateChart/Root/Movement"]
|
||||
editor_description = "Performs no movement."
|
||||
script = ExtResource("5_8e8ei")
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active" to="." method="_active_physics_process"]
|
||||
[connection signal="child_state_entered" from="StateChart/Root/Movement/Active/Grounded" to="." method="_grounded_child_state_entered"]
|
||||
[connection signal="state_entered" from="StateChart/Root/Movement/Active/Grounded/Standing" to="." method="_standing_entered"]
|
||||
[connection signal="state_entered" from="StateChart/Root/Movement/Active/Grounded/Walking" to="AnimationPlayer" method="play" binds= [&"walk"]]
|
||||
[connection signal="state_exited" from="StateChart/Root/Movement/Active/Grounded/Walking" to="AnimationPlayer" method="play" binds= [&"stand"]]
|
||||
[connection signal="state_exited" from="StateChart/Root/Movement/Active/Grounded/Walking" to="AnimationPlayer" method="set_speed_scale" binds= [1.0]]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active/Grounded/Walking" to="." method="_walking_process"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active/Grounded/Stopping" to="." method="_stopping_physics_process"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active/Grounded/Turning" to="." method="_turning_physics_process"]
|
||||
[connection signal="state_exited" from="StateChart/Root/Movement/Active/Grounded/Aiming" to="." method="_aiming_exited"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active/Grounded/Aiming" to="." method="_stopping_physics_process"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active/Grounded/Aiming" to="." method="_aiming_physics_process"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Movement/Active/Airborn" to="." method="_airborn_physics_process"]
|
18
objects/weapons/projectiles/brick.tscn
Normal file
18
objects/weapons/projectiles/brick.tscn
Normal file
|
@ -0,0 +1,18 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://dlnu4b8eydxui"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://ccyfbp8cypnyy" path="res://objects/weapons/projectiles/throwable.tscn" id="1_4sas3"]
|
||||
[ext_resource type="Texture2D" uid="uid://bd3mcp3gds2vg" path="res://textures/projectiles/brick.png" id="2_evkjl"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_7kw5j"]
|
||||
size = Vector2(6, 4)
|
||||
|
||||
[node name="Brick" instance=ExtResource("1_4sas3")]
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="." index="0"]
|
||||
texture = ExtResource("2_evkjl")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="1"]
|
||||
shape = SubResource("RectangleShape2D_7kw5j")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Interactable" index="0"]
|
||||
shape = SubResource("RectangleShape2D_7kw5j")
|
9
objects/weapons/projectiles/bullet.gd
Normal file
9
objects/weapons/projectiles/bullet.gd
Normal file
|
@ -0,0 +1,9 @@
|
|||
extends Node2D
|
||||
|
||||
|
||||
var speed: float = 500.0
|
||||
var direction := Vector2.ZERO
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
global_position += direction * speed * delta
|
22
objects/weapons/projectiles/bullet.tscn
Normal file
22
objects/weapons/projectiles/bullet.tscn
Normal file
|
@ -0,0 +1,22 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://cntjtrjp4uisn"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://e6ubhnakxe0i" path="res://icon.svg" id="1_lvyed"]
|
||||
[ext_resource type="Script" path="res://objects/weapons/projectiles/bullet.gd" id="1_xwbst"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kf3mx"]
|
||||
size = Vector2(4, 4)
|
||||
|
||||
[node name="Bullet" type="Node2D"]
|
||||
script = ExtResource("1_xwbst")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
position = Vector2(-2.38419e-07, 0)
|
||||
scale = Vector2(0.03125, 0.03125)
|
||||
texture = ExtResource("1_lvyed")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource("RectangleShape2D_kf3mx")
|
||||
|
||||
[connection signal="body_entered" from="Area2D" to="." method="queue_free" unbinds=1]
|
12
objects/weapons/projectiles/throwable.gd
Normal file
12
objects/weapons/projectiles/throwable.gd
Normal file
|
@ -0,0 +1,12 @@
|
|||
class_name Throwable
|
||||
extends RigidBody2D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _on_interacted(user: Node) -> void:
|
||||
var player = user as Player
|
||||
if player:
|
||||
player.pick_up(self)
|
16
objects/weapons/projectiles/throwable.tscn
Normal file
16
objects/weapons/projectiles/throwable.tscn
Normal file
|
@ -0,0 +1,16 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://ccyfbp8cypnyy"]
|
||||
|
||||
[ext_resource type="Script" path="res://objects/weapons/projectiles/throwable.gd" id="1_dsh6j"]
|
||||
[ext_resource type="Script" path="res://objects/interactable.gd" id="2_b3de0"]
|
||||
|
||||
[node name="Throwable" type="RigidBody2D"]
|
||||
script = ExtResource("1_dsh6j")
|
||||
|
||||
[node name="Interactable" type="Area2D" parent="."]
|
||||
collision_layer = 64
|
||||
collision_mask = 0
|
||||
input_pickable = false
|
||||
monitoring = false
|
||||
script = ExtResource("2_b3de0")
|
||||
|
||||
[connection signal="interacted" from="Interactable" to="." method="_on_interacted"]
|
Reference in a new issue