Eden pillar rotation finally works i'm going to die now
@@ -11,7 +11,7 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="GameJamDungeon"
|
config/name="GameJamDungeon"
|
||||||
run/main_scene="uid://d1gjaijijd5ot"
|
run/main_scene="uid://bc1sp6xwe0j65"
|
||||||
config/features=PackedStringArray("4.4", "C#", "GL Compatibility")
|
config/features=PackedStringArray("4.4", "C#", "GL Compatibility")
|
||||||
boot_splash/show_image=false
|
boot_splash/show_image=false
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
|
|
||||||
[Dependency] IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
|
[Dependency] IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
|
||||||
|
|
||||||
[Dependency] protected IPlayer Player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Exports
|
#region Exports
|
||||||
@@ -59,7 +59,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
_enemyLogic = new EnemyLogic();
|
_enemyLogic = new EnemyLogic();
|
||||||
_enemyLogic.Set(_enemyStatResource);
|
_enemyLogic.Set(_enemyStatResource);
|
||||||
_enemyLogic.Set(this as IEnemy);
|
_enemyLogic.Set(this as IEnemy);
|
||||||
_enemyLogic.Set(Player);
|
_enemyLogic.Set(_player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnResolved()
|
public void OnResolved()
|
||||||
@@ -95,7 +95,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
|
|
||||||
var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer;
|
var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer;
|
||||||
if (_enemyModelView is EnemyModelView2D enemyModelView2D)
|
if (_enemyModelView is EnemyModelView2D enemyModelView2D)
|
||||||
enemyModelView2D.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z, isWalking);
|
enemyModelView2D.RotateModel(GlobalTransform.Basis, -_player.CurrentBasis.Z, isWalking);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -135,8 +135,8 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
_enemyModelView.PlayHitAnimation();
|
_enemyModelView.PlayHitAnimation();
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
|
|
||||||
if (Player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage))
|
if (_player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage))
|
||||||
Player.Stats.SetCurrentHP(Player.Stats.CurrentHP.Value - 5);
|
_player.Stats.SetCurrentHP(_player.Stats.CurrentHP.Value - 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,17 +170,17 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
|
|
||||||
private void OnAttackTimeout()
|
private void OnAttackTimeout()
|
||||||
{
|
{
|
||||||
if (GlobalPosition.DistanceTo(Player.CurrentPosition) > 5f)
|
//if (GlobalPosition.DistanceTo(_player.CurrentPosition) > 5f)
|
||||||
{
|
//{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
// _enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
|
||||||
var rng = new RandomNumberGenerator();
|
var rng = new RandomNumberGenerator();
|
||||||
rng.Randomize();
|
rng.Randomize();
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.AttackTimer());
|
_enemyLogic.Input(new EnemyLogic.Input.AttackTimer());
|
||||||
_attackTimer.Stop();
|
_attackTimer.Stop();
|
||||||
_attackTimer.WaitTime = rng.RandfRange(2f, 5.0f);
|
//_attackTimer.WaitTime = rng.RandfRange(2f, 5.0f);
|
||||||
_attackTimer.Start();
|
_attackTimer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,8 +189,8 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
|||||||
var overlappingBodies = _lineOfSight.GetOverlappingBodies();
|
var overlappingBodies = _lineOfSight.GetOverlappingBodies();
|
||||||
foreach (var _ in overlappingBodies)
|
foreach (var _ in overlappingBodies)
|
||||||
{
|
{
|
||||||
if (_raycast.GlobalPosition != Player.CurrentPosition)
|
if (_raycast.GlobalPosition != _player.CurrentPosition)
|
||||||
_raycast.LookAt(Player.CurrentPosition, Vector3.Up);
|
_raycast.LookAt(_player.CurrentPosition, Vector3.Up);
|
||||||
_raycast.ForceRaycastUpdate();
|
_raycast.ForceRaycastUpdate();
|
||||||
if (_raycast.IsColliding())
|
if (_raycast.IsColliding())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,8 +24,6 @@ public partial class EnemyModelView3D : Node3D, IEnemyModelView
|
|||||||
|
|
||||||
[Export] public EnemyLoreInfo EnemyLoreInfo { get; set; } = default!;
|
[Export] public EnemyLoreInfo EnemyLoreInfo { get; set; } = default!;
|
||||||
|
|
||||||
[Node] public IHitbox Hitbox { get; set; } = default!;
|
|
||||||
|
|
||||||
[Node] private MeshInstance3D _meshInstance { get; set; } = default!;
|
[Node] private MeshInstance3D _meshInstance { get; set; } = default!;
|
||||||
|
|
||||||
[Node] private AnimationPlayer _animationPlayer { get; set; } = default!;
|
[Node] private AnimationPlayer _animationPlayer { get; set; } = default!;
|
||||||
@@ -36,6 +34,7 @@ public partial class EnemyModelView3D : Node3D, IEnemyModelView
|
|||||||
|
|
||||||
public void PlayPrimaryAttackAnimation()
|
public void PlayPrimaryAttackAnimation()
|
||||||
{
|
{
|
||||||
|
_animationPlayer.Play(PRIMARY_ATTACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PlaySecondaryAttackAnimation()
|
public void PlaySecondaryAttackAnimation()
|
||||||
|
|||||||
@@ -14,6 +14,4 @@ public interface IEnemyModelView : INode3D
|
|||||||
public void PlayHitAnimation();
|
public void PlayHitAnimation();
|
||||||
|
|
||||||
public void PlayDeathAnimation();
|
public void PlayDeathAnimation();
|
||||||
|
|
||||||
public IHitbox Hitbox { get; }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,18 +20,18 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack, ICanPatrol
|
|||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(true);
|
SetPhysicsProcess(true);
|
||||||
_enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
|
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 3.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 3.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 30f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 30f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 5f)
|
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
|
|
||||||
_navigationAgentClient.CalculateVelocity(GlobalPosition);
|
_navigationAgentClient.CalculateVelocity(GlobalPosition);
|
||||||
|
|||||||
@@ -18,18 +18,18 @@ public partial class Michael : Enemy, IHasPrimaryAttack, ICanPatrol
|
|||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(true);
|
SetPhysicsProcess(true);
|
||||||
_enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
|
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 3f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 3f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 45f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 3f)
|
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 3f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
|
|
||||||
_navigationAgentClient.CalculateVelocity(GlobalPosition);
|
_navigationAgentClient.CalculateVelocity(GlobalPosition);
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ public partial class FilthEater : Enemy, IHasPrimaryAttack, IHasSecondaryAttack,
|
|||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(true);
|
SetPhysicsProcess(true);
|
||||||
_enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
|
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 45f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,18 +23,18 @@ public partial class Ballos : Enemy, IHasPrimaryAttack, IHasSecondaryAttack
|
|||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(true);
|
SetPhysicsProcess(true);
|
||||||
_enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
|
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 45f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ public partial class Chariot : Enemy, IHasPrimaryAttack
|
|||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 45f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,18 +17,18 @@ public partial class Chinte : Enemy, IHasPrimaryAttack
|
|||||||
public void OnReady()
|
public void OnReady()
|
||||||
{
|
{
|
||||||
SetPhysicsProcess(true);
|
SetPhysicsProcess(true);
|
||||||
_enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered;
|
((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPhysicsProcess(double delta)
|
public void OnPhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) < 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(Player.CurrentPosition) > 45f)
|
if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 45f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
_enemyLogic.Input(new EnemyLogic.Input.LostPlayer());
|
||||||
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
|
if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f)
|
||||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
[gd_scene load_steps=7 format=3 uid="uid://cmvimr0pvsgqy"]
|
[gd_scene load_steps=15 format=3 uid="uid://cmvimr0pvsgqy"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://d2m7esc5ypl7y" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs" id="1_p8jc1"]
|
[ext_resource type="Script" uid="uid://d2m7esc5ypl7y" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs" id="1_p8jc1"]
|
||||||
[ext_resource type="Resource" uid="uid://dj10m1aktmu6j" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillar.tres" id="2_nveg0"]
|
[ext_resource type="Resource" uid="uid://dj10m1aktmu6j" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillar.tres" id="2_nveg0"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cktycana6xxtp" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn" id="3_o285m"]
|
[ext_resource type="PackedScene" uid="uid://cktycana6xxtp" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn" id="3_o285m"]
|
||||||
|
[ext_resource type="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="4_5fako"]
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_p8jc1"]
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_p8jc1"]
|
||||||
height = 3.08643
|
height = 3.08643
|
||||||
@@ -16,6 +17,33 @@ radius = 0.202148
|
|||||||
height = 3.98828
|
height = 3.98828
|
||||||
radius = 0.886719
|
radius = 0.886719
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_xqm7x"]
|
||||||
|
size = Vector3(3.7605, 2.43953, 12.6547)
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5fako"]
|
||||||
|
albedo_color = Color(1, 0, 0, 1)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_xqm7x"]
|
||||||
|
material = SubResource("StandardMaterial3D_5fako")
|
||||||
|
top_radius = 0.25
|
||||||
|
bottom_radius = 0.25
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p8jc1"]
|
||||||
|
albedo_color = Color(0, 0, 1, 1)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_nveg0"]
|
||||||
|
material = SubResource("StandardMaterial3D_p8jc1")
|
||||||
|
top_radius = 0.25
|
||||||
|
bottom_radius = 0.25
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_iu5yw"]
|
||||||
|
albedo_color = Color(0, 1, 0, 1)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_nc31c"]
|
||||||
|
material = SubResource("StandardMaterial3D_iu5yw")
|
||||||
|
top_radius = 0.25
|
||||||
|
bottom_radius = 0.25
|
||||||
|
|
||||||
[node name="Eden Pillar" type="CharacterBody3D"]
|
[node name="Eden Pillar" type="CharacterBody3D"]
|
||||||
collision_layer = 10
|
collision_layer = 10
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
@@ -33,7 +61,7 @@ transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0, 0, 0)
|
|||||||
|
|
||||||
[node name="LineOfSight" type="Area3D" parent="."]
|
[node name="LineOfSight" type="Area3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
|
transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 0, 0, 0)
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
collision_mask = 2
|
collision_mask = 2
|
||||||
|
|
||||||
@@ -43,14 +71,9 @@ shape = SubResource("CylinderShape3D_nveg0")
|
|||||||
|
|
||||||
[node name="AttackTimer" type="Timer" parent="."]
|
[node name="AttackTimer" type="Timer" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
wait_time = 0.8
|
wait_time = 10.0
|
||||||
autostart = true
|
autostart = true
|
||||||
|
|
||||||
[node name="Raycast" type="RayCast3D" parent="."]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
target_position = Vector3(0, 0, -5)
|
|
||||||
collision_mask = 3
|
|
||||||
|
|
||||||
[node name="Collision" type="Area3D" parent="."]
|
[node name="Collision" type="Area3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.832948, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.832948, 0)
|
||||||
collision_layer = 2048
|
collision_layer = 2048
|
||||||
@@ -59,3 +82,65 @@ collision_mask = 0
|
|||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.321487, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.321487, 0)
|
||||||
shape = SubResource("CylinderShape3D_o285m")
|
shape = SubResource("CylinderShape3D_o285m")
|
||||||
|
|
||||||
|
[node name="Raycast" type="RayCast3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
target_position = Vector3(0, 1, 3)
|
||||||
|
collision_mask = 3
|
||||||
|
|
||||||
|
[node name="PrimaryHitbox" type="Area3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.152949, 0, 13.6635)
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 64
|
||||||
|
script = ExtResource("4_5fako")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="PrimaryHitbox"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0939882, 1.15479, -6.78312)
|
||||||
|
shape = SubResource("BoxShape3D_xqm7x")
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="PrimaryHitbox"]
|
||||||
|
transform = Transform3D(0.998663, 0.0516911, -2.25949e-09, 0, -4.37114e-08, -1, -0.0516911, 0.998663, -4.3653e-08, 0.176435, 0, -12.0372)
|
||||||
|
mesh = SubResource("CylinderMesh_xqm7x")
|
||||||
|
|
||||||
|
[node name="SecondaryHitbox" type="Area3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(-0.529919, 0, 0.848048, 0, 1, 0, -0.848048, 0, -0.529919, -1.2426, 0, -6.37338)
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 64
|
||||||
|
script = ExtResource("4_5fako")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="SecondaryHitbox"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.1241, 1.15479, 3.09662)
|
||||||
|
shape = SubResource("BoxShape3D_xqm7x")
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="SecondaryHitbox"]
|
||||||
|
transform = Transform3D(0.991132, -0.132879, 5.80834e-09, 0, -4.37114e-08, -1, 0.132879, 0.991132, -4.33238e-08, -6.30106, 0, -0.622331)
|
||||||
|
mesh = SubResource("CylinderMesh_nveg0")
|
||||||
|
|
||||||
|
[node name="TertiaryHitbox" type="Area3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(-0.529919, 0, -0.848048, 0, 1, 0, 0.848048, 0, -0.529919, 1.50517, 0, -7.06323)
|
||||||
|
collision_layer = 64
|
||||||
|
collision_mask = 64
|
||||||
|
script = ExtResource("4_5fako")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="TertiaryHitbox"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.81698, 1.15479, 3.06516)
|
||||||
|
shape = SubResource("BoxShape3D_xqm7x")
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="TertiaryHitbox"]
|
||||||
|
transform = Transform3D(0.995479, 0.0949771, -4.15158e-09, 0, -4.37114e-08, -1, -0.0949771, 0.995479, -4.35138e-08, 6.95263, 0, -1.22368)
|
||||||
|
mesh = SubResource("CylinderMesh_nc31c")
|
||||||
|
|
||||||
|
[node name="RayCast3D2" type="RayCast3D" parent="."]
|
||||||
|
target_position = Vector3(3, 1, -1.85)
|
||||||
|
|
||||||
|
[node name="RayCast3D" type="RayCast3D" parent="."]
|
||||||
|
target_position = Vector3(-3, 1, -1.85)
|
||||||
|
|
||||||
|
[node name="Rotation" type="Node3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|||||||
@@ -1,16 +1,89 @@
|
|||||||
using Chickensoft.AutoInject;
|
using Chickensoft.AutoInject;
|
||||||
using Chickensoft.Introspection;
|
using Chickensoft.Introspection;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace GameJamDungeon;
|
namespace GameJamDungeon;
|
||||||
|
|
||||||
[Meta(typeof(IAutoNode))]
|
[Meta(typeof(IAutoNode))]
|
||||||
public partial class EdenPillar : Enemy
|
public partial class EdenPillar : Enemy, IHasPrimaryAttack, IHasSecondaryAttack, IHasTertiaryAttack
|
||||||
{
|
{
|
||||||
public override void _Notification(int what) => this.Notify(what);
|
public override void _Notification(int what) => this.Notify(what);
|
||||||
|
|
||||||
|
[Export] public ElementType PrimaryAttackElementalType { get; set; } = ElementType.None;
|
||||||
|
|
||||||
|
[Export] public double PrimaryAttackElementalDamageBonus { get; set; } = 1.15f;
|
||||||
|
|
||||||
|
[Export] public ElementType SecondaryAttackElementalType { get; set; } = ElementType.None;
|
||||||
|
|
||||||
|
[Export] public double SecondaryAttackElementalDamageBonus { get; set; } = 1.15f;
|
||||||
|
|
||||||
|
[Export] public ElementType TertiaryAttackElementalType { get; set; } = ElementType.None;
|
||||||
|
|
||||||
|
[Export] public double TertiaryAttackElementalDamageBonus { get; set; } = 1.15f;
|
||||||
|
|
||||||
|
[Node] private IHitbox _primaryHitbox { get; set; } = default!;
|
||||||
|
[Node] private IHitbox _secondaryHitbox { get; set; } = default!;
|
||||||
|
[Node] private IHitbox _tertiaryHitbox { get; set; } = default!;
|
||||||
|
|
||||||
|
[Node] private Node3D _rotation { get; set; } = default!;
|
||||||
|
|
||||||
|
private float _primaryAngle = 0;
|
||||||
|
private float _secondaryAngle = -122;
|
||||||
|
private float _tertiaryAngle = 122;
|
||||||
|
|
||||||
|
private float _targetAngle;
|
||||||
|
|
||||||
public override void _PhysicsProcess(double delta)
|
public override void _PhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
RotateY(0.01f);
|
_enemyLogic.Input(new EnemyLogic.Input.PhysicsTick(delta));
|
||||||
|
_enemyLogic.Input(new EnemyLogic.Input.StartAttacking());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void _Process(double delta)
|
||||||
|
{
|
||||||
|
Basis = Basis.Slerp(_rotation.Basis, 0.003f).Orthonormalized();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void TakeAction()
|
||||||
|
{
|
||||||
|
var rng = new RandomNumberGenerator();
|
||||||
|
var options = new List<Action>() { PrimaryAttack, SecondaryAttack, TertiaryAttack };
|
||||||
|
var selection = rng.RandWeighted([1, 1, 1]);
|
||||||
|
options[(int)selection].Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PrimaryAttack()
|
||||||
|
{
|
||||||
|
var target = new Vector3(_player.CurrentPosition.X, Position.Y, _player.CurrentPosition.Z);
|
||||||
|
_rotation.LookAt(target, Vector3.Up, true);
|
||||||
|
_rotation.RotateY(Rotation.Y + Mathf.DegToRad(_primaryAngle));
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => RotateTowardsPlayer(x)), Rotation.Y, _rotation.Rotation.Y, 5f);
|
||||||
|
//tweener.TweenCallback(Callable.From(QueueFree));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SecondaryAttack()
|
||||||
|
{
|
||||||
|
var target = new Vector3(_player.CurrentPosition.X, Position.Y, _player.CurrentPosition.Z);
|
||||||
|
_rotation.LookAt(target, Vector3.Up, true);
|
||||||
|
_rotation.RotateY(Rotation.Y + Mathf.DegToRad(_secondaryAngle));
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => RotateTowardsPlayer(x)), Rotation.Y, _rotation.Rotation.Y, 5f);
|
||||||
|
//tweener.TweenCallback(Callable.From(QueueFree));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TertiaryAttack()
|
||||||
|
{
|
||||||
|
var target = new Vector3(_player.CurrentPosition.X, Position.Y, _player.CurrentPosition.Z);
|
||||||
|
_rotation.LookAt(target, Vector3.Up, true);
|
||||||
|
_rotation.RotateY(Rotation.Y + Mathf.DegToRad(_tertiaryAngle));
|
||||||
|
var tweener = GetTree().CreateTween();
|
||||||
|
tweener.TweenMethod(Callable.From((float x) => RotateTowardsPlayer(x)), Rotation.Y, _rotation.Rotation.Y, 5f);
|
||||||
|
//tweener.TweenCallback(Callable.From(QueueFree));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RotateTowardsPlayer(float angle) => Rotation = new Vector3(Rotation.X, angle, Rotation.Z);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
[gd_scene load_steps=21 format=4 uid="uid://cktycana6xxtp"]
|
[gd_scene load_steps=20 format=4 uid="uid://cktycana6xxtp"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://cvst7yhbw0sxt" path="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg" id="1_1kpl1"]
|
[ext_resource type="Texture2D" uid="uid://cvst7yhbw0sxt" path="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg" id="1_1kpl1"]
|
||||||
[ext_resource type="Script" uid="uid://ckv5dmrw6pvn6" path="res://src/enemy/EnemyModelView3D.cs" id="1_11eq8"]
|
[ext_resource type="Script" uid="uid://ckv5dmrw6pvn6" path="res://src/enemy/EnemyModelView3D.cs" id="1_11eq8"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bnbveonobhyhc" path="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png" id="2_11eq8"]
|
[ext_resource type="Texture2D" uid="uid://bnbveonobhyhc" path="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png" id="2_11eq8"]
|
||||||
[ext_resource type="Material" uid="uid://brwu51ylevbmg" path="res://src/enemy/enemy_types/14. horse_head/BossHit.tres" id="2_xf2ga"]
|
[ext_resource type="Material" uid="uid://brwu51ylevbmg" path="res://src/enemy/enemy_types/14. horse_head/BossHit.tres" id="2_xf2ga"]
|
||||||
[ext_resource type="Texture2D" uid="uid://by7k6crx6fmpv" path="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg" id="3_oxjs8"]
|
[ext_resource type="Texture2D" uid="uid://by7k6crx6fmpv" path="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg" id="3_oxjs8"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cc1tenm6p3pca" path="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg" id="4_xf2ga"]
|
[ext_resource type="Texture2D" uid="uid://cc1tenm6p3pca" path="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg" id="4_xf2ga"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bydfevqfagpq8" path="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png" id="5_qhmtu"]
|
[ext_resource type="Texture2D" uid="uid://bydfevqfagpq8" path="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png" id="5_qhmtu"]
|
||||||
[ext_resource type="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="7_oxjs8"]
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_drix8"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_drix8"]
|
||||||
resource_name = "DARKER"
|
resource_name = "DARKER"
|
||||||
@@ -164,50 +163,6 @@ _surfaces = [{
|
|||||||
blend_shape_mode = 0
|
blend_shape_mode = 0
|
||||||
shadow_mesh = SubResource("ArrayMesh_pocxj")
|
shadow_mesh = SubResource("ArrayMesh_pocxj")
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_xf2ga"]
|
|
||||||
size = Vector3(3.7605, 2.43953, 12.6547)
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_xf2ga"]
|
|
||||||
resource_name = "take_damage"
|
|
||||||
length = 0.250008
|
|
||||||
step = 0.0833333
|
|
||||||
tracks/0/type = "value"
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/path = NodePath("MeshInstance:material_override")
|
|
||||||
tracks/0/interp = 1
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PackedFloat32Array(0, 0.25),
|
|
||||||
"transitions": PackedFloat32Array(1, 1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [ExtResource("2_xf2ga"), null]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("MeshInstance:material_override:transparency")
|
|
||||||
tracks/1/interp = 1
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [1]
|
|
||||||
}
|
|
||||||
tracks/2/type = "value"
|
|
||||||
tracks/2/imported = false
|
|
||||||
tracks/2/enabled = true
|
|
||||||
tracks/2/path = NodePath("MeshInstance:transparency")
|
|
||||||
tracks/2/interp = 1
|
|
||||||
tracks/2/loop_wrap = true
|
|
||||||
tracks/2/keys = {
|
|
||||||
"times": PackedFloat32Array(0, 0.0833333, 0.25),
|
|
||||||
"transitions": PackedFloat32Array(1, 1, 1),
|
|
||||||
"update": 0,
|
|
||||||
"values": [0.0, 0.9, 0.25]
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_qhmtu"]
|
[sub_resource type="Animation" id="Animation_qhmtu"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
@@ -275,10 +230,55 @@ tracks/1/keys = {
|
|||||||
"values": [ExtResource("2_xf2ga")]
|
"values": [ExtResource("2_xf2ga")]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_6jr7s"]
|
||||||
|
resource_name = "primary_attack"
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_xf2ga"]
|
||||||
|
resource_name = "take_damage"
|
||||||
|
length = 0.250008
|
||||||
|
step = 0.0833333
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("MeshInstance:material_override")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.25),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [ExtResource("2_xf2ga"), null]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("MeshInstance:material_override:transparency")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [1]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("MeshInstance:transparency")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.0833333, 0.25),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 0.9, 0.0]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mi284"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mi284"]
|
||||||
_data = {
|
_data = {
|
||||||
&"RESET": SubResource("Animation_qhmtu"),
|
&"RESET": SubResource("Animation_qhmtu"),
|
||||||
&"defeated": SubResource("Animation_mi284"),
|
&"defeated": SubResource("Animation_mi284"),
|
||||||
|
&"primary_attack": SubResource("Animation_6jr7s"),
|
||||||
&"take_damage": SubResource("Animation_xf2ga")
|
&"take_damage": SubResource("Animation_xf2ga")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,18 +291,6 @@ transform = Transform3D(0, 0.629497, 0.347758, -0.719167, 0, 0, 0, -0.347758, 0.
|
|||||||
mesh = SubResource("ArrayMesh_8pgwy")
|
mesh = SubResource("ArrayMesh_8pgwy")
|
||||||
skeleton = NodePath("")
|
skeleton = NodePath("")
|
||||||
|
|
||||||
[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("7_oxjs8")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0939882, 1.15479, -6.78312)
|
|
||||||
shape = SubResource("BoxShape3D_xf2ga")
|
|
||||||
disabled = true
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
libraries = {
|
libraries = {
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ importer="scene"
|
|||||||
importer_version=1
|
importer_version=1
|
||||||
type="PackedScene"
|
type="PackedScene"
|
||||||
uid="uid://di0p6rdjw2s85"
|
uid="uid://di0p6rdjw2s85"
|
||||||
path="res://.godot/imported/PILLAR EXPORT 1.glb-f4cad65c662305d7fc7f74d6d8dc0d91.scn"
|
path="res://.godot/imported/PILLAR EXPORT 1.glb-bfc66d3e7255967f66430f576d8b93e9.scn"
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb"
|
source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb"
|
||||||
dest_files=["res://.godot/imported/PILLAR EXPORT 1.glb-f4cad65c662305d7fc7f74d6d8dc0d91.scn"]
|
dest_files=["res://.godot/imported/PILLAR EXPORT 1.glb-bfc66d3e7255967f66430f576d8b93e9.scn"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 237 KiB |
@@ -3,7 +3,7 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://cc1tenm6p3pca"
|
uid="uid://cc1tenm6p3pca"
|
||||||
path="res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg-aa28fe0566a79d119654f832bf3e37d4.ctex"
|
path="res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg-b04caaa035d892b20005582a84f66a7c.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,8 @@ generator_parameters={
|
|||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg"
|
source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg"
|
||||||
dest_files=["res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg-aa28fe0566a79d119654f832bf3e37d4.ctex"]
|
dest_files=["res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg-b04caaa035d892b20005582a84f66a7c.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
@@ -3,7 +3,7 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://cvst7yhbw0sxt"
|
uid="uid://cvst7yhbw0sxt"
|
||||||
path="res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg-5c45444ccb116de4c008645c049b0b78.ctex"
|
path="res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg-961cb4e5bb059cbbe822fd03e92f4ac1.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,8 @@ generator_parameters={
|
|||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg"
|
source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg"
|
||||||
dest_files=["res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg-5c45444ccb116de4c008645c049b0b78.ctex"]
|
dest_files=["res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg-961cb4e5bb059cbbe822fd03e92f4ac1.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 3.6 MiB After Width: | Height: | Size: 3.6 MiB |
@@ -3,7 +3,7 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://bnbveonobhyhc"
|
uid="uid://bnbveonobhyhc"
|
||||||
path="res://.godot/imported/PILLAR EXPORT 1_cannon_edge.png-343d7b79ad9b59f7ef6322df0839c74b.ctex"
|
path="res://.godot/imported/PILLAR EXPORT 1_cannon_edge.png-8166f53353cf4e8c82155041cf1b8cb2.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,8 @@ generator_parameters={
|
|||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png"
|
source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png"
|
||||||
dest_files=["res://.godot/imported/PILLAR EXPORT 1_cannon_edge.png-343d7b79ad9b59f7ef6322df0839c74b.ctex"]
|
dest_files=["res://.godot/imported/PILLAR EXPORT 1_cannon_edge.png-8166f53353cf4e8c82155041cf1b8cb2.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 825 KiB After Width: | Height: | Size: 825 KiB |
@@ -3,7 +3,7 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://bydfevqfagpq8"
|
uid="uid://bydfevqfagpq8"
|
||||||
path="res://.godot/imported/PILLAR EXPORT 1_concrete_0025_height_1k.png-7f51b894f446c48349eafaa8099a658b.ctex"
|
path="res://.godot/imported/PILLAR EXPORT 1_concrete_0025_height_1k.png-5a41398d7db4f20158b5fd0bbc70089e.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,8 @@ generator_parameters={
|
|||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png"
|
source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png"
|
||||||
dest_files=["res://.godot/imported/PILLAR EXPORT 1_concrete_0025_height_1k.png-7f51b894f446c48349eafaa8099a658b.ctex"]
|
dest_files=["res://.godot/imported/PILLAR EXPORT 1_concrete_0025_height_1k.png-5a41398d7db4f20158b5fd0bbc70089e.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
@@ -3,7 +3,7 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://by7k6crx6fmpv"
|
uid="uid://by7k6crx6fmpv"
|
||||||
path="res://.godot/imported/PILLAR EXPORT 1_floral_single_tile.jpg-2fce40a9051df851bf70ffcf3a567f61.ctex"
|
path="res://.godot/imported/PILLAR EXPORT 1_floral_single_tile.jpg-c308c1c93330c1fa72f0499d913bf50c.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,8 @@ generator_parameters={
|
|||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg"
|
source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg"
|
||||||
dest_files=["res://.godot/imported/PILLAR EXPORT 1_floral_single_tile.jpg-2fce40a9051df851bf70ffcf3a567f61.ctex"]
|
dest_files=["res://.godot/imported/PILLAR EXPORT 1_floral_single_tile.jpg-c308c1c93330c1fa72f0499d913bf50c.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
[gd_scene load_steps=13 format=3 uid="uid://bc1sp6xwe0j65"]
|
[gd_scene load_steps=14 format=3 uid="uid://bc1sp6xwe0j65"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_0ecnn"]
|
[ext_resource type="Script" uid="uid://dwt6302nsf4vq" path="res://src/map/dungeon/code/DungeonFloor.cs" id="1_0ecnn"]
|
||||||
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_cxmwa"]
|
[ext_resource type="Script" uid="uid://b1x125h0tya2w" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="2_cxmwa"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Set A/03. Antechamber A.tscn" id="3_gkkr3"]
|
[ext_resource type="PackedScene" uid="uid://dpec2lbt83dhe" path="res://src/map/dungeon/scenes/Set A/03. Antechamber A.tscn" id="3_gkkr3"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/Set A/08. BasinRoom.tscn" id="8_5rblf"]
|
[ext_resource type="PackedScene" uid="uid://b82dx66mgs2d7" path="res://src/map/dungeon/scenes/Set A/08. BasinRoom.tscn" id="8_5rblf"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cmvimr0pvsgqy" path="res://src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn" id="10_atq1f"]
|
[ext_resource type="PackedScene" uid="uid://cmvimr0pvsgqy" path="res://src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn" id="10_atq1f"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cfecvvav8kkp6" path="res://src/player/Player.tscn" id="11_sdyti"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="12_aw26s"]
|
[ext_resource type="PackedScene" uid="uid://dbvr8ewajja6a" path="res://src/enemy/EnemyDatabase.tscn" id="12_aw26s"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cihbmyo0ltq4m" path="res://src/map/dungeon/scenes/Set A/19. Floor Exit A.tscn" id="12_n02rw"]
|
[ext_resource type="PackedScene" uid="uid://cihbmyo0ltq4m" path="res://src/map/dungeon/scenes/Set A/19. Floor Exit A.tscn" id="12_n02rw"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.tscn" id="13_kwaga"]
|
[ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/01. sproingy/Sproingy.tscn" id="13_kwaga"]
|
||||||
@@ -176,3 +177,6 @@ EnemyList = Array[PackedScene]([ExtResource("13_kwaga"), ExtResource("14_gkkr3")
|
|||||||
|
|
||||||
[node name="Eden Pillar" parent="." instance=ExtResource("10_atq1f")]
|
[node name="Eden Pillar" parent="." instance=ExtResource("10_atq1f")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29.7976, -1.33866, 30.3232)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29.7976, -1.33866, 30.3232)
|
||||||
|
|
||||||
|
[node name="Player" parent="." instance=ExtResource("11_sdyti")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29.6846, -1.648, 32.5604)
|
||||||
|
|||||||
@@ -16,6 +16,15 @@ public interface IHasSecondaryAttack
|
|||||||
public void SecondaryAttack();
|
public void SecondaryAttack();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface IHasTertiaryAttack
|
||||||
|
{
|
||||||
|
public ElementType TertiaryAttackElementalType { set; }
|
||||||
|
|
||||||
|
public double TertiaryAttackElementalDamageBonus { set; }
|
||||||
|
|
||||||
|
public void TertiaryAttack();
|
||||||
|
}
|
||||||
|
|
||||||
public interface IHasPrimarySkill
|
public interface IHasPrimarySkill
|
||||||
{
|
{
|
||||||
public void PrimarySkill();
|
public void PrimarySkill();
|
||||||
|
|||||||