Improve enemy behavior, add filth eater

This commit is contained in:
2025-02-10 22:19:26 -08:00
parent 1f9c05c0a7
commit 0038e78a2b
106 changed files with 1559 additions and 782 deletions

View File

@@ -51,7 +51,7 @@ public partial class DataViewer : Control
Camera3D.Position = Camera3D.Position.Clamp(new Vector3(0, 0, 1), new Vector3(0, 0, 4));
ModelPivot.Rotation = ModelPivot.Rotation.Clamp(Mathf.DegToRad(-60), Mathf.DegToRad(60));
_currentModel.RotateModel(_currentModel.Basis, CameraPivot.Basis.Z, 0.75f, 0.5f);
_currentModel.RotateModel(_currentModel.Basis, CameraPivot.Basis.Z, 0.75f, 0.5f, false);
if (Input.IsActionJustPressed(GameInputs.Attack))
{

View File

@@ -89,9 +89,13 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
var velocity = (targetPosition - GlobalTransform.Origin).Normalized() * 2f * delta;
var lookAtDir = GlobalTransform.Origin - velocity;
var lookAtPosition = new Vector3(lookAtDir.X, GlobalPosition.Y, lookAtDir.Z);
if (GlobalPosition.DistanceTo(target) > 1.0f && !velocity.IsEqualApprox(Vector3.Zero) && !Position.IsEqualApprox(lookAtPosition))
LookAt(lookAtPosition + new Vector3(0.001f, 0.001f, 0.001f), Vector3.Up);
EnemyModelView.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z);
var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer;
EnemyModelView.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z, isWalking);
_knockbackStrength = _knockbackStrength * 0.9f;
MoveAndCollide(velocity + (_knockbackDirection * _knockbackStrength));
}
@@ -133,7 +137,6 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
_currentHP.Sync += OnHPChanged;
LineOfSight.BodyEntered += LineOfSight_BodyEntered;
PatrolTimer.Timeout += OnPatrolTimeout;
AttackTimer.Timeout += OnAttackTimeout;
var rng = new RandomNumberGenerator();
rng.Randomize();
PatrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f);
@@ -151,18 +154,40 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
rng.Randomize();
var randomizedSpot = new Vector3(rng.RandfRange(-7.0f, 7.0f), 0, rng.RandfRange(-7.0f, 7.0f));
_enemyLogic.Input(new EnemyLogic.Input.PatrolToRandomSpot(GlobalPosition + randomizedSpot));
_enemyLogic.Input(new EnemyLogic.Input.StartPatrol());
PatrolTimer.WaitTime = rng.RandfRange(5.0f, 10.0f);
}
public void OnPhysicsProcess(double delta)
{
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 2.5f)
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
}
public void StartAttackTimer()
{
AttackTimer.Timeout += OnAttackTimeout;
}
public void StopAttackTimer()
{
AttackTimer.Timeout -= OnAttackTimeout;
}
private void OnAttackTimeout()
{
if (GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
{
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
return;
}
var rng = new RandomNumberGenerator();
rng.Randomize();

View File

@@ -17,9 +17,9 @@ public interface IEnemyModelView : INode3D
public void PlayDeathAnimation();
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection);
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, bool isWalking);
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, float rotateUpperThreshold, float rotateLowerThreshold);
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, float rotateUpperThreshold, float rotateLowerThreshold, bool isWalking);
}
[Meta(typeof(IAutoNode))]
@@ -28,9 +28,12 @@ public partial class EnemyModelView : Node3D, IEnemyModelView
private const string PRIMARY_ATTACK = "primary_attack";
private const string SECONDARY_ATTACK = "secondary_attack";
private const string PRIMARY_SKILL = "primary_skill";
private const string IDLE_FORWARD = "idle_front_walk";
private const string IDLE_LEFT = "idle_left_walk";
private const string IDLE_BACK = "idle_back_walk";
private const string IDLE_FORWARD = "idle_front";
private const string IDLE_LEFT = "idle_left";
private const string IDLE_BACK = "idle_back";
private const string IDLE_FORWARD_WALK = "idle_front_walk";
private const string IDLE_LEFT_WALK = "idle_left_walk";
private const string IDLE_BACK_WALK = "idle_back_walk";
private const string PARAMETERS_PLAYBACK = "parameters/playback";
public override void _Notification(int what) => this.Notify(what);
@@ -81,9 +84,14 @@ public partial class EnemyModelView : Node3D, IEnemyModelView
tweener.TweenCallback(Callable.From(QueueFree));
}
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection) => RotateModel(enemyBasis, cameraDirection, 0.85f, 0.3f);
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, bool isWalking) => RotateModel(enemyBasis, cameraDirection, 0.85f, 0.3f, isWalking);
public void RotateModel(Basis enemyBasis, Vector3 cameraDirection, float rotateUpperThreshold, float rotateLowerThreshold)
public void RotateModel(
Basis enemyBasis,
Vector3 cameraDirection,
float rotateUpperThreshold,
float rotateLowerThreshold,
bool isWalking)
{
var enemyForwardDirection = enemyBasis.Z;
var enemyLeftDirection = enemyBasis.X;
@@ -93,17 +101,32 @@ public partial class EnemyModelView : Node3D, IEnemyModelView
// Check if forward facing. If the dot product is -1, the enemy is facing the camera.
if (forwardDotProduct < -rotateUpperThreshold)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
{
if (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
}
// Check if backward facing. If the dot product is 1, the enemy is facing the same direction as the camera.
else if (forwardDotProduct > rotateUpperThreshold)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_BACK);
{
if (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_BACK_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_BACK);
}
else
{
// If the dot product of the perpendicular direction is positive (up to 1), the enemy is facing to the left (since it's mirrored).
AnimatedSprite.FlipH = leftDotProduct > 0;
// Check if side facing. If the dot product is close to zero in the positive or negative direction, its close to the threshold for turning.
if (Mathf.Abs(forwardDotProduct) < rotateLowerThreshold)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT);
{
if (isWalking)
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT_WALK);
else
AnimationTree.Get(PARAMETERS_PLAYBACK).As<AnimationNodeStateMachinePlayback>().Travel(IDLE_LEFT);
}
}
}
@@ -117,8 +140,10 @@ public partial class EnemyModelView : Node3D, IEnemyModelView
private void AnimationTree_AnimationFinished(StringName animName)
{
if (animName == "attack")
if (animName == PRIMARY_ATTACK || animName == SECONDARY_ATTACK || animName == PRIMARY_SKILL)
{
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
}
}
private void SetShaderValue(float shaderValue)

View File

@@ -13,4 +13,8 @@ public interface IEnemy : IKillable
public void MoveToLocation(Vector3 target, float delta);
public double CurrentHP { get; }
public void StartAttackTimer();
public void StopAttackTimer();
}

View File

@@ -19,6 +19,12 @@ public partial class FilthEater : Enemy, IHasPrimaryAttack, IHasSecondaryAttack
[Export]
public double SecondaryAttackElementalDamageBonus { get; set; } = 1.0;
public void OnReady()
{
SetPhysicsProcess(true);
EnemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
}
public override void TakeAction()
{
var rng = new RandomNumberGenerator();
@@ -35,4 +41,14 @@ public partial class FilthEater : Enemy, IHasPrimaryAttack, IHasSecondaryAttack
{
EnemyModelView.PlaySecondaryAttackAnimation();
}
private void Hitbox_AreaEntered(Area3D area)
{
var target = area.GetOwner();
if (target is IPlayer player)
{
var damage = _enemyStatResource.CurrentAttack * PrimaryAttackElementalDamageBonus;
player.TakeDamage(damage, PrimaryAttackElementalType, BattleExtensions.IsCriticalHit(_enemyStatResource.Luck));
}
}
}

View File

@@ -1,101 +1,17 @@
[gd_scene load_steps=128 format=3 uid="uid://cvk007twac22c"]
[gd_scene load_steps=10 format=3 uid="uid://cvk007twac22c"]
[ext_resource type="Script" uid="uid://cohal8w5ceneg" path="res://src/enemy/enemy_types/filth_eater/FilthEater.cs" id="1_fyc13"]
[ext_resource type="Script" uid="uid://dnkmr0eq1sij0" path="res://src/enemy/EnemyStatResource.cs" id="2_mqiog"]
[ext_resource type="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="3_ipypc"]
[ext_resource type="Texture2D" uid="uid://cx1wk7n77hdpu" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 1.png" id="4_ag3g0"]
[ext_resource type="Texture2D" uid="uid://bv4du7bb3m6ug" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 1.png" id="4_qpdqy"]
[ext_resource type="Texture2D" uid="uid://bdl6xn7wskn2r" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 2.png" id="5_881nf"]
[ext_resource type="Texture2D" uid="uid://clop1gx0va5gr" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 2.png" id="5_yyxe5"]
[ext_resource type="Texture2D" uid="uid://5iax7vcyt8qt" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 3.png" id="6_b36gv"]
[ext_resource type="Texture2D" uid="uid://ci337oq1l44ho" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 3.png" id="6_syv0y"]
[ext_resource type="Texture2D" uid="uid://dgipkalbfs1f7" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 4.png" id="7_1qmf7"]
[ext_resource type="Texture2D" uid="uid://c8wivayhgj3nd" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 4.png" id="7_pwogy"]
[ext_resource type="Texture2D" uid="uid://d4lkimsumierr" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 5.png" id="8_ax8t2"]
[ext_resource type="Texture2D" uid="uid://bf40014pkwx42" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 5.png" id="8_hj3yj"]
[ext_resource type="Texture2D" uid="uid://cbfbew6sylfa2" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 6.png" id="9_hs56h"]
[ext_resource type="Texture2D" uid="uid://dgc6rf51fioyy" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 6.png" id="9_x3ej0"]
[ext_resource type="Texture2D" uid="uid://ikiiahlk73uc" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 7.png" id="10_bhjmg"]
[ext_resource type="Texture2D" uid="uid://5s13hrs5qkka" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 7.png" id="10_uu3sx"]
[ext_resource type="Texture2D" uid="uid://dfj7678uy2pvl" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 8.png" id="11_8dbcy"]
[ext_resource type="Texture2D" uid="uid://b8owhlm8bl01c" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 8.png" id="11_qr6yl"]
[ext_resource type="Texture2D" uid="uid://dlt0nnxj35n80" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 9.png" id="12_8js62"]
[ext_resource type="Texture2D" uid="uid://dh3uwftcjqyef" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 9.png" id="12_52gnj"]
[ext_resource type="Texture2D" uid="uid://bilk4yaup2s35" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 10.png" id="13_1we81"]
[ext_resource type="Texture2D" uid="uid://bk7wcnonh4jny" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 10.png" id="13_hb0co"]
[ext_resource type="Texture2D" uid="uid://bkl5fxkcekwmp" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 11.png" id="14_i6i7p"]
[ext_resource type="Texture2D" uid="uid://ck5agp22b8gf8" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 12.png" id="15_trgeg"]
[ext_resource type="Texture2D" uid="uid://epvsktx6naj7" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 13.png" id="16_xbrkw"]
[ext_resource type="Texture2D" uid="uid://ca51hi4l16715" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 14.png" id="17_7q6uh"]
[ext_resource type="Texture2D" uid="uid://cygkdbos7lkwp" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 15.png" id="18_hkxpi"]
[ext_resource type="Texture2D" uid="uid://d03m6olqj2w17" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 1.png" id="19_sbko7"]
[ext_resource type="Texture2D" uid="uid://t31ypmfyx5j3" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 2.png" id="20_x3iqd"]
[ext_resource type="Texture2D" uid="uid://dv1gs1w0n5wkg" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 3.png" id="21_767l2"]
[ext_resource type="Texture2D" uid="uid://c25m07wbjbbes" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 4.png" id="22_6e43k"]
[ext_resource type="Texture2D" uid="uid://cu1w0lx0upcqx" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 5.png" id="23_tr33v"]
[ext_resource type="Texture2D" uid="uid://culy6xkoj4qpp" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 6.png" id="24_ny7vm"]
[ext_resource type="Texture2D" uid="uid://dbdfgak3luyys" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 1.png" id="24_us7b5"]
[ext_resource type="Texture2D" uid="uid://cn7xwqx3ha6g6" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 7.png" id="25_k2cb6"]
[ext_resource type="Texture2D" uid="uid://btvjpj3aownnx" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 2.png" id="25_u8hmy"]
[ext_resource type="Texture2D" uid="uid://but1m3lh1bs0t" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 3.png" id="26_qkjhp"]
[ext_resource type="Texture2D" uid="uid://cd8iuk2kcls5a" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 8.png" id="26_w7faw"]
[ext_resource type="Texture2D" uid="uid://dvtoifuhrpyog" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 4.png" id="27_2xal1"]
[ext_resource type="Texture2D" uid="uid://cayeaturveyf" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 9.png" id="27_sl1r7"]
[ext_resource type="Texture2D" uid="uid://3oxlqj4455f8" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 5.png" id="28_7cvs7"]
[ext_resource type="Texture2D" uid="uid://ccvpfhpkue7vh" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 10.png" id="28_py2qk"]
[ext_resource type="Texture2D" uid="uid://d4lxgwn6rikvb" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 6.png" id="29_8402p"]
[ext_resource type="Texture2D" uid="uid://j8y2un2sivdv" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 11.png" id="29_jasni"]
[ext_resource type="Texture2D" uid="uid://v53lbiw8me5m" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 1.png" id="29_tqvh6"]
[ext_resource type="Texture2D" uid="uid://bg2xs2axaulm5" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 2.png" id="30_d6cs6"]
[ext_resource type="Texture2D" uid="uid://ww6k6t8y5ksp" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 7.png" id="30_itvqp"]
[ext_resource type="Texture2D" uid="uid://by2nkoei1mwpy" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 12.png" id="30_jcbck"]
[ext_resource type="Texture2D" uid="uid://vsdbtc6ba2eh" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 8.png" id="31_6jqkx"]
[ext_resource type="Texture2D" uid="uid://wbqtaldweh1m" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 13.png" id="31_ea8qb"]
[ext_resource type="Texture2D" uid="uid://cl6b81krcl604" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 3.png" id="31_xst2h"]
[ext_resource type="Texture2D" uid="uid://di8rpvj2hmsai" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 9.png" id="32_b655w"]
[ext_resource type="Texture2D" uid="uid://kqh1umtrh00a" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 14.png" id="32_h82fp"]
[ext_resource type="Texture2D" uid="uid://bs3h416iapkfp" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 4.png" id="32_qi1g0"]
[ext_resource type="Texture2D" uid="uid://cu5c3turddubn" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 5.png" id="33_b428r"]
[ext_resource type="Texture2D" uid="uid://bmt7tyt2iu2nb" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 15.png" id="33_dfndb"]
[ext_resource type="Texture2D" uid="uid://kiko1cme3emk" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 10.png" id="33_n5gl2"]
[ext_resource type="Texture2D" uid="uid://1keo4y5rylbv" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 6.png" id="34_moswi"]
[ext_resource type="Texture2D" uid="uid://t8hshsb7dm7o" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 16.png" id="34_xibve"]
[ext_resource type="Texture2D" uid="uid://bw7hqv3mry5eq" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 17.png" id="35_bx6l1"]
[ext_resource type="Texture2D" uid="uid://qj2746r20rek" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 7.png" id="35_d1q80"]
[ext_resource type="Texture2D" uid="uid://ntpw05kexehl" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 18.png" id="36_ttpm8"]
[ext_resource type="Texture2D" uid="uid://dxi670b1ja3hp" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 8.png" id="36_ykptl"]
[ext_resource type="Texture2D" uid="uid://bu6n2fxwqihhx" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 19.png" id="37_lwexn"]
[ext_resource type="Texture2D" uid="uid://cl1srhwevno7u" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 9.png" id="37_qw2oy"]
[ext_resource type="Texture2D" uid="uid://cisx7av366072" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 10.png" id="38_hlhq5"]
[ext_resource type="Texture2D" uid="uid://bmrb1ud156sb" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 20.png" id="38_w5c4w"]
[ext_resource type="Texture2D" uid="uid://duhs4f0lupkmv" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 21.png" id="39_8rhj7"]
[ext_resource type="Texture2D" uid="uid://llvv56omqv8a" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 22.png" id="40_cjjbw"]
[ext_resource type="Texture2D" uid="uid://birlvuiwu1yft" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 23.png" id="41_mg6yl"]
[ext_resource type="Texture2D" uid="uid://dwg7g0ehtgash" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 24.png" id="42_y7n5o"]
[ext_resource type="Texture2D" uid="uid://4d1qa2rkbbqv" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 25.png" id="43_ek6mm"]
[ext_resource type="Texture2D" uid="uid://bi3juww8n01r3" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 26.png" id="44_7ap51"]
[ext_resource type="Texture2D" uid="uid://t7xfmlom7cu" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 27.png" id="45_7uf6q"]
[ext_resource type="Texture2D" uid="uid://c86knltqhwlwu" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 28.png" id="46_kqrcm"]
[ext_resource type="Texture2D" uid="uid://eps1cucptmph" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 29.png" id="47_q15vg"]
[ext_resource type="Texture2D" uid="uid://14epu41pdqsj" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 30.png" id="48_0ameu"]
[ext_resource type="Texture2D" uid="uid://bc1ncvqgwlno0" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 31.png" id="49_o0yjx"]
[ext_resource type="Texture2D" uid="uid://cb1kqd4it5se1" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 32.png" id="50_46mal"]
[ext_resource type="Texture2D" uid="uid://bo5ckfudrx7fv" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 33.png" id="51_sumwx"]
[ext_resource type="Texture2D" uid="uid://bhnttvctkibde" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 34.png" id="52_xsekn"]
[ext_resource type="Texture2D" uid="uid://dttt1ykvp0b38" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 35.png" id="53_8ndjr"]
[ext_resource type="Texture2D" uid="uid://c4rgp13cnfa3l" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 36.png" id="54_88ycb"]
[ext_resource type="Texture2D" uid="uid://clpo0cltnnh66" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 37.png" id="55_au34h"]
[ext_resource type="Texture2D" uid="uid://c6c3hdmgd7rel" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 38.png" id="56_ie8y6"]
[ext_resource type="Texture2D" uid="uid://d32ej6fsx53io" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 39.png" id="57_o526l"]
[ext_resource type="Texture2D" uid="uid://cy5dacfrmsxwe" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 40.png" id="58_4tgv5"]
[ext_resource type="PackedScene" uid="uid://bup8c4x1na3aw" path="res://src/enemy/enemy_types/filth_eater/FilthEaterModelView.tscn" id="3_rrwed"]
[ext_resource type="Script" uid="uid://dlsgyx4i1jmp3" path="res://src/enemy/EnemyLoreInfo.cs" id="4_5eid5"]
[sub_resource type="Resource" id="Resource_0y048"]
script = ExtResource("2_mqiog")
CurrentHP = 50.0
MaximumHP = 50.0
CurrentAttack = 5
CurrentAttack = 15
CurrentDefense = 5
MaxAttack = 5
MaxAttack = 15
MaxDefense = 5
ExpFromDefeat = 15
Luck = 0.05
@@ -114,496 +30,15 @@ radius = 1.0
height = 5.0
radius = 1.0
[sub_resource type="BoxShape3D" id="BoxShape3D_0yire"]
size = Vector3(1, 0.565, 2)
[sub_resource type="ViewportTexture" id="ViewportTexture_h1kaf"]
viewport_path = NodePath("Sprite3D/SubViewport")
[sub_resource type="SpriteFrames" id="SpriteFrames_ttwal"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("4_qpdqy")
}, {
"duration": 1.0,
"texture": ExtResource("5_yyxe5")
}, {
"duration": 1.0,
"texture": ExtResource("6_b36gv")
}, {
"duration": 1.0,
"texture": ExtResource("7_pwogy")
}, {
"duration": 1.0,
"texture": ExtResource("8_hj3yj")
}, {
"duration": 1.0,
"texture": ExtResource("9_x3ej0")
}, {
"duration": 1.0,
"texture": ExtResource("10_bhjmg")
}, {
"duration": 1.0,
"texture": ExtResource("11_8dbcy")
}, {
"duration": 1.0,
"texture": ExtResource("12_52gnj")
}, {
"duration": 1.0,
"texture": ExtResource("13_hb0co")
}, {
"duration": 1.0,
"texture": ExtResource("14_i6i7p")
}, {
"duration": 1.0,
"texture": ExtResource("15_trgeg")
}, {
"duration": 1.0,
"texture": ExtResource("16_xbrkw")
}, {
"duration": 1.0,
"texture": ExtResource("17_7q6uh")
}, {
"duration": 1.0,
"texture": ExtResource("18_hkxpi")
}],
"loop": true,
"name": &"attack",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("19_sbko7")
}, {
"duration": 1.0,
"texture": ExtResource("20_x3iqd")
}, {
"duration": 1.0,
"texture": ExtResource("21_767l2")
}, {
"duration": 1.0,
"texture": ExtResource("22_6e43k")
}, {
"duration": 1.0,
"texture": ExtResource("23_tr33v")
}, {
"duration": 1.0,
"texture": ExtResource("24_ny7vm")
}, {
"duration": 1.0,
"texture": ExtResource("25_k2cb6")
}, {
"duration": 1.0,
"texture": ExtResource("26_w7faw")
}, {
"duration": 1.0,
"texture": ExtResource("27_sl1r7")
}, {
"duration": 1.0,
"texture": ExtResource("28_py2qk")
}, {
"duration": 1.0,
"texture": ExtResource("29_jasni")
}, {
"duration": 1.0,
"texture": ExtResource("30_jcbck")
}, {
"duration": 1.0,
"texture": ExtResource("31_ea8qb")
}, {
"duration": 1.0,
"texture": ExtResource("32_h82fp")
}, {
"duration": 1.0,
"texture": ExtResource("33_dfndb")
}, {
"duration": 1.0,
"texture": ExtResource("34_xibve")
}, {
"duration": 1.0,
"texture": ExtResource("35_bx6l1")
}, {
"duration": 1.0,
"texture": ExtResource("36_ttpm8")
}, {
"duration": 1.0,
"texture": ExtResource("37_lwexn")
}, {
"duration": 1.0,
"texture": ExtResource("38_w5c4w")
}, {
"duration": 1.0,
"texture": ExtResource("39_8rhj7")
}, {
"duration": 1.0,
"texture": ExtResource("40_cjjbw")
}, {
"duration": 1.0,
"texture": ExtResource("41_mg6yl")
}, {
"duration": 1.0,
"texture": ExtResource("42_y7n5o")
}, {
"duration": 1.0,
"texture": ExtResource("43_ek6mm")
}, {
"duration": 1.0,
"texture": ExtResource("44_7ap51")
}, {
"duration": 1.0,
"texture": ExtResource("45_7uf6q")
}, {
"duration": 1.0,
"texture": ExtResource("46_kqrcm")
}, {
"duration": 1.0,
"texture": ExtResource("47_q15vg")
}, {
"duration": 1.0,
"texture": ExtResource("48_0ameu")
}, {
"duration": 1.0,
"texture": ExtResource("49_o0yjx")
}, {
"duration": 1.0,
"texture": ExtResource("50_46mal")
}, {
"duration": 1.0,
"texture": ExtResource("51_sumwx")
}, {
"duration": 1.0,
"texture": ExtResource("52_xsekn")
}, {
"duration": 1.0,
"texture": ExtResource("53_8ndjr")
}, {
"duration": 1.0,
"texture": ExtResource("54_88ycb")
}, {
"duration": 1.0,
"texture": ExtResource("55_au34h")
}, {
"duration": 1.0,
"texture": ExtResource("56_ie8y6")
}, {
"duration": 1.0,
"texture": ExtResource("57_o526l")
}, {
"duration": 1.0,
"texture": ExtResource("58_4tgv5")
}],
"loop": true,
"name": &"attack2",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("4_ag3g0")
}, {
"duration": 1.0,
"texture": ExtResource("5_881nf")
}, {
"duration": 1.0,
"texture": ExtResource("6_syv0y")
}, {
"duration": 1.0,
"texture": ExtResource("7_1qmf7")
}, {
"duration": 1.0,
"texture": ExtResource("8_ax8t2")
}, {
"duration": 1.0,
"texture": ExtResource("9_hs56h")
}, {
"duration": 1.0,
"texture": ExtResource("10_uu3sx")
}, {
"duration": 1.0,
"texture": ExtResource("11_qr6yl")
}, {
"duration": 1.0,
"texture": ExtResource("12_8js62")
}, {
"duration": 1.0,
"texture": ExtResource("13_1we81")
}],
"loop": true,
"name": &"idle_back_walk",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("29_tqvh6")
}, {
"duration": 1.0,
"texture": ExtResource("30_d6cs6")
}, {
"duration": 1.0,
"texture": ExtResource("31_xst2h")
}, {
"duration": 1.0,
"texture": ExtResource("32_qi1g0")
}, {
"duration": 1.0,
"texture": ExtResource("33_b428r")
}, {
"duration": 1.0,
"texture": ExtResource("34_moswi")
}, {
"duration": 1.0,
"texture": ExtResource("35_d1q80")
}, {
"duration": 1.0,
"texture": ExtResource("36_ykptl")
}, {
"duration": 1.0,
"texture": ExtResource("37_qw2oy")
}, {
"duration": 1.0,
"texture": ExtResource("38_hlhq5")
}],
"loop": true,
"name": &"idle_front_walk",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("24_us7b5")
}, {
"duration": 1.0,
"texture": ExtResource("25_u8hmy")
}, {
"duration": 1.0,
"texture": ExtResource("26_qkjhp")
}, {
"duration": 1.0,
"texture": ExtResource("27_2xal1")
}, {
"duration": 1.0,
"texture": ExtResource("28_7cvs7")
}, {
"duration": 1.0,
"texture": ExtResource("29_8402p")
}, {
"duration": 1.0,
"texture": ExtResource("30_itvqp")
}, {
"duration": 1.0,
"texture": ExtResource("31_6jqkx")
}, {
"duration": 1.0,
"texture": ExtResource("32_b655w")
}, {
"duration": 1.0,
"texture": ExtResource("33_n5gl2")
}],
"loop": true,
"name": &"idle_left_walk",
"speed": 12.0
}]
[sub_resource type="Animation" id="Animation_ch8ic"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite2D:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"attack2"]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Sprite3D/SubViewport/AnimatedSprite2D:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_1tda5"]
resource_name = "idle_back_walk"
length = 1.25001
loop_mode = 1
step = 0.0833333
[sub_resource type="Animation" id="Animation_31nry"]
resource_name = "idle_front_walk"
length = 1.25001
loop_mode = 1
step = 0.0833333
[sub_resource type="Animation" id="Animation_1870e"]
resource_name = "idle_left_walk"
length = 1.25001
loop_mode = 1
step = 0.0833333
[sub_resource type="Animation" id="Animation_ruc6s"]
resource_name = "attack"
length = 0.750008
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.25, 0.666666),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_wwl4v"]
resource_name = "attack2"
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite2D:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"attack2"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite2D:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6tj5r"]
_data = {
&"RESET": SubResource("Animation_ch8ic"),
&"idle_back_walk": SubResource("Animation_1tda5"),
&"idle_front_walk": SubResource("Animation_31nry"),
&"idle_left_walk": SubResource("Animation_1870e"),
&"primary_attack": SubResource("Animation_ruc6s"),
&"secondary_attack": SubResource("Animation_wwl4v")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_o0tmb"]
animation = &"idle_back_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a6s5c"]
animation = &"idle_front_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dvj10"]
animation = &"idle_left_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erbrx"]
animation = &"primary_attack"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_fyc13"]
animation = &"secondary_attack"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vljb2"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3xv6a"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0h1op"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_361b7"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wftla"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gqqkl"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5cj36"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4t05h"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8hgxu"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fq2yw"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yqm0k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bmy1k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0y048"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_uhpql"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_l7m4y"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_464kr"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_45of7"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_c482n"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_acrfn"]
states/End/position = Vector2(1464, 100)
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
states/idle_back_walk/position = Vector2(519, 75.9474)
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
states/idle_front_walk/position = Vector2(331, -12)
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
states/idle_left_walk/position = Vector2(331, 196.947)
states/primary_attack/node = SubResource("AnimationNodeAnimation_erbrx")
states/primary_attack/position = Vector2(1067, 33.9474)
states/secondary_attack/node = SubResource("AnimationNodeAnimation_fyc13")
states/secondary_attack/position = Vector2(1057, 151.947)
transitions = ["Start", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_vljb2"), "idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w"), "idle_back_walk", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_0y048"), "idle_left_walk", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_uhpql"), "idle_front_walk", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_l7m4y"), "secondary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_464kr"), "secondary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_45of7"), "secondary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_c482n")]
graph_offset = Vector2(-121, -17.0526)
[sub_resource type="SphereShape3D" id="SphereShape3D_0y048"]
radius = 1.0
[sub_resource type="Resource" id="Resource_fv5vf"]
script = ExtResource("4_5eid5")
Name = "Filth Eater"
Description = "This guy grosses me out."
metadata/_custom_type_script = ExtResource("4_5eid5")
[node name="FilthEater" type="RigidBody3D"]
process_mode = 1
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
@@ -647,55 +82,11 @@ unique_name_in_owner = true
wait_time = 0.8
autostart = true
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)
collision_layer = 64
collision_mask = 64
script = ExtResource("3_ipypc")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.189337, 0.217529, -1.45579)
shape = SubResource("BoxShape3D_0yire")
disabled = true
[node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true
target_position = Vector3(0, 0, -5)
collision_mask = 3
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0862446, 0)
billboard = 2
shaded = true
texture_filter = 0
render_priority = 100
texture = SubResource("ViewportTexture_h1kaf")
[node name="SubViewport" type="SubViewport" parent="Sprite3D"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
size = Vector2i(300, 300)
render_target_update_mode = 4
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprite3D/SubViewport"]
sprite_frames = SubResource("SpriteFrames_ttwal")
animation = &"attack2"
offset = Vector2(150, 150)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_6tj5r")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
unique_name_in_owner = true
root_node = NodePath("%AnimationTree/..")
tree_root = SubResource("AnimationNodeStateMachine_acrfn")
anim_player = NodePath("../AnimationPlayer")
[node name="Collision" type="Area3D" parent="."]
collision_layer = 2048
collision_mask = 0
@@ -703,3 +94,7 @@ collision_mask = 0
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.120117, 0.221246, 0)
shape = SubResource("SphereShape3D_0y048")
[node name="EnemyModelView" parent="." instance=ExtResource("3_rrwed")]
unique_name_in_owner = true
EnemyLoreInfo = SubResource("Resource_fv5vf")

View File

@@ -0,0 +1,891 @@
[gd_scene load_steps=156 format=3 uid="uid://bup8c4x1na3aw"]
[ext_resource type="Script" uid="uid://chymnqdw7hibn" path="res://src/enemy/EnemyModelView.cs" id="1_jsdjt"]
[ext_resource type="Texture2D" uid="uid://bdar3daydbkge" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 1.png" id="2_vpn42"]
[ext_resource type="Texture2D" uid="uid://o214hr614jit" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 2.png" id="3_7tggm"]
[ext_resource type="Texture2D" uid="uid://hyipatqsvukp" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 3.png" id="4_usgpm"]
[ext_resource type="Texture2D" uid="uid://sgj8yf8vsocq" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 4.png" id="5_ovibr"]
[ext_resource type="Texture2D" uid="uid://x8opkqq25djn" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 5.png" id="6_bhity"]
[ext_resource type="Texture2D" uid="uid://bmet672yyne78" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 6.png" id="7_6vimm"]
[ext_resource type="Texture2D" uid="uid://bgusk0212nx0j" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 7.png" id="8_b1kem"]
[ext_resource type="Texture2D" uid="uid://dmntrmq3btkft" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 8.png" id="9_81s5h"]
[ext_resource type="Texture2D" uid="uid://ffj2hr4qqyln" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 9.png" id="10_gbkfe"]
[ext_resource type="Texture2D" uid="uid://bm1cbtx4kywo4" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 10.png" id="11_k1s5a"]
[ext_resource type="Texture2D" uid="uid://runh757ueg5f" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 11.png" id="12_lemlj"]
[ext_resource type="Texture2D" uid="uid://cx4h5q6wueqx8" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 12.png" id="13_pl2jt"]
[ext_resource type="Texture2D" uid="uid://tc64bxenok5l" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 13.png" id="14_ptf8k"]
[ext_resource type="Texture2D" uid="uid://dnbt4acfvo84o" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 14.png" id="15_loeab"]
[ext_resource type="Texture2D" uid="uid://dqb2opf4cabl3" path="res://src/enemy/enemy_types/filth_eater/animations/SWIPE/Layer 15.png" id="16_edhco"]
[ext_resource type="Texture2D" uid="uid://bmocc6xynyify" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 1.png" id="17_nwrau"]
[ext_resource type="Texture2D" uid="uid://ctac7m3x1lvwe" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 2.png" id="18_v2qih"]
[ext_resource type="Texture2D" uid="uid://ruvsc5a5gwf3" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 3.png" id="19_4c1md"]
[ext_resource type="Texture2D" uid="uid://dll3r3dqvpej3" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 4.png" id="20_goihn"]
[ext_resource type="Texture2D" uid="uid://b8s07qwgcda0d" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 5.png" id="21_icis1"]
[ext_resource type="Texture2D" uid="uid://btqbb8eyqiubk" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 6.png" id="22_8q25d"]
[ext_resource type="Texture2D" uid="uid://jd7dvnr00ylk" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 7.png" id="23_4a5ts"]
[ext_resource type="Texture2D" uid="uid://df2bufdndmlig" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 8.png" id="24_sqr7e"]
[ext_resource type="Texture2D" uid="uid://btoq431qn2yq0" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 9.png" id="25_a0xhj"]
[ext_resource type="Texture2D" uid="uid://exbmjfi0ic63" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 10.png" id="26_fgfpp"]
[ext_resource type="Texture2D" uid="uid://ca413xrf5rfef" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 11.png" id="27_s6aj5"]
[ext_resource type="Texture2D" uid="uid://713cp3mv6b4s" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 12.png" id="28_7fcax"]
[ext_resource type="Texture2D" uid="uid://bx3l2xl5lbnvr" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 13.png" id="29_fjekd"]
[ext_resource type="Texture2D" uid="uid://ctkqec7psl27x" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 14.png" id="30_kkltw"]
[ext_resource type="Texture2D" uid="uid://ou6aoq3157xc" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 15.png" id="31_wqsiy"]
[ext_resource type="Texture2D" uid="uid://dch5ap1kutysk" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 16.png" id="32_kfb12"]
[ext_resource type="Texture2D" uid="uid://wwk6carcrhkm" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 17.png" id="33_yruiq"]
[ext_resource type="Texture2D" uid="uid://jc3w7okwwul" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 18.png" id="34_otm43"]
[ext_resource type="Texture2D" uid="uid://dr6aw5o0dlm3h" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 19.png" id="35_uibxq"]
[ext_resource type="Texture2D" uid="uid://brhq8xdhcisee" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 20.png" id="36_se6s4"]
[ext_resource type="Texture2D" uid="uid://b0f4ywlw6qjg4" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 21.png" id="37_e8my8"]
[ext_resource type="Texture2D" uid="uid://d0s5rohemvg8q" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 22.png" id="38_h8cq6"]
[ext_resource type="Texture2D" uid="uid://dh2c7ikj6k25w" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 23.png" id="39_5ws5l"]
[ext_resource type="Texture2D" uid="uid://cxi0prctj4rca" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 24.png" id="40_6w02o"]
[ext_resource type="Texture2D" uid="uid://c8qtxhl4fuhae" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 25.png" id="41_baw20"]
[ext_resource type="Texture2D" uid="uid://m3dfoeh3fcnl" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 26.png" id="42_4f1dv"]
[ext_resource type="Texture2D" uid="uid://chb8ipvevxokv" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 27.png" id="43_xsqsu"]
[ext_resource type="Texture2D" uid="uid://c6oxhyqgxjuij" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 28.png" id="44_t7txr"]
[ext_resource type="Texture2D" uid="uid://crvgrtjyt08rf" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 29.png" id="45_mmwwm"]
[ext_resource type="Texture2D" uid="uid://1vyxpd413rxp" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 30.png" id="46_uoxil"]
[ext_resource type="Texture2D" uid="uid://dniodtxp2roo3" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 31.png" id="47_6nrom"]
[ext_resource type="Texture2D" uid="uid://capmyixro7vdr" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 32.png" id="48_ibce1"]
[ext_resource type="Texture2D" uid="uid://bjlgvnqp5n1a1" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 33.png" id="49_yghoo"]
[ext_resource type="Texture2D" uid="uid://04j4uotkqg3n" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 34.png" id="50_23jqc"]
[ext_resource type="Texture2D" uid="uid://buxebs8i5ool4" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 35.png" id="51_76ppw"]
[ext_resource type="Texture2D" uid="uid://nrqph1d3u4d" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 36.png" id="52_el40o"]
[ext_resource type="Texture2D" uid="uid://qyyl8x7b5url" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 37.png" id="53_qf8ap"]
[ext_resource type="Texture2D" uid="uid://bkm8w8qju6ojd" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 38.png" id="54_xxxgj"]
[ext_resource type="Texture2D" uid="uid://d2gfdhwnlpx44" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 39.png" id="55_0wpy5"]
[ext_resource type="Texture2D" uid="uid://dfinkpqoewvdo" path="res://src/enemy/enemy_types/filth_eater/animations/TELLERIC ATTACK/Layer 40.png" id="56_tnfhd"]
[ext_resource type="Texture2D" uid="uid://8k6jpchal0r7" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 1.png" id="57_8r0mm"]
[ext_resource type="Texture2D" uid="uid://djurx0km185ki" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 2.png" id="58_2yrab"]
[ext_resource type="Texture2D" uid="uid://b3fv4r6jqr0ln" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 3.png" id="59_7707u"]
[ext_resource type="Texture2D" uid="uid://cch7x848dymwt" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 4.png" id="60_uok4m"]
[ext_resource type="Texture2D" uid="uid://bpy7rgnlxn5yj" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 5.png" id="61_tm6xl"]
[ext_resource type="Texture2D" uid="uid://bhx3isrsanrsp" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 6.png" id="62_a4tm8"]
[ext_resource type="Texture2D" uid="uid://d2mroaaomar06" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 7.png" id="63_8q0bs"]
[ext_resource type="Texture2D" uid="uid://ckspslfap4ftr" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 8.png" id="64_6lwpr"]
[ext_resource type="Texture2D" uid="uid://dlgf7ybn22qxq" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 9.png" id="65_g8bx7"]
[ext_resource type="Texture2D" uid="uid://dth3ijcas0ik3" path="res://src/enemy/enemy_types/filth_eater/animations/WALK BACK/Layer 10.png" id="66_mmiv6"]
[ext_resource type="Texture2D" uid="uid://cfsn43ur26cdm" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 1.png" id="67_aldps"]
[ext_resource type="Texture2D" uid="uid://bhvfn8ivbf4ft" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 2.png" id="68_ev7xu"]
[ext_resource type="Texture2D" uid="uid://dv3luun17uogb" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 3.png" id="69_48d2b"]
[ext_resource type="Texture2D" uid="uid://c3qps6ydrvlvb" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 4.png" id="70_mkjvr"]
[ext_resource type="Texture2D" uid="uid://l4xotnpkh1b1" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 5.png" id="71_bpq0n"]
[ext_resource type="Texture2D" uid="uid://cituuuichmghm" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 6.png" id="72_i3840"]
[ext_resource type="Texture2D" uid="uid://cskq44syg3ksp" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 7.png" id="73_dq6k8"]
[ext_resource type="Texture2D" uid="uid://d00a7mu16bm3n" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 8.png" id="74_gbdn0"]
[ext_resource type="Texture2D" uid="uid://dcq2q3n4enpf6" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 9.png" id="75_176fl"]
[ext_resource type="Texture2D" uid="uid://2p0hu703jem8" path="res://src/enemy/enemy_types/filth_eater/animations/WALK FRONT/Layer 10.png" id="76_eyg13"]
[ext_resource type="Texture2D" uid="uid://d038d3hf7652i" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 1.png" id="77_wcnf4"]
[ext_resource type="Texture2D" uid="uid://do1xtg4s3u88w" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 2.png" id="78_jkvs8"]
[ext_resource type="Texture2D" uid="uid://y6p4w8emisdp" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 3.png" id="79_1d7tg"]
[ext_resource type="Texture2D" uid="uid://d0s0vfqgxo4ch" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 4.png" id="80_kvegm"]
[ext_resource type="Texture2D" uid="uid://c1pgbp26wxpw2" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 5.png" id="81_238em"]
[ext_resource type="Texture2D" uid="uid://cnmxqnexnb6to" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 6.png" id="82_soorf"]
[ext_resource type="Texture2D" uid="uid://l6sj31rtfj0" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 7.png" id="83_yg0qa"]
[ext_resource type="Texture2D" uid="uid://nhbclk8h0vkm" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 8.png" id="84_iqg8f"]
[ext_resource type="Texture2D" uid="uid://kjq0epk60s5b" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 9.png" id="85_8eyuc"]
[ext_resource type="Texture2D" uid="uid://snhdh4kc60np" path="res://src/enemy/enemy_types/filth_eater/animations/WALK SIDE/Layer 10.png" id="86_k7dm5"]
[ext_resource type="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="87_7tggm"]
[sub_resource type="ViewportTexture" id="ViewportTexture_7tggm"]
viewport_path = NodePath("Sprite3D/SubViewport")
[sub_resource type="SpriteFrames" id="SpriteFrames_673a4"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("57_8r0mm")
}, {
"duration": 1.0,
"texture": ExtResource("58_2yrab")
}, {
"duration": 1.0,
"texture": ExtResource("59_7707u")
}, {
"duration": 1.0,
"texture": ExtResource("60_uok4m")
}, {
"duration": 1.0,
"texture": ExtResource("61_tm6xl")
}, {
"duration": 1.0,
"texture": ExtResource("62_a4tm8")
}, {
"duration": 1.0,
"texture": ExtResource("63_8q0bs")
}, {
"duration": 1.0,
"texture": ExtResource("64_6lwpr")
}, {
"duration": 1.0,
"texture": ExtResource("65_g8bx7")
}, {
"duration": 1.0,
"texture": ExtResource("66_mmiv6")
}],
"loop": true,
"name": &"idle_back_walk",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("67_aldps")
}, {
"duration": 1.0,
"texture": ExtResource("68_ev7xu")
}, {
"duration": 1.0,
"texture": ExtResource("69_48d2b")
}, {
"duration": 1.0,
"texture": ExtResource("70_mkjvr")
}, {
"duration": 1.0,
"texture": ExtResource("71_bpq0n")
}, {
"duration": 1.0,
"texture": ExtResource("72_i3840")
}, {
"duration": 1.0,
"texture": ExtResource("73_dq6k8")
}, {
"duration": 1.0,
"texture": ExtResource("74_gbdn0")
}, {
"duration": 1.0,
"texture": ExtResource("75_176fl")
}, {
"duration": 1.0,
"texture": ExtResource("76_eyg13")
}],
"loop": true,
"name": &"idle_front_walk",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("77_wcnf4")
}, {
"duration": 1.0,
"texture": ExtResource("78_jkvs8")
}, {
"duration": 1.0,
"texture": ExtResource("79_1d7tg")
}, {
"duration": 1.0,
"texture": ExtResource("80_kvegm")
}, {
"duration": 1.0,
"texture": ExtResource("81_238em")
}, {
"duration": 1.0,
"texture": ExtResource("82_soorf")
}, {
"duration": 1.0,
"texture": ExtResource("83_yg0qa")
}, {
"duration": 1.0,
"texture": ExtResource("84_iqg8f")
}, {
"duration": 1.0,
"texture": ExtResource("85_8eyuc")
}, {
"duration": 1.0,
"texture": ExtResource("86_k7dm5")
}],
"loop": true,
"name": &"idle_side_walk",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("2_vpn42")
}, {
"duration": 1.0,
"texture": ExtResource("3_7tggm")
}, {
"duration": 1.0,
"texture": ExtResource("4_usgpm")
}, {
"duration": 1.0,
"texture": ExtResource("5_ovibr")
}, {
"duration": 1.0,
"texture": ExtResource("6_bhity")
}, {
"duration": 1.0,
"texture": ExtResource("7_6vimm")
}, {
"duration": 1.0,
"texture": ExtResource("8_b1kem")
}, {
"duration": 1.0,
"texture": ExtResource("9_81s5h")
}, {
"duration": 1.0,
"texture": ExtResource("10_gbkfe")
}, {
"duration": 1.0,
"texture": ExtResource("11_k1s5a")
}, {
"duration": 1.0,
"texture": ExtResource("12_lemlj")
}, {
"duration": 1.0,
"texture": ExtResource("13_pl2jt")
}, {
"duration": 1.0,
"texture": ExtResource("14_ptf8k")
}, {
"duration": 1.0,
"texture": ExtResource("15_loeab")
}, {
"duration": 1.0,
"texture": ExtResource("16_edhco")
}],
"loop": true,
"name": &"primary_attack",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("17_nwrau")
}, {
"duration": 1.0,
"texture": ExtResource("18_v2qih")
}, {
"duration": 1.0,
"texture": ExtResource("19_4c1md")
}, {
"duration": 1.0,
"texture": ExtResource("20_goihn")
}, {
"duration": 1.0,
"texture": ExtResource("21_icis1")
}, {
"duration": 1.0,
"texture": ExtResource("22_8q25d")
}, {
"duration": 1.0,
"texture": ExtResource("23_4a5ts")
}, {
"duration": 1.0,
"texture": ExtResource("24_sqr7e")
}, {
"duration": 1.0,
"texture": ExtResource("25_a0xhj")
}, {
"duration": 1.0,
"texture": ExtResource("26_fgfpp")
}, {
"duration": 1.0,
"texture": ExtResource("27_s6aj5")
}, {
"duration": 1.0,
"texture": ExtResource("28_7fcax")
}, {
"duration": 1.0,
"texture": ExtResource("29_fjekd")
}, {
"duration": 1.0,
"texture": ExtResource("30_kkltw")
}, {
"duration": 1.0,
"texture": ExtResource("31_wqsiy")
}, {
"duration": 1.0,
"texture": ExtResource("32_kfb12")
}, {
"duration": 1.0,
"texture": ExtResource("33_yruiq")
}, {
"duration": 1.0,
"texture": ExtResource("34_otm43")
}, {
"duration": 1.0,
"texture": ExtResource("35_uibxq")
}, {
"duration": 1.0,
"texture": ExtResource("36_se6s4")
}, {
"duration": 1.0,
"texture": ExtResource("37_e8my8")
}, {
"duration": 1.0,
"texture": ExtResource("38_h8cq6")
}, {
"duration": 1.0,
"texture": ExtResource("39_5ws5l")
}, {
"duration": 1.0,
"texture": ExtResource("40_6w02o")
}, {
"duration": 1.0,
"texture": ExtResource("41_baw20")
}, {
"duration": 1.0,
"texture": ExtResource("42_4f1dv")
}, {
"duration": 1.0,
"texture": ExtResource("43_xsqsu")
}, {
"duration": 1.0,
"texture": ExtResource("44_t7txr")
}, {
"duration": 1.0,
"texture": ExtResource("45_mmwwm")
}, {
"duration": 1.0,
"texture": ExtResource("46_uoxil")
}, {
"duration": 1.0,
"texture": ExtResource("47_6nrom")
}, {
"duration": 1.0,
"texture": ExtResource("48_ibce1")
}, {
"duration": 1.0,
"texture": ExtResource("49_yghoo")
}, {
"duration": 1.0,
"texture": ExtResource("50_23jqc")
}, {
"duration": 1.0,
"texture": ExtResource("51_76ppw")
}, {
"duration": 1.0,
"texture": ExtResource("52_el40o")
}, {
"duration": 1.0,
"texture": ExtResource("53_qf8ap")
}, {
"duration": 1.0,
"texture": ExtResource("54_xxxgj")
}, {
"duration": 1.0,
"texture": ExtResource("55_0wpy5")
}, {
"duration": 1.0,
"texture": ExtResource("56_tnfhd")
}],
"loop": true,
"name": &"secondary_attack",
"speed": 12.0
}]
[sub_resource type="BoxShape3D" id="BoxShape3D_usgpm"]
size = Vector3(1, 0.565, 2)
[sub_resource type="Animation" id="Animation_b157j"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back_walk"]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_b1kem"]
resource_name = "idle_back"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_l5yrx"]
resource_name = "idle_walk_back"
length = 0.750008
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 5, 6, 7, 8, 9]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back_walk"]
}
[sub_resource type="Animation" id="Animation_bhity"]
resource_name = "idle_front"
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0333333),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front_walk"]
}
[sub_resource type="Animation" id="Animation_ttnhl"]
resource_name = "idle_walk_front"
length = 0.833342
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666667, 0.75),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front_walk"]
}
[sub_resource type="Animation" id="Animation_6vimm"]
resource_name = "idle_left"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_side_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_ovibr"]
resource_name = "idle_side_walk"
length = 0.750008
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_side_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666667, 0.75),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
[sub_resource type="Animation" id="Animation_7tggm"]
resource_name = "primary_attack"
length = 1.08334
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"primary_attack"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666667, 0.75, 0.833333, 0.916667, 1),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.588603, 0.833705),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_usgpm"]
resource_name = "secondary_attack"
length = 3.25001
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"secondary_attack"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666667, 0.75, 0.833333, 0.916667, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333, 1.91667, 2, 2.08333, 2.16667, 2.25, 2.33333, 2.41667, 2.5, 2.58333, 2.66667, 2.75, 2.83333, 2.91667, 3, 3.08333, 3.17257, 3.25),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 1.75453, 2.16781),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tbr0l"]
_data = {
&"RESET": SubResource("Animation_b157j"),
&"idle_back": SubResource("Animation_b1kem"),
&"idle_back_walk": SubResource("Animation_l5yrx"),
&"idle_front": SubResource("Animation_bhity"),
&"idle_front_walk": SubResource("Animation_ttnhl"),
&"idle_left": SubResource("Animation_6vimm"),
&"idle_left_walk": SubResource("Animation_ovibr"),
&"primary_attack": SubResource("Animation_7tggm"),
&"secondary_attack": SubResource("Animation_usgpm")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_7tggm"]
animation = &"idle_back"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_o0tmb"]
animation = &"idle_back_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_usgpm"]
animation = &"idle_front"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a6s5c"]
animation = &"idle_front_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ovibr"]
animation = &"idle_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dvj10"]
animation = &"idle_left_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erbrx"]
animation = &"primary_attack"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_fyc13"]
animation = &"secondary_attack"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3xv6a"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0h1op"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_361b7"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wftla"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gqqkl"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5cj36"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4t05h"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8hgxu"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fq2yw"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yqm0k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bmy1k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7tggm"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_usgpm"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ovibr"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bhity"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_6vimm"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_b1kem"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_81s5h"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gbkfe"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_k1s5a"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_lemlj"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_pl2jt"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ptf8k"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_loeab"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_edhco"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_nwrau"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_v2qih"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4c1md"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_goihn"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_icis1"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8q25d"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4a5ts"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_sqr7e"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_a0xhj"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fgfpp"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_s6aj5"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7fcax"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fjekd"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kkltw"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wqsiy"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kfb12"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yruiq"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_otm43"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_uibxq"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_se6s4"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_q1wiq"]
states/End/position = Vector2(1463, 100)
states/Start/position = Vector2(-63, 66)
states/idle_back/node = SubResource("AnimationNodeAnimation_7tggm")
states/idle_back/position = Vector2(20, 5.18198)
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
states/idle_back_walk/position = Vector2(636, 52.9474)
states/idle_front/node = SubResource("AnimationNodeAnimation_usgpm")
states/idle_front/position = Vector2(74, 156.947)
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
states/idle_front_walk/position = Vector2(359, -71)
states/idle_left/node = SubResource("AnimationNodeAnimation_ovibr")
states/idle_left/position = Vector2(108, -126)
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
states/idle_left_walk/position = Vector2(347, 243.947)
states/primary_attack/node = SubResource("AnimationNodeAnimation_erbrx")
states/primary_attack/position = Vector2(1919, -71)
states/secondary_attack/node = SubResource("AnimationNodeAnimation_fyc13")
states/secondary_attack/position = Vector2(1933, 308.947)
transitions = ["idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w"), "idle_front_walk", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_7tggm"), "idle_back_walk", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_usgpm"), "idle_left_walk", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_ovibr"), "secondary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_bhity"), "secondary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_6vimm"), "secondary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_b1kem"), "Start", "idle_front", SubResource("AnimationNodeStateMachineTransition_81s5h"), "idle_front", "idle_left", SubResource("AnimationNodeStateMachineTransition_gbkfe"), "idle_front", "idle_back", SubResource("AnimationNodeStateMachineTransition_k1s5a"), "idle_left", "idle_front", SubResource("AnimationNodeStateMachineTransition_lemlj"), "idle_left", "idle_back", SubResource("AnimationNodeStateMachineTransition_pl2jt"), "idle_back", "idle_front", SubResource("AnimationNodeStateMachineTransition_ptf8k"), "idle_back", "idle_left", SubResource("AnimationNodeStateMachineTransition_loeab"), "idle_back", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_edhco"), "idle_back", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_nwrau"), "idle_back", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_v2qih"), "idle_left", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_4c1md"), "idle_left", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_goihn"), "idle_left", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_icis1"), "idle_front", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8q25d"), "idle_front", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_4a5ts"), "idle_front", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_sqr7e"), "idle_front", "primary_attack", SubResource("AnimationNodeStateMachineTransition_a0xhj"), "idle_back", "primary_attack", SubResource("AnimationNodeStateMachineTransition_fgfpp"), "idle_left", "primary_attack", SubResource("AnimationNodeStateMachineTransition_s6aj5"), "primary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_7fcax"), "primary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_fjekd"), "primary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_kkltw"), "idle_front", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_wqsiy"), "idle_left", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_kfb12"), "idle_back", "secondary_attack", SubResource("AnimationNodeStateMachineTransition_yruiq"), "secondary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_otm43"), "secondary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_uibxq"), "secondary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_se6s4")]
graph_offset = Vector2(-121, 94.2273)
[node name="EnemyModelView" type="Node3D"]
script = ExtResource("1_jsdjt")
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.0862446, 0)
billboard = 2
shaded = true
texture_filter = 0
render_priority = 100
texture = SubResource("ViewportTexture_7tggm")
[node name="SubViewport" type="SubViewport" parent="Sprite3D"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
size = Vector2i(300, 300)
render_target_update_mode = 4
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite3D/SubViewport"]
unique_name_in_owner = true
position = Vector2(150, 150)
sprite_frames = SubResource("SpriteFrames_673a4")
animation = &"idle_back_walk"
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)
collision_layer = 64
collision_mask = 64
script = ExtResource("87_7tggm")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.189337, 0.217529, -1.45579)
shape = SubResource("BoxShape3D_usgpm")
disabled = true
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_tbr0l")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
unique_name_in_owner = true
root_node = NodePath("%AnimationTree/..")
tree_root = SubResource("AnimationNodeStateMachine_q1wiq")
anim_player = NodePath("../AnimationPlayer")

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bv4du7bb3m6ug"
uid="uid://bdar3daydbkge"
path="res://.godot/imported/Layer 1.png-6df3dd98cc9b3179807aae903731666d.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bk7wcnonh4jny"
uid="uid://bm1cbtx4kywo4"
path="res://.godot/imported/Layer 10.png-d362cc35aa808124e03539ff3b9212f2.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bkl5fxkcekwmp"
uid="uid://runh757ueg5f"
path="res://.godot/imported/Layer 11.png-0ae7fe13f924d5a6bba2a7b4b046da1f.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ck5agp22b8gf8"
uid="uid://cx4h5q6wueqx8"
path="res://.godot/imported/Layer 12.png-68dbc39bd922beee27d7e1d667078d6c.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://epvsktx6naj7"
uid="uid://tc64bxenok5l"
path="res://.godot/imported/Layer 13.png-4ce03ec7c10976e909aa14c97ec6fa93.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ca51hi4l16715"
uid="uid://dnbt4acfvo84o"
path="res://.godot/imported/Layer 14.png-23bcb1609577b6a6369edf178b4e7309.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cygkdbos7lkwp"
uid="uid://dqb2opf4cabl3"
path="res://.godot/imported/Layer 15.png-adffb8fd5e148efa818d2fce32b57e94.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://clop1gx0va5gr"
uid="uid://o214hr614jit"
path="res://.godot/imported/Layer 2.png-7045832edf464fd4dd0418aa6e3bb1e2.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://5iax7vcyt8qt"
uid="uid://hyipatqsvukp"
path="res://.godot/imported/Layer 3.png-21a1ff227e59da118df0874eeadde6b4.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c8wivayhgj3nd"
uid="uid://sgj8yf8vsocq"
path="res://.godot/imported/Layer 4.png-5dc4dc8398f07b7c30cab1c9ec30e8ae.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bf40014pkwx42"
uid="uid://x8opkqq25djn"
path="res://.godot/imported/Layer 5.png-53d3803755a0527f9e40920da3595d8c.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dgc6rf51fioyy"
uid="uid://bmet672yyne78"
path="res://.godot/imported/Layer 6.png-dd7ae15bdf8b762d9aba30338d70b916.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ikiiahlk73uc"
uid="uid://bgusk0212nx0j"
path="res://.godot/imported/Layer 7.png-0a72eeed9b2ffe942521419b93f596d4.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dfj7678uy2pvl"
uid="uid://dmntrmq3btkft"
path="res://.godot/imported/Layer 8.png-b58c658ebf9e6e6a00ef54bfdccd143f.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dh3uwftcjqyef"
uid="uid://ffj2hr4qqyln"
path="res://.godot/imported/Layer 9.png-a9cdc75ccb301c198fb92a5636c3adae.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d03m6olqj2w17"
uid="uid://bmocc6xynyify"
path="res://.godot/imported/Layer 1.png-d07e11351e6260f4d9af1590eea7ef1d.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ccvpfhpkue7vh"
uid="uid://exbmjfi0ic63"
path="res://.godot/imported/Layer 10.png-d6c946a827ce39563272afae63270733.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://j8y2un2sivdv"
uid="uid://ca413xrf5rfef"
path="res://.godot/imported/Layer 11.png-26a7b42f29c6fc910f4060424b152075.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://by2nkoei1mwpy"
uid="uid://713cp3mv6b4s"
path="res://.godot/imported/Layer 12.png-b81deb218d64464f74cfdef2aa311a81.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://wbqtaldweh1m"
uid="uid://bx3l2xl5lbnvr"
path="res://.godot/imported/Layer 13.png-c01657dee6c3351b2713a98394fb7f37.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://kqh1umtrh00a"
uid="uid://ctkqec7psl27x"
path="res://.godot/imported/Layer 14.png-36b2167a60d87f755be70da52222b7b3.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bmt7tyt2iu2nb"
uid="uid://ou6aoq3157xc"
path="res://.godot/imported/Layer 15.png-a0424091cebcec72043146ffe2200fa0.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://t8hshsb7dm7o"
uid="uid://dch5ap1kutysk"
path="res://.godot/imported/Layer 16.png-2905d8662e870f57ad5cd094bd0e6851.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bw7hqv3mry5eq"
uid="uid://wwk6carcrhkm"
path="res://.godot/imported/Layer 17.png-e865b9b48dc46fdd9bae865763a53221.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ntpw05kexehl"
uid="uid://jc3w7okwwul"
path="res://.godot/imported/Layer 18.png-d7fa650b1830f31e634aef69735a7498.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bu6n2fxwqihhx"
uid="uid://dr6aw5o0dlm3h"
path="res://.godot/imported/Layer 19.png-673ea0d3dce2d6cb8673a0f1206c53b1.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://t31ypmfyx5j3"
uid="uid://ctac7m3x1lvwe"
path="res://.godot/imported/Layer 2.png-da316ffac7c63abedc13bd869bc5b43e.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bmrb1ud156sb"
uid="uid://brhq8xdhcisee"
path="res://.godot/imported/Layer 20.png-4281651de5f42244f4f845782400d157.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://duhs4f0lupkmv"
uid="uid://b0f4ywlw6qjg4"
path="res://.godot/imported/Layer 21.png-f9ef2445fafc97506bf8e36c8e22b538.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://llvv56omqv8a"
uid="uid://d0s5rohemvg8q"
path="res://.godot/imported/Layer 22.png-3a7014d2efd2bbea339b8af5c49c0239.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://birlvuiwu1yft"
uid="uid://dh2c7ikj6k25w"
path="res://.godot/imported/Layer 23.png-73a4d52733c6be3574e43036764db5ae.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dwg7g0ehtgash"
uid="uid://cxi0prctj4rca"
path="res://.godot/imported/Layer 24.png-a708d480c8bbe17913c2e689426142d4.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://4d1qa2rkbbqv"
uid="uid://c8qtxhl4fuhae"
path="res://.godot/imported/Layer 25.png-9d2f645da262c031751a7b2314364a1a.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bi3juww8n01r3"
uid="uid://m3dfoeh3fcnl"
path="res://.godot/imported/Layer 26.png-e29dce7342c3060b5023d6fc09042386.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://t7xfmlom7cu"
uid="uid://chb8ipvevxokv"
path="res://.godot/imported/Layer 27.png-bad2ab85dc1e731c01ba0ab2cfb51dc6.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c86knltqhwlwu"
uid="uid://c6oxhyqgxjuij"
path="res://.godot/imported/Layer 28.png-09fb2b108de714a173bfb0e9fcf5615e.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://eps1cucptmph"
uid="uid://crvgrtjyt08rf"
path="res://.godot/imported/Layer 29.png-b9b2dce66adaa07d0e40f9eb7ac4f5a9.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dv1gs1w0n5wkg"
uid="uid://ruvsc5a5gwf3"
path="res://.godot/imported/Layer 3.png-ea7baa985541a01282c499379b5056a8.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://14epu41pdqsj"
uid="uid://1vyxpd413rxp"
path="res://.godot/imported/Layer 30.png-cea791142ec87bcb8e6c72d425b64715.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bc1ncvqgwlno0"
uid="uid://dniodtxp2roo3"
path="res://.godot/imported/Layer 31.png-b4f496c35a19f812d0e403692d0e8b3c.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cb1kqd4it5se1"
uid="uid://capmyixro7vdr"
path="res://.godot/imported/Layer 32.png-d23b18ff504aa9af6459ee1cefd3cede.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bo5ckfudrx7fv"
uid="uid://bjlgvnqp5n1a1"
path="res://.godot/imported/Layer 33.png-e2328d3fa8fde7cc5f6b7dfcd0775b8c.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bhnttvctkibde"
uid="uid://04j4uotkqg3n"
path="res://.godot/imported/Layer 34.png-93bc22f843335b125259e844b7c85840.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dttt1ykvp0b38"
uid="uid://buxebs8i5ool4"
path="res://.godot/imported/Layer 35.png-8e5f997bfbd105ff454dfa4e72dd9283.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c4rgp13cnfa3l"
uid="uid://nrqph1d3u4d"
path="res://.godot/imported/Layer 36.png-ff0342aaeff7ad5226ab5c9f351a57ee.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://clpo0cltnnh66"
uid="uid://qyyl8x7b5url"
path="res://.godot/imported/Layer 37.png-599f31ef81c93d2a1eff81dadf21d1d2.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c6c3hdmgd7rel"
uid="uid://bkm8w8qju6ojd"
path="res://.godot/imported/Layer 38.png-68217dec623edcd5f7f8a3223b16f39f.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d32ej6fsx53io"
uid="uid://d2gfdhwnlpx44"
path="res://.godot/imported/Layer 39.png-bad3d689861dd5d1fa8b9f4e7fcb079f.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c25m07wbjbbes"
uid="uid://dll3r3dqvpej3"
path="res://.godot/imported/Layer 4.png-3c01c4f44683f912a20909dbff7b21c5.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cy5dacfrmsxwe"
uid="uid://dfinkpqoewvdo"
path="res://.godot/imported/Layer 40.png-e9fb78e0d68cbfdbdf7109ed3322915f.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cu1w0lx0upcqx"
uid="uid://b8s07qwgcda0d"
path="res://.godot/imported/Layer 5.png-87c3db9613295416a0ecc8559b1ca433.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://culy6xkoj4qpp"
uid="uid://btqbb8eyqiubk"
path="res://.godot/imported/Layer 6.png-7eacdb0d93225b15ea9e6d4bf9cea57c.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cn7xwqx3ha6g6"
uid="uid://jd7dvnr00ylk"
path="res://.godot/imported/Layer 7.png-072424e6af0afa2f8acee700b8cf8355.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cd8iuk2kcls5a"
uid="uid://df2bufdndmlig"
path="res://.godot/imported/Layer 8.png-5739701c8d79114f329a0dbb41d4dcb5.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cayeaturveyf"
uid="uid://btoq431qn2yq0"
path="res://.godot/imported/Layer 9.png-9998235fa0be6f1e351f290d7a16ebc3.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cx1wk7n77hdpu"
uid="uid://8k6jpchal0r7"
path="res://.godot/imported/Layer 1.png-61623fbdabecec48b58faad4301f0cf0.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bilk4yaup2s35"
uid="uid://dth3ijcas0ik3"
path="res://.godot/imported/Layer 10.png-9b0a47c1fb8363d5b6dd27d160d4571b.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bdl6xn7wskn2r"
uid="uid://djurx0km185ki"
path="res://.godot/imported/Layer 2.png-95550d2410448800f59774868e97bdc8.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ci337oq1l44ho"
uid="uid://b3fv4r6jqr0ln"
path="res://.godot/imported/Layer 3.png-234616afc795fd2b64b38bfc40aa4d7e.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dgipkalbfs1f7"
uid="uid://cch7x848dymwt"
path="res://.godot/imported/Layer 4.png-1c60ae0e1a838bc89cf53d9171e74b4a.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d4lkimsumierr"
uid="uid://bpy7rgnlxn5yj"
path="res://.godot/imported/Layer 5.png-75e2efc54d4e7fd18b5e1abe774207e4.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cbfbew6sylfa2"
uid="uid://bhx3isrsanrsp"
path="res://.godot/imported/Layer 6.png-e0e0ed0bbab709ce5f7203b1f965fbf6.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://5s13hrs5qkka"
uid="uid://d2mroaaomar06"
path="res://.godot/imported/Layer 7.png-9170971ef16ae62ce8fbe314948888b1.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b8owhlm8bl01c"
uid="uid://ckspslfap4ftr"
path="res://.godot/imported/Layer 8.png-b6eb2127ab6a71e5ba70196c6bbb5b6c.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dlt0nnxj35n80"
uid="uid://dlgf7ybn22qxq"
path="res://.godot/imported/Layer 9.png-be1f39071c30907306bd621b1f6e565a.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://v53lbiw8me5m"
uid="uid://cfsn43ur26cdm"
path="res://.godot/imported/Layer 1.png-0fc715e6d24fb606d38d98dbad8b389b.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cisx7av366072"
uid="uid://2p0hu703jem8"
path="res://.godot/imported/Layer 10.png-331a47a5ae4ee326a65ca851f7f14bad.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bg2xs2axaulm5"
uid="uid://bhvfn8ivbf4ft"
path="res://.godot/imported/Layer 2.png-722912ed068caf19a674d5723b998880.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cl6b81krcl604"
uid="uid://dv3luun17uogb"
path="res://.godot/imported/Layer 3.png-e5d6eef5a4f3fce7e3623f68bfe58960.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bs3h416iapkfp"
uid="uid://c3qps6ydrvlvb"
path="res://.godot/imported/Layer 4.png-900106d391e489efca608517c8276d22.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cu5c3turddubn"
uid="uid://l4xotnpkh1b1"
path="res://.godot/imported/Layer 5.png-ccaf7fda30e11414d007c994aeec0fba.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://1keo4y5rylbv"
uid="uid://cituuuichmghm"
path="res://.godot/imported/Layer 6.png-b61805ab50d4963587c6eec969a9b1e2.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://qj2746r20rek"
uid="uid://cskq44syg3ksp"
path="res://.godot/imported/Layer 7.png-a67edf8ad847814920b162e0ba196c2b.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dxi670b1ja3hp"
uid="uid://d00a7mu16bm3n"
path="res://.godot/imported/Layer 8.png-c224a88034d316e2a05bcf1acf06c80b.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cl1srhwevno7u"
uid="uid://dcq2q3n4enpf6"
path="res://.godot/imported/Layer 9.png-129f31fa23ab007c34b9784fdad7d140.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dbdfgak3luyys"
uid="uid://d038d3hf7652i"
path="res://.godot/imported/Layer 1.png-2af52a93fe130f87eee4f702b270eb81.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://kiko1cme3emk"
uid="uid://snhdh4kc60np"
path="res://.godot/imported/Layer 10.png-535dcc86e13e1b5bcefffaa908977c61.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://btvjpj3aownnx"
uid="uid://do1xtg4s3u88w"
path="res://.godot/imported/Layer 2.png-2048fc08985f8df1b35bcc7f2d215056.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://but1m3lh1bs0t"
uid="uid://y6p4w8emisdp"
path="res://.godot/imported/Layer 3.png-f29c8d8f9ac40599c2c68d07983d57a9.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dvtoifuhrpyog"
uid="uid://d0s0vfqgxo4ch"
path="res://.godot/imported/Layer 4.png-464735584d136537153e04d6fa29ae0b.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://3oxlqj4455f8"
uid="uid://c1pgbp26wxpw2"
path="res://.godot/imported/Layer 5.png-181f77cb2889ea376fab331b073c3f3a.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d4lxgwn6rikvb"
uid="uid://cnmxqnexnb6to"
path="res://.godot/imported/Layer 6.png-55432acb8f8504b93cfde4dee5fc78e0.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ww6k6t8y5ksp"
uid="uid://l6sj31rtfj0"
path="res://.godot/imported/Layer 7.png-d1a7631694b6d71fd9d56b118601ee40.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://vsdbtc6ba2eh"
uid="uid://nhbclk8h0vkm"
path="res://.godot/imported/Layer 8.png-11394063c51446c140df4ca66a3e3783.ctex"
metadata={
"vram_texture": false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://di8rpvj2hmsai"
uid="uid://kjq0epk60s5b"
path="res://.godot/imported/Layer 9.png-e25d454cdf437d36eacdabaf8d7bc473.ctex"
metadata={
"vram_texture": false

View File

@@ -15,13 +15,7 @@ public partial class Michael : Enemy, IHasPrimaryAttack
public void OnReady()
{
SetPhysicsProcess(true);
EnemyModelView.AnimationTree.AnimationFinished += AnimationPlayer_AnimationFinished;
}
private void AnimationPlayer_AnimationFinished(StringName animName)
{
if (animName == "primary_attack")
EnemyModelView.Hitbox.AreaEntered -= Hitbox_AreaEntered;
EnemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
}
public override void TakeAction()
@@ -30,7 +24,6 @@ public partial class Michael : Enemy, IHasPrimaryAttack
}
public void PrimaryAttack()
{
EnemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
EnemyModelView.PlayPrimaryAttackAnimation();
}

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=101 format=3 uid="uid://bjg8wyvp8q6oc"]
[gd_scene load_steps=129 format=3 uid="uid://bjg8wyvp8q6oc"]
[ext_resource type="Script" uid="uid://chymnqdw7hibn" path="res://src/enemy/EnemyModelView.cs" id="1_iajg3"]
[ext_resource type="Texture2D" uid="uid://clpqh2pyqljkn" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (1).png" id="2_3g180"]
@@ -476,30 +476,129 @@ tracks/2/keys = {
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
[sub_resource type="Animation" id="Animation_3g180"]
resource_name = "idle_back"
length = 1.91667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back_walk"]
}
[sub_resource type="Animation" id="Animation_fssmb"]
resource_name = "idle_front"
length = 1.91667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.8333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front_walk"]
}
[sub_resource type="Animation" id="Animation_oy7vk"]
resource_name = "idle_left"
length = 1.91667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_left_walk"]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_346xs"]
_data = {
&"RESET": SubResource("Animation_41ppy"),
&"idle_back": SubResource("Animation_3g180"),
&"idle_back_walk": SubResource("Animation_ppbeh"),
&"idle_front": SubResource("Animation_fssmb"),
&"idle_front_walk": SubResource("Animation_3dffb"),
&"idle_left": SubResource("Animation_oy7vk"),
&"idle_left_walk": SubResource("Animation_0qxqf"),
&"primary_attack": SubResource("Animation_0k3e8")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_3g180"]
animation = &"idle_back"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_o0tmb"]
animation = &"idle_back_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_fssmb"]
animation = &"idle_front"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a6s5c"]
animation = &"idle_front_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_oy7vk"]
animation = &"idle_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dvj10"]
animation = &"idle_left_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erbrx"]
animation = &"primary_attack"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vljb2"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3xv6a"]
switch_mode = 1
@@ -535,18 +634,91 @@ switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7jsk6"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_nntdb"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_1br6i"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2m7tq"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_d2pq5"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_p18ld"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8kbdd"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_nb2qv"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_nqbx0"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4depw"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fegyx"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_eh46c"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_dgujy"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_6ogef"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_cvhi5"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_e3x3h"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mqikf"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ide2k"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_114qx"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_smnr6"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_g6ih4"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_odtr7"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_off5l"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_r23qr"]
states/End/position = Vector2(1464, 100)
states/Start/position = Vector2(-44, 64)
states/idle_back/node = SubResource("AnimationNodeAnimation_3g180")
states/idle_back/position = Vector2(414, -131.053)
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
states/idle_back_walk/position = Vector2(490, 92.9474)
states/idle_back_walk/position = Vector2(542, 140.947)
states/idle_front/node = SubResource("AnimationNodeAnimation_fssmb")
states/idle_front/position = Vector2(14, 10.9474)
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
states/idle_front_walk/position = Vector2(331, -12)
states/idle_front_walk/position = Vector2(509, -31)
states/idle_left/node = SubResource("AnimationNodeAnimation_oy7vk")
states/idle_left/position = Vector2(77, 151.947)
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
states/idle_left_walk/position = Vector2(331, 196.947)
states/idle_left_walk/position = Vector2(318, 248.947)
states/primary_attack/node = SubResource("AnimationNodeAnimation_erbrx")
states/primary_attack/position = Vector2(1151, 86.9474)
transitions = ["Start", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_vljb2"), "idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w")]
graph_offset = Vector2(-190, -62.0526)
transitions = ["idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w"), "Start", "idle_front", SubResource("AnimationNodeStateMachineTransition_7jsk6"), "idle_front", "idle_back", SubResource("AnimationNodeStateMachineTransition_nntdb"), "idle_front", "idle_left", SubResource("AnimationNodeStateMachineTransition_1br6i"), "idle_left", "idle_front", SubResource("AnimationNodeStateMachineTransition_2m7tq"), "idle_back", "idle_front", SubResource("AnimationNodeStateMachineTransition_d2pq5"), "idle_back", "idle_left", SubResource("AnimationNodeStateMachineTransition_p18ld"), "idle_left", "idle_back", SubResource("AnimationNodeStateMachineTransition_8kbdd"), "idle_front", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_nb2qv"), "idle_front_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_nqbx0"), "idle_front", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_4depw"), "idle_back_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_fegyx"), "idle_front", "primary_attack", SubResource("AnimationNodeStateMachineTransition_eh46c"), "primary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_dgujy"), "idle_back", "primary_attack", SubResource("AnimationNodeStateMachineTransition_6ogef"), "primary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_cvhi5"), "idle_left", "primary_attack", SubResource("AnimationNodeStateMachineTransition_e3x3h"), "primary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_mqikf"), "idle_left", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_ide2k"), "idle_left_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_114qx"), "idle_left", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_smnr6"), "idle_back_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_g6ih4"), "idle_left", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_odtr7"), "idle_front_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_off5l")]
graph_offset = Vector2(-190, -100.703)
[node name="EnemyModelView" type="Node3D"]
script = ExtResource("1_iajg3")

View File

@@ -17,13 +17,7 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack
public void OnReady()
{
SetPhysicsProcess(true);
EnemyModelView.AnimationTree.AnimationFinished += AnimationPlayer_AnimationFinished;
}
private void AnimationPlayer_AnimationFinished(StringName animName)
{
if (animName == "primary_attack")
EnemyModelView.Hitbox.AreaEntered -= Hitbox_AreaEntered;
EnemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
}
public override void TakeAction()
@@ -32,7 +26,6 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack
}
public void PrimaryAttack()
{
EnemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
EnemyModelView.PlayPrimaryAttackAnimation();
}

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=86 format=3 uid="uid://bli0t0d6ommvi"]
[gd_scene load_steps=122 format=3 uid="uid://bli0t0d6ommvi"]
[ext_resource type="Script" uid="uid://chymnqdw7hibn" path="res://src/enemy/EnemyModelView.cs" id="1_0vbio"]
[ext_resource type="Texture2D" uid="uid://dd0ia6isdqg61" path="res://src/enemy/enemy_types/sproingy/animations/ATTACK/Layer 1.png" id="1_pbx41"]
@@ -293,6 +293,36 @@ tracks/2/keys = {
"values": [true]
}
[sub_resource type="Animation" id="Animation_d5bmw"]
resource_name = "idle_back"
length = 1.16667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [&"idle_back_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
}
[sub_resource type="Animation" id="Animation_1tda5"]
resource_name = "idle_back_walk"
length = 1.16667
@@ -323,6 +353,36 @@ tracks/1/keys = {
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
}
[sub_resource type="Animation" id="Animation_53wuj"]
resource_name = "idle_front"
length = 1.16667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [&"idle_front_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666667, 0.75, 0.833333, 0.916667, 1, 1.08333, 1.16667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
}
[sub_resource type="Animation" id="Animation_31nry"]
resource_name = "idle_front_walk"
length = 1.16667
@@ -353,6 +413,36 @@ tracks/1/keys = {
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
}
[sub_resource type="Animation" id="Animation_fpvxl"]
resource_name = "idle_left"
length = 1.25001
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite3D/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [&"idle_left_walk"]
}
[sub_resource type="Animation" id="Animation_1870e"]
resource_name = "idle_left_walk"
length = 1.25001
@@ -427,27 +517,36 @@ tracks/2/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6tj5r"]
_data = {
&"RESET": SubResource("Animation_ch8ic"),
&"idle_back": SubResource("Animation_d5bmw"),
&"idle_back_walk": SubResource("Animation_1tda5"),
&"idle_front": SubResource("Animation_53wuj"),
&"idle_front_walk": SubResource("Animation_31nry"),
&"idle_left": SubResource("Animation_fpvxl"),
&"idle_left_walk": SubResource("Animation_1870e"),
&"primary_attack": SubResource("Animation_ruc6s")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_53wuj"]
animation = &"idle_back"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_o0tmb"]
animation = &"idle_back_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_d5bmw"]
animation = &"idle_front"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a6s5c"]
animation = &"idle_front_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_fpvxl"]
animation = &"idle_left"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dvj10"]
animation = &"idle_left_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erbrx"]
animation = &"primary_attack"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vljb2"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3xv6a"]
switch_mode = 1
@@ -483,18 +582,107 @@ switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qq0ru"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_c54uj"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_qmo72"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_jyt1n"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5un2v"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2x3nl"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_6a5nw"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0jqty"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yjcrh"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2ybyh"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_n454k"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vrcjv"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_h1yxw"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kg6hd"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_25i3y"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5g722"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_a6y4x"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7y7m4"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ldcvv"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_aalmk"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2le5t"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4nmgu"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mw5r6"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_jbtxi"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mjxlk"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_al2xs"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_afa0q"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_irq32"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_2khaq"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_k7x0x"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_noc6c"]
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_d5bmw"]
states/End/position = Vector2(1464, 100)
states/End/position = Vector2(1466, 104)
states/Start/position = Vector2(92, 119)
states/idle_back/node = SubResource("AnimationNodeAnimation_53wuj")
states/idle_back/position = Vector2(180.116, -34)
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
states/idle_back_walk/position = Vector2(491, 92.9474)
states/idle_back_walk/position = Vector2(676, -8.0526)
states/idle_front/node = SubResource("AnimationNodeAnimation_d5bmw")
states/idle_front/position = Vector2(403.116, 43.9474)
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
states/idle_front_walk/position = Vector2(331, -12)
states/idle_front_walk/position = Vector2(644, -100)
states/idle_left/node = SubResource("AnimationNodeAnimation_fpvxl")
states/idle_left/position = Vector2(367.116, 119)
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
states/idle_left_walk/position = Vector2(331, 196.947)
states/idle_left_walk/position = Vector2(438, 242.947)
states/primary_attack/node = SubResource("AnimationNodeAnimation_erbrx")
states/primary_attack/position = Vector2(1024, 92.9474)
transitions = ["Start", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_vljb2"), "idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w")]
graph_offset = Vector2(46.1163, -62.0526)
transitions = ["idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "primary_attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "primary_attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "primary_attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "primary_attack", SubResource("AnimationNodeStateMachineTransition_mxl7w"), "Start", "idle_front", SubResource("AnimationNodeStateMachineTransition_qq0ru"), "idle_front", "idle_back", SubResource("AnimationNodeStateMachineTransition_c54uj"), "idle_back", "idle_left", SubResource("AnimationNodeStateMachineTransition_qmo72"), "idle_left", "idle_front", SubResource("AnimationNodeStateMachineTransition_jyt1n"), "idle_left", "idle_back", SubResource("AnimationNodeStateMachineTransition_5un2v"), "idle_back", "idle_front", SubResource("AnimationNodeStateMachineTransition_2x3nl"), "idle_front", "idle_left", SubResource("AnimationNodeStateMachineTransition_6a5nw"), "idle_back", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0jqty"), "idle_front", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_yjcrh"), "idle_back", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_2ybyh"), "idle_left", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_n454k"), "idle_back_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_vrcjv"), "idle_back_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_h1yxw"), "idle_back_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_kg6hd"), "idle_back", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_25i3y"), "idle_left", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_5g722"), "idle_front", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_a6y4x"), "idle_left_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_7y7m4"), "idle_left_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_ldcvv"), "idle_left_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_aalmk"), "idle_front_walk", "idle_back", SubResource("AnimationNodeStateMachineTransition_2le5t"), "idle_front_walk", "idle_front", SubResource("AnimationNodeStateMachineTransition_4nmgu"), "idle_front_walk", "idle_left", SubResource("AnimationNodeStateMachineTransition_mw5r6"), "idle_front", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_jbtxi"), "idle_left", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_mjxlk"), "idle_back", "primary_attack", SubResource("AnimationNodeStateMachineTransition_al2xs"), "primary_attack", "idle_back", SubResource("AnimationNodeStateMachineTransition_afa0q"), "idle_front", "primary_attack", SubResource("AnimationNodeStateMachineTransition_irq32"), "primary_attack", "idle_front", SubResource("AnimationNodeStateMachineTransition_2khaq"), "idle_left", "primary_attack", SubResource("AnimationNodeStateMachineTransition_k7x0x"), "primary_attack", "idle_left", SubResource("AnimationNodeStateMachineTransition_noc6c")]
graph_offset = Vector2(46.1163, -73.3694)
[node name="EnemyModelView" type="Node3D"]
script = ExtResource("1_0vbio")

View File

@@ -15,8 +15,14 @@ public partial class EnemyLogic
public readonly record struct EnemyDefeated();
public readonly record struct StartPatrol;
public readonly record struct StopMoving;
public readonly record struct PatrolToRandomSpot(Vector3 PatrolTarget);
public readonly record struct AttackTimer;
public readonly record struct StartAttacking;
}
}

View File

@@ -1,19 +1,27 @@
@startuml EnemyLogic
state "EnemyLogic State" as GameJamDungeon_EnemyLogic_State {
state "Alive" as GameJamDungeon_EnemyLogic_State_Alive {
state "Attacking" as GameJamDungeon_EnemyLogic_State_Attacking
state "FollowPlayer" as GameJamDungeon_EnemyLogic_State_FollowPlayer
state "Idle" as GameJamDungeon_EnemyLogic_State_Idle
state "Patrolling" as GameJamDungeon_EnemyLogic_State_Patrolling
}
state "Defeated" as GameJamDungeon_EnemyLogic_State_Defeated
}
GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_Alive : AttackTimer
GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_Attacking : AttackTimer
GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_Attacking : StartAttacking
GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_Defeated : EnemyDefeated
GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_FollowPlayer : Alerted
GameJamDungeon_EnemyLogic_State_Alive --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_Attacking --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_FollowPlayer --> GameJamDungeon_EnemyLogic_State_FollowPlayer : PhysicsTick
GameJamDungeon_EnemyLogic_State_FollowPlayer --> GameJamDungeon_EnemyLogic_State_Idle : LostPlayer
GameJamDungeon_EnemyLogic_State_Idle --> GameJamDungeon_EnemyLogic_State_FollowPlayer : Alerted
GameJamDungeon_EnemyLogic_State_Idle --> GameJamDungeon_EnemyLogic_State_Idle : PatrolToRandomSpot
GameJamDungeon_EnemyLogic_State_Idle --> GameJamDungeon_EnemyLogic_State_Idle : PhysicsTick
GameJamDungeon_EnemyLogic_State_FollowPlayer --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_Idle --> GameJamDungeon_EnemyLogic_State_Patrolling : StartPatrol
GameJamDungeon_EnemyLogic_State_Patrolling --> GameJamDungeon_EnemyLogic_State_Idle : StopMoving
GameJamDungeon_EnemyLogic_State_Patrolling --> GameJamDungeon_EnemyLogic_State_Patrolling : PatrolToRandomSpot
GameJamDungeon_EnemyLogic_State_Patrolling --> GameJamDungeon_EnemyLogic_State_Patrolling : PhysicsTick
GameJamDungeon_EnemyLogic_State_Alive : OnAttackTimer → TakeAction
GameJamDungeon_EnemyLogic_State_Alive : OnEnemyDefeated → Defeated

View File

@@ -7,12 +7,12 @@ public partial class EnemyLogic
public partial record State
{
[Meta, Id("enemy_logic_state_alive")]
public abstract partial record Alive : State, IGet<Input.AttackTimer>, IGet<Input.EnemyDefeated>
public abstract partial record Alive : State, IGet<Input.AttackTimer>, IGet<Input.EnemyDefeated>, IGet<Input.StopMoving>, IGet<Input.StartAttacking>, IGet<Input.Alerted>
{
public Transition On(in Input.AttackTimer input)
{
Output(new Output.TakeAction());
return ToSelf();
return To<Attacking>();
}
public Transition On(in Input.EnemyDefeated input)
@@ -20,6 +20,21 @@ public partial class EnemyLogic
Output(new Output.Defeated());
return To<Defeated>();
}
public Transition On(in Input.StopMoving input)
{
return To<Idle>();
}
public Transition On(in Input.StartAttacking input)
{
return To<Attacking>();
}
public Transition On(in Input.Alerted _)
{
return To<FollowPlayer>();
}
}
}
}

View File

@@ -0,0 +1,19 @@
using Chickensoft.Introspection;
namespace GameJamDungeon;
public partial class EnemyLogic
{
public partial record State
{
[Meta, Id("enemy_logic_state_attacking")]
public partial record Attacking : Alive, IGet<Input.StopMoving>
{
public Attacking()
{
OnAttach(() => Get<IEnemy>().StartAttackTimer());
OnDetach(() => Get<IEnemy>().StopAttackTimer());
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More