Initial commit
This commit is contained in:
8
scenes/characters/DespawnFx.gd
Normal file
8
scenes/characters/DespawnFx.gd
Normal file
@@ -0,0 +1,8 @@
|
||||
extends CPUParticles2D
|
||||
|
||||
func _ready():
|
||||
emitting = true
|
||||
await get_tree().create_timer(0.8).timeout
|
||||
queue_free()
|
||||
pass # Replace with function body.
|
||||
|
||||
135
scenes/characters/Enemy.gd
Normal file
135
scenes/characters/Enemy.gd
Normal file
@@ -0,0 +1,135 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
class_name Enemy
|
||||
|
||||
"""
|
||||
This implements a very rudimentary state machine. There are better implementations
|
||||
in the AssetLib if you want to make something more complex. Also it shares code with Enemy.gd
|
||||
and probably both should extend some parent script
|
||||
"""
|
||||
|
||||
@export var WALK_SPEED: int = 350
|
||||
@export var ROLL_SPEED: int = 1000
|
||||
@export var hitpoints: int = 3
|
||||
|
||||
var despawn_fx = preload("res://scenes/misc/DespawnFX.tscn")
|
||||
|
||||
var linear_vel = Vector2()
|
||||
@export var facing = "down" # (String, "up", "down", "left", "right")
|
||||
|
||||
var anim = ""
|
||||
var new_anim = ""
|
||||
|
||||
enum { STATE_IDLE, STATE_WALKING, STATE_ATTACK, STATE_ROLL, STATE_DIE, STATE_HURT }
|
||||
|
||||
var state = STATE_IDLE
|
||||
|
||||
func _ready():
|
||||
randomize()
|
||||
|
||||
func _physics_process(_delta):
|
||||
|
||||
match state:
|
||||
STATE_IDLE:
|
||||
new_anim = "idle_" + facing
|
||||
STATE_WALKING:
|
||||
set_velocity(linear_vel)
|
||||
move_and_slide()
|
||||
linear_vel = velocity
|
||||
|
||||
var target_speed = Vector2()
|
||||
|
||||
if facing == "down":
|
||||
target_speed += Vector2.DOWN
|
||||
if facing == "left":
|
||||
target_speed += Vector2.LEFT
|
||||
if facing == "right":
|
||||
target_speed += Vector2.RIGHT
|
||||
if facing == "up":
|
||||
target_speed += Vector2.UP
|
||||
|
||||
target_speed *= WALK_SPEED
|
||||
linear_vel = linear_vel.lerp(target_speed, 0.9)
|
||||
|
||||
new_anim = ""
|
||||
if abs(linear_vel.x) > abs(linear_vel.y):
|
||||
if linear_vel.x < 0:
|
||||
facing = "left"
|
||||
if linear_vel.x > 0:
|
||||
facing = "right"
|
||||
if abs(linear_vel.y) > abs(linear_vel.x):
|
||||
if linear_vel.y < 0:
|
||||
facing = "up"
|
||||
if linear_vel.y > 0:
|
||||
facing = "down"
|
||||
|
||||
if linear_vel != Vector2.ZERO:
|
||||
new_anim = "walk_" + facing
|
||||
else:
|
||||
state = STATE_IDLE
|
||||
pass
|
||||
STATE_ATTACK:
|
||||
new_anim = "slash_" + facing
|
||||
pass
|
||||
STATE_ROLL:
|
||||
set_velocity(linear_vel)
|
||||
move_and_slide()
|
||||
linear_vel = velocity
|
||||
var target_speed = Vector2()
|
||||
if facing == "up":
|
||||
target_speed.y = -1
|
||||
if facing == "down":
|
||||
target_speed.y = 1
|
||||
if facing == "left":
|
||||
target_speed.x = -1
|
||||
if facing == "right":
|
||||
target_speed.x = 1
|
||||
target_speed *= ROLL_SPEED
|
||||
linear_vel = linear_vel.lerp(target_speed, 0.9)
|
||||
new_anim = "roll"
|
||||
pass
|
||||
STATE_DIE:
|
||||
new_anim = "die"
|
||||
STATE_HURT:
|
||||
new_anim = "hurt"
|
||||
|
||||
|
||||
|
||||
if new_anim != anim:
|
||||
anim = new_anim
|
||||
$anims.play(anim)
|
||||
pass
|
||||
|
||||
|
||||
func goto_idle():
|
||||
state = STATE_IDLE
|
||||
|
||||
func _on_state_changer_timeout():
|
||||
$state_changer.wait_time = randf_range(1.0, 5.0)
|
||||
#state = randi() %3
|
||||
state = STATE_ATTACK
|
||||
facing = ["left", "right", "up", "down"][randi()%3]
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
func _on_hurtbox_area_entered(area):
|
||||
if state != STATE_DIE and area.name == "player_sword":
|
||||
hitpoints -= 1
|
||||
var pushback_direction = (global_position - area.global_position).normalized()
|
||||
set_velocity(pushback_direction * 5000)
|
||||
move_and_slide()
|
||||
state = STATE_HURT
|
||||
$state_changer.start()
|
||||
if hitpoints <= 0:
|
||||
$state_changer.stop()
|
||||
state = STATE_DIE
|
||||
pass # Replace with function body.
|
||||
|
||||
func despawn():
|
||||
var despawn_particles = despawn_fx.instantiate()
|
||||
get_parent().add_child(despawn_particles)
|
||||
despawn_particles.global_position = global_position
|
||||
if has_node("item_spawner"):
|
||||
get_node("item_spawner").spawn()
|
||||
queue_free()
|
||||
pass
|
||||
1226
scenes/characters/Enemy.tscn
Normal file
1226
scenes/characters/Enemy.tscn
Normal file
File diff suppressed because it is too large
Load Diff
54
scenes/characters/Npc.gd
Normal file
54
scenes/characters/Npc.gd
Normal file
@@ -0,0 +1,54 @@
|
||||
extends Area2D
|
||||
|
||||
"""
|
||||
It just wraps around a sequence of dialogs. If it contains a child node named 'Quest'
|
||||
which should be an instance of Quest.gd it'll become a quest giver and show whatever
|
||||
text Quest.process() returns
|
||||
"""
|
||||
|
||||
var active = false
|
||||
|
||||
@export var character_name: String = "Nameless NPC"
|
||||
@export var dialogs = ["..."] # (Array, String, MULTILINE)
|
||||
var current_dialog = 0
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
randomize()
|
||||
# warning-ignore:return_value_discarded
|
||||
body_entered.connect(_on_body_entered)
|
||||
# warning-ignore:return_value_discarded
|
||||
body_exited.connect(_on_body_exited)
|
||||
pass # Replace with function body.
|
||||
|
||||
func _input(event):
|
||||
# Bail if npc not active (player not inside the collider)
|
||||
if not active:
|
||||
return
|
||||
# Bail if Dialogs singleton is showing another dialog
|
||||
if Dialogs.active:
|
||||
return
|
||||
# Bail if the event is not a pressed "interact" action
|
||||
if not event.is_action_pressed("interact"):
|
||||
return
|
||||
|
||||
# If the character is a questgiver delegate getting the text
|
||||
# to the Quest node, show it and end the function
|
||||
if has_node("Quest"):
|
||||
var quest_dialog = get_node("Quest").process()
|
||||
if quest_dialog != "":
|
||||
Dialogs.show_dialog(quest_dialog, character_name)
|
||||
return
|
||||
|
||||
# If we reached here and there are generic dialogs to show, rotate among them
|
||||
if not dialogs.is_empty():
|
||||
Dialogs.show_dialog(dialogs[current_dialog], character_name)
|
||||
current_dialog = wrapi(current_dialog + 1, 0, dialogs.size())
|
||||
|
||||
func _on_body_entered(body):
|
||||
if body is Player:
|
||||
active = true
|
||||
|
||||
func _on_body_exited(body):
|
||||
if body is Player:
|
||||
active = false
|
||||
57
scenes/characters/Npc.tscn
Normal file
57
scenes/characters/Npc.tscn
Normal file
@@ -0,0 +1,57 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://b7p1kli4j11fo"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/characters/Npc.gd" id="1"]
|
||||
|
||||
[sub_resource type="Animation" id="1"]
|
||||
resource_name = "idle"
|
||||
length = 2.0
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:position")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0.564087, 2.50995), Vector2(0.564087, 4.44937)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:scale")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1), Vector2(1, 0.944064)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_k00qb"]
|
||||
_data = {
|
||||
"idle": SubResource("1")
|
||||
}
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="2"]
|
||||
size = Vector2(163.651, 144.825)
|
||||
|
||||
[node name="NPC" type="Area2D"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="sprite" type="Sprite2D" parent="."]
|
||||
position = Vector2(0.564087, 2.50995)
|
||||
offset = Vector2(3.3446, -93.3282)
|
||||
|
||||
[node name="anims" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_k00qb")
|
||||
}
|
||||
autoplay = "idle"
|
||||
|
||||
[node name="trigger" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, 88.8296)
|
||||
shape = SubResource("2")
|
||||
203
scenes/characters/Player.gd
Normal file
203
scenes/characters/Player.gd
Normal file
@@ -0,0 +1,203 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
class_name Player
|
||||
|
||||
"""
|
||||
This implements a very rudimentary state machine. There are better implementations
|
||||
in the AssetLib if you want to make something more complex. Also it shares code with Enemy.gd
|
||||
and probably both should extend some parent script
|
||||
"""
|
||||
|
||||
@export var WALK_SPEED: int = 70 # pixels per second
|
||||
@export var ROLL_SPEED: int = 1000 # pixels per second
|
||||
@export var hitpoints: int = 3
|
||||
|
||||
var linear_vel = Vector2()
|
||||
var roll_direction = Vector2.DOWN
|
||||
|
||||
signal health_changed(current_hp)
|
||||
|
||||
var despawn_fx = preload("res://scenes/misc/DespawnFX.tscn")
|
||||
|
||||
var anim = ""
|
||||
var new_anim = ""
|
||||
|
||||
const N = Vector2.UP
|
||||
const NE = Vector2(cos(1*PI/4),sin(1*PI/4))
|
||||
const E = Vector2.RIGHT
|
||||
const SE = Vector2(cos(7*PI/4),sin(7*PI/4))
|
||||
const S = Vector2.DOWN
|
||||
const SW = Vector2(cos(5*PI/4),sin(5*PI/4))
|
||||
const W = Vector2.LEFT
|
||||
const NW = Vector2(cos(3*PI/4),sin(3*PI/4))
|
||||
|
||||
|
||||
|
||||
enum { STATE_BLOCKED, STATE_IDLE, STATE_WALKING, STATE_ATTACK, STATE_ROLL, STATE_DIE, STATE_HURT }
|
||||
|
||||
|
||||
@export var facing = "S" # (String, "up", "down", "left", "right")
|
||||
var state = STATE_IDLE
|
||||
var direction = S
|
||||
|
||||
# Move the player to the corresponding spawnpoint, if any and connect to the dialog system
|
||||
func _ready():
|
||||
var spawnpoints = get_tree().get_nodes_in_group("spawnpoints")
|
||||
for spawnpoint in spawnpoints:
|
||||
if spawnpoint.name == Globals.spawnpoint:
|
||||
global_position = spawnpoint.global_position
|
||||
break
|
||||
if not (
|
||||
Dialogs.dialog_started.connect(_on_dialog_started) == OK and
|
||||
Dialogs.dialog_ended.connect(_on_dialog_ended) == OK ):
|
||||
printerr("Error connecting to dialog system")
|
||||
pass
|
||||
|
||||
|
||||
func _physics_process(_delta):
|
||||
|
||||
## PROCESS STATES
|
||||
match state:
|
||||
STATE_BLOCKED:
|
||||
# new_anim = "idle_" + facing
|
||||
$anims.stop()
|
||||
pass
|
||||
STATE_IDLE:
|
||||
if (
|
||||
Input.is_action_pressed("move_down") or
|
||||
Input.is_action_pressed("move_left") or
|
||||
Input.is_action_pressed("move_right") or
|
||||
Input.is_action_pressed("move_up")
|
||||
):
|
||||
state = STATE_WALKING
|
||||
if Input.is_action_just_pressed("attack"):
|
||||
state = STATE_ATTACK
|
||||
# if Input.is_action_just_pressed("roll"):
|
||||
# state = STATE_ROLL
|
||||
# roll_direction = Vector2(
|
||||
# - int( Input.is_action_pressed("move_left") ) + int( Input.is_action_pressed("move_right") ),
|
||||
# -int( Input.is_action_pressed("move_up") ) + int( Input.is_action_pressed("move_down") )
|
||||
# ).normalized()
|
||||
# _update_facing()
|
||||
|
||||
# new_anim = "idle_" + facing
|
||||
$anims.stop()
|
||||
pass
|
||||
STATE_WALKING:
|
||||
if Input.is_action_just_pressed("attack"):
|
||||
state = STATE_ATTACK
|
||||
if Input.is_action_just_pressed("roll"):
|
||||
state = STATE_ROLL
|
||||
|
||||
linear_vel = velocity
|
||||
|
||||
var target_speed = Vector2(0,0)
|
||||
|
||||
if Input.is_action_pressed("move_down"):
|
||||
target_speed += Vector2.DOWN
|
||||
if Input.is_action_pressed("move_left"):
|
||||
target_speed += Vector2.LEFT
|
||||
if Input.is_action_pressed("move_right"):
|
||||
target_speed += Vector2.RIGHT
|
||||
if Input.is_action_pressed("move_up"):
|
||||
target_speed += Vector2.UP
|
||||
|
||||
|
||||
target_speed = target_speed.normalized() * WALK_SPEED
|
||||
target_speed.y *= 0.50 # compensa visione isometrica
|
||||
#linear_vel = linear_vel.linear_interpolate(target_speed, 0.9)
|
||||
linear_vel = target_speed
|
||||
set_velocity(linear_vel)
|
||||
roll_direction = linear_vel.normalized()
|
||||
move_and_slide()
|
||||
|
||||
_update_facing()
|
||||
|
||||
if linear_vel.length() > 5:
|
||||
new_anim = "walk_" + facing
|
||||
$anims.play()
|
||||
else:
|
||||
goto_idle()
|
||||
pass
|
||||
STATE_ATTACK:
|
||||
new_anim = "walk_" + facing # was splash_
|
||||
pass
|
||||
STATE_ROLL:
|
||||
if roll_direction == Vector2.ZERO:
|
||||
state = STATE_IDLE
|
||||
else:
|
||||
set_velocity(linear_vel)
|
||||
move_and_slide()
|
||||
linear_vel = velocity
|
||||
var target_speed = Vector2()
|
||||
target_speed = roll_direction
|
||||
target_speed *= ROLL_SPEED
|
||||
#linear_vel = linear_vel.linear_interpolate(target_speed, 0.9)
|
||||
linear_vel = target_speed
|
||||
new_anim = "roll"
|
||||
STATE_DIE:
|
||||
new_anim = "die"
|
||||
STATE_HURT:
|
||||
new_anim = "hurt"
|
||||
|
||||
## UPDATE ANIMATION
|
||||
if new_anim != anim:
|
||||
anim = new_anim
|
||||
$anims.play(anim)
|
||||
pass
|
||||
|
||||
|
||||
func _on_dialog_started():
|
||||
state = STATE_BLOCKED
|
||||
|
||||
func _on_dialog_ended():
|
||||
state = STATE_IDLE
|
||||
|
||||
|
||||
## HELPER FUNCS
|
||||
func goto_idle():
|
||||
linear_vel = Vector2.ZERO
|
||||
# new_anim = "idle_" + facing
|
||||
state = STATE_IDLE
|
||||
|
||||
|
||||
func _update_facing():
|
||||
if Input.is_action_pressed("move_left"):
|
||||
facing = "W"
|
||||
if Input.is_action_pressed("move_right"):
|
||||
facing = "E"
|
||||
if Input.is_action_pressed("move_up"):
|
||||
facing = "N"
|
||||
if Input.is_action_pressed("move_left"):
|
||||
facing = "NW"
|
||||
if Input.is_action_pressed("move_right"):
|
||||
facing = "NE"
|
||||
if Input.is_action_pressed("move_down"):
|
||||
facing = "S"
|
||||
if Input.is_action_pressed("move_left"):
|
||||
facing = "SW"
|
||||
if Input.is_action_pressed("move_right"):
|
||||
facing = "SE"
|
||||
|
||||
|
||||
func despawn():
|
||||
var despawn_particles = despawn_fx.instantiate()
|
||||
get_parent().add_child(despawn_particles)
|
||||
despawn_particles.global_position = global_position
|
||||
hide()
|
||||
await get_tree().create_timer(5.0).timeout
|
||||
get_tree().reload_current_scene()
|
||||
pass
|
||||
|
||||
|
||||
func _on_hurtbox_area_entered(area):
|
||||
if state != STATE_DIE and area.is_in_group("enemy_weapons"):
|
||||
hitpoints -= 1
|
||||
emit_signal("health_changed", hitpoints)
|
||||
var pushback_direction = (global_position - area.global_position).normalized()
|
||||
set_velocity(pushback_direction * 5000)
|
||||
move_and_slide()
|
||||
state = STATE_HURT
|
||||
if hitpoints <= 0:
|
||||
state = STATE_DIE
|
||||
pass
|
||||
806
scenes/characters/Player.tscn
Normal file
806
scenes/characters/Player.tscn
Normal file
@@ -0,0 +1,806 @@
|
||||
[gd_scene load_steps=27 format=3 uid="uid://ctd3mgp0s172q"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/characters/Player.gd" id="2"]
|
||||
[ext_resource type="Texture2D" uid="uid://3au1pfa7jj5l" path="res://textures/kid/kid.png" id="2_rhd3n"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/characters/debug_character.tscn" id="3"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="1"]
|
||||
radius = 9.00003
|
||||
height = 42.119
|
||||
|
||||
[sub_resource type="Animation" id="2"]
|
||||
resource_name = "die"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [9, 11, 13, 12, 9, 11, 13, 12, 9]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4, 0.7),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false, true, false]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(1),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"despawn"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="3"]
|
||||
resource_name = "hurt"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1),
|
||||
"transitions": PackedFloat32Array(2, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 1), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "method"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath(".")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0.1),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"goto_idle"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="6"]
|
||||
resource_name = "idle_E"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [154, 163]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("hurtbox:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(0, -3.49902)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="7"]
|
||||
resource_name = "idle_N"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [22, 43]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("hurtbox:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(0, -3.49902)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="4"]
|
||||
resource_name = "idle_S"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [88, 97]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("hurtbox:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(0, -3.49902)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="5"]
|
||||
resource_name = "idle_W"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [11, 21]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("hurtbox:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(0, -3.49902)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="8"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [2]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("player_sword:monitorable")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("sprite:modulate")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("hurtbox:position")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="9"]
|
||||
length = 0.5
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [15, 16, 17, 18, 19]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.5),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"goto_idle"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="10"]
|
||||
length = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [0, 1, 2]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.3),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"goto_idle"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="11"]
|
||||
length = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [3, 4, 5]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.3),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"goto_idle"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="12"]
|
||||
length = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [3, 4, 5]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.3),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"goto_idle"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="13"]
|
||||
length = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.1, 0.2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [6, 7, 8]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath(".")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.3),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"goto_idle"
|
||||
}]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_qdqhh"]
|
||||
resource_name = "walk_E"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [154, 175]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ef7ow"]
|
||||
resource_name = "walk_N"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [22, 43]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_m2uo2"]
|
||||
resource_name = "walk_NE"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [66, 87]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bcwxc"]
|
||||
resource_name = "walk_NW"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [44, 65]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ixjcm"]
|
||||
resource_name = "walk_S"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [88, 109]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_fq7dv"]
|
||||
resource_name = "walk_SE"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [132, 153]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ek8m1"]
|
||||
resource_name = "walk_SW"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [110, 131]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="14"]
|
||||
resource_name = "walk_W"
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("sprite:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 21]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("sprite:flip_h")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_qdvjb"]
|
||||
_data = {
|
||||
"die": SubResource("2"),
|
||||
"hurt": SubResource("3"),
|
||||
"idle_E": SubResource("6"),
|
||||
"idle_N": SubResource("7"),
|
||||
"idle_S": SubResource("4"),
|
||||
"idle_W": SubResource("5"),
|
||||
"reset": SubResource("8"),
|
||||
"roll": SubResource("9"),
|
||||
"slash_down": SubResource("10"),
|
||||
"slash_left": SubResource("11"),
|
||||
"slash_right": SubResource("12"),
|
||||
"slash_up": SubResource("13"),
|
||||
"walk_E": SubResource("Animation_qdqhh"),
|
||||
"walk_N": SubResource("Animation_ef7ow"),
|
||||
"walk_NE": SubResource("Animation_m2uo2"),
|
||||
"walk_NW": SubResource("Animation_bcwxc"),
|
||||
"walk_S": SubResource("Animation_ixjcm"),
|
||||
"walk_SE": SubResource("Animation_fq7dv"),
|
||||
"walk_SW": SubResource("Animation_ek8m1"),
|
||||
"walk_W": SubResource("14")
|
||||
}
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="18"]
|
||||
radius = 25.0
|
||||
height = 80.0
|
||||
|
||||
[node name="Player" type="CharacterBody2D" groups=["player"]]
|
||||
position = Vector2(585.638, 309.087)
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="sprite" type="Sprite2D" parent="."]
|
||||
position = Vector2(6.362, -53.087)
|
||||
scale = Vector2(2, 2)
|
||||
texture = ExtResource("2_rhd3n")
|
||||
hframes = 22
|
||||
vframes = 8
|
||||
frame = 88
|
||||
|
||||
[node name="hitbox" type="CollisionShape2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(0.421509, -10.1996)
|
||||
rotation = 1.5708
|
||||
shape = SubResource("1")
|
||||
|
||||
[node name="player_sword" type="Area2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(6.362, -53.087)
|
||||
|
||||
[node name="anims" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_qdvjb")
|
||||
}
|
||||
|
||||
[node name="camera" type="Camera2D" parent="."]
|
||||
position = Vector2(6.362, -53.087)
|
||||
zoom = Vector2(0.5, 0.5)
|
||||
|
||||
[node name="debug" parent="." instance=ExtResource("3")]
|
||||
path_to_node = NodePath("..")
|
||||
properties = ["linear_vel", "roll_direction", "facing"]
|
||||
enabled = false
|
||||
|
||||
[node name="hurtbox" type="Area2D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="col" type="CollisionShape2D" parent="hurtbox"]
|
||||
visible = false
|
||||
position = Vector2(0.362, -48.087)
|
||||
shape = SubResource("18")
|
||||
|
||||
[connection signal="area_entered" from="hurtbox" to="." method="_on_hurtbox_area_entered"]
|
||||
42
scenes/characters/debug_character.gd
Normal file
42
scenes/characters/debug_character.gd
Normal file
@@ -0,0 +1,42 @@
|
||||
extends CanvasLayer
|
||||
|
||||
"""
|
||||
This can be added to any scene and be use to show some properties for debug purposes
|
||||
"""
|
||||
|
||||
@export var path_to_node: NodePath
|
||||
@export var properties = [] # (Array, String)
|
||||
@export var enabled: bool = true: get = _get_enabled, set = _set_enabled
|
||||
|
||||
var node = null
|
||||
|
||||
@onready var stats = $Control/stats
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
node = get_node(path_to_node)
|
||||
pass # Replace with function body.
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(_delta):
|
||||
var output = ""
|
||||
for property in properties:
|
||||
if not property in node:
|
||||
printerr("Property %s not found in %s" % [property, node])
|
||||
properties.erase(property)
|
||||
continue
|
||||
output += property + ": " + str(node[property]) + "\n"
|
||||
stats.text = output
|
||||
pass
|
||||
|
||||
func _set_enabled(value):
|
||||
enabled = value
|
||||
if value == true:
|
||||
$Control.show()
|
||||
set_process(true)
|
||||
else:
|
||||
$Control.hide()
|
||||
set_process(false)
|
||||
|
||||
func _get_enabled():
|
||||
return enabled
|
||||
29
scenes/characters/debug_character.tscn
Normal file
29
scenes/characters/debug_character.tscn
Normal file
@@ -0,0 +1,29 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://fonts/Candy Demo.ttf" type="FontFile" id=1]
|
||||
[ext_resource path="res://scenes/characters/debug_character.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="FontFile" id=1]
|
||||
size = 32
|
||||
font_data = ExtResource( 1 )
|
||||
|
||||
[node name="debug" type="CanvasLayer"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="Control" type="Control" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="stats" type="Label" parent="Control"]
|
||||
offset_left = 17.0
|
||||
offset_top = 16.0
|
||||
offset_right = 285.0
|
||||
offset_bottom = 211.0
|
||||
theme_override_fonts/font = SubResource( 1 )
|
||||
theme_override_colors/font_color = Color( 0.803922, 0.0784314, 0.0784314, 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
Reference in New Issue
Block a user