diff --git a/project.godot b/project.godot index 33266eef..8bd8a937 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="GameJamDungeon" -run/main_scene="uid://d1gjaijijd5ot" +run/main_scene="uid://bc1sp6xwe0j65" config/features=PackedStringArray("4.4", "C#", "GL Compatibility") boot_splash/show_image=false diff --git a/src/enemy/Enemy.cs b/src/enemy/Enemy.cs index b5687732..5c298aa8 100644 --- a/src/enemy/Enemy.cs +++ b/src/enemy/Enemy.cs @@ -23,7 +23,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide [Dependency] IGameEventDepot GameEventDepot => this.DependOn(); - [Dependency] protected IPlayer Player => this.DependOn(() => GetParent().GetChildren().OfType().Single()); + [Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType().Single()); #endregion #region Exports @@ -59,7 +59,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide _enemyLogic = new EnemyLogic(); _enemyLogic.Set(_enemyStatResource); _enemyLogic.Set(this as IEnemy); - _enemyLogic.Set(Player); + _enemyLogic.Set(_player); } public void OnResolved() @@ -95,7 +95,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide var isWalking = _enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer; if (_enemyModelView is EnemyModelView2D enemyModelView2D) - enemyModelView2D.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z, isWalking); + enemyModelView2D.RotateModel(GlobalTransform.Basis, -_player.CurrentBasis.Z, isWalking); } #endregion @@ -135,8 +135,8 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide _enemyModelView.PlayHitAnimation(); _enemyLogic.Input(new EnemyLogic.Input.Alerted()); - if (Player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage)) - Player.Stats.SetCurrentHP(Player.Stats.CurrentHP.Value - 5); + if (_player.EquippedWeapon.Value.WeaponTags.Contains(WeaponTag.SelfDamage)) + _player.Stats.SetCurrentHP(_player.Stats.CurrentHP.Value - 5); } } @@ -170,17 +170,17 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide private void OnAttackTimeout() { - if (GlobalPosition.DistanceTo(Player.CurrentPosition) > 5f) - { - _enemyLogic.Input(new EnemyLogic.Input.Alerted()); - return; - } + //if (GlobalPosition.DistanceTo(_player.CurrentPosition) > 5f) + //{ + // _enemyLogic.Input(new EnemyLogic.Input.Alerted()); + // return; + //} var rng = new RandomNumberGenerator(); rng.Randomize(); _enemyLogic.Input(new EnemyLogic.Input.AttackTimer()); _attackTimer.Stop(); - _attackTimer.WaitTime = rng.RandfRange(2f, 5.0f); + //_attackTimer.WaitTime = rng.RandfRange(2f, 5.0f); _attackTimer.Start(); } @@ -189,8 +189,8 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide var overlappingBodies = _lineOfSight.GetOverlappingBodies(); foreach (var _ in overlappingBodies) { - if (_raycast.GlobalPosition != Player.CurrentPosition) - _raycast.LookAt(Player.CurrentPosition, Vector3.Up); + if (_raycast.GlobalPosition != _player.CurrentPosition) + _raycast.LookAt(_player.CurrentPosition, Vector3.Up); _raycast.ForceRaycastUpdate(); if (_raycast.IsColliding()) { diff --git a/src/enemy/EnemyModelView3D.cs b/src/enemy/EnemyModelView3D.cs index cf19856a..6b262e6f 100644 --- a/src/enemy/EnemyModelView3D.cs +++ b/src/enemy/EnemyModelView3D.cs @@ -24,8 +24,6 @@ public partial class EnemyModelView3D : Node3D, IEnemyModelView [Export] public EnemyLoreInfo EnemyLoreInfo { get; set; } = default!; - [Node] public IHitbox Hitbox { get; set; } = default!; - [Node] private MeshInstance3D _meshInstance { get; set; } = default!; [Node] private AnimationPlayer _animationPlayer { get; set; } = default!; @@ -36,6 +34,7 @@ public partial class EnemyModelView3D : Node3D, IEnemyModelView public void PlayPrimaryAttackAnimation() { + _animationPlayer.Play(PRIMARY_ATTACK); } public void PlaySecondaryAttackAnimation() diff --git a/src/enemy/IEnemyModelView.cs b/src/enemy/IEnemyModelView.cs index 9683e3f3..fa679a5e 100644 --- a/src/enemy/IEnemyModelView.cs +++ b/src/enemy/IEnemyModelView.cs @@ -14,6 +14,4 @@ public interface IEnemyModelView : INode3D public void PlayHitAnimation(); public void PlayDeathAnimation(); - - public IHitbox Hitbox { get; } } diff --git a/src/enemy/enemy_types/01. sproingy/Sproingy.cs b/src/enemy/enemy_types/01. sproingy/Sproingy.cs index c11e713f..abcb7281 100644 --- a/src/enemy/enemy_types/01. sproingy/Sproingy.cs +++ b/src/enemy/enemy_types/01. sproingy/Sproingy.cs @@ -20,18 +20,18 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack, ICanPatrol public void OnReady() { SetPhysicsProcess(true); - _enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered; + ((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered; } public void OnPhysicsProcess(double 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()); - 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()); - 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()); _navigationAgentClient.CalculateVelocity(GlobalPosition); diff --git a/src/enemy/enemy_types/02. michael/Michael.cs b/src/enemy/enemy_types/02. michael/Michael.cs index 66a59c97..d53a6d92 100644 --- a/src/enemy/enemy_types/02. michael/Michael.cs +++ b/src/enemy/enemy_types/02. michael/Michael.cs @@ -18,18 +18,18 @@ public partial class Michael : Enemy, IHasPrimaryAttack, ICanPatrol public void OnReady() { SetPhysicsProcess(true); - _enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered; + ((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered; } public void OnPhysicsProcess(double 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()); - 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()); - 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()); _navigationAgentClient.CalculateVelocity(GlobalPosition); diff --git a/src/enemy/enemy_types/03. filth_eater/FilthEater.cs b/src/enemy/enemy_types/03. filth_eater/FilthEater.cs index 83e1f2cd..b3f2f2d0 100644 --- a/src/enemy/enemy_types/03. filth_eater/FilthEater.cs +++ b/src/enemy/enemy_types/03. filth_eater/FilthEater.cs @@ -22,18 +22,18 @@ public partial class FilthEater : Enemy, IHasPrimaryAttack, IHasSecondaryAttack, public void OnReady() { SetPhysicsProcess(true); - _enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered; + ((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered; } 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) + 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) + 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) + if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f) _enemyLogic.Input(new EnemyLogic.Input.Alerted()); } diff --git a/src/enemy/enemy_types/05. ballos/Ballos.cs b/src/enemy/enemy_types/05. ballos/Ballos.cs index a5d77616..6f746de2 100644 --- a/src/enemy/enemy_types/05. ballos/Ballos.cs +++ b/src/enemy/enemy_types/05. ballos/Ballos.cs @@ -23,18 +23,18 @@ public partial class Ballos : Enemy, IHasPrimaryAttack, IHasSecondaryAttack public void OnReady() { SetPhysicsProcess(true); - _enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered; + ((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered; } 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) + 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) + 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) + if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f) _enemyLogic.Input(new EnemyLogic.Input.Alerted()); } diff --git a/src/enemy/enemy_types/06. chariot/Chariot.cs b/src/enemy/enemy_types/06. chariot/Chariot.cs index 1ef906cd..78529ac8 100644 --- a/src/enemy/enemy_types/06. chariot/Chariot.cs +++ b/src/enemy/enemy_types/06. chariot/Chariot.cs @@ -16,11 +16,11 @@ public partial class Chariot : Enemy, IHasPrimaryAttack { _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()); - 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()); - 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()); } diff --git a/src/enemy/enemy_types/07. chinthe/Chinthe.cs b/src/enemy/enemy_types/07. chinthe/Chinthe.cs index 5a782164..648a3298 100644 --- a/src/enemy/enemy_types/07. chinthe/Chinthe.cs +++ b/src/enemy/enemy_types/07. chinthe/Chinthe.cs @@ -17,18 +17,18 @@ public partial class Chinte : Enemy, IHasPrimaryAttack public void OnReady() { SetPhysicsProcess(true); - _enemyModelView.Hitbox.AreaEntered += Hitbox_AreaEntered; + ((EnemyModelView2D)_enemyModelView).Hitbox.AreaEntered += Hitbox_AreaEntered; } 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) + 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) + 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) + if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 2.5f) _enemyLogic.Input(new EnemyLogic.Input.Alerted()); } diff --git a/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn b/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn index bcf171b9..6ceb921f 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn +++ b/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn @@ -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="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="Script" uid="uid://6edayafleq8y" path="res://src/hitbox/Hitbox.cs" id="4_5fako"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_p8jc1"] height = 3.08643 @@ -16,6 +17,33 @@ radius = 0.202148 height = 3.98828 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"] collision_layer = 10 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="."] 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_mask = 2 @@ -43,14 +71,9 @@ shape = SubResource("CylinderShape3D_nveg0") [node name="AttackTimer" type="Timer" parent="."] unique_name_in_owner = true -wait_time = 0.8 +wait_time = 10.0 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="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.832948, 0) collision_layer = 2048 @@ -59,3 +82,65 @@ collision_mask = 0 [node name="CollisionShape3D" type="CollisionShape3D" parent="Collision"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.321487, 0) 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 diff --git a/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs b/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs index 3ffc2f0e..798c4e06 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs +++ b/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs @@ -1,16 +1,89 @@ using Chickensoft.AutoInject; using Chickensoft.Introspection; using Godot; +using System.Collections.Generic; +using System; namespace GameJamDungeon; [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); + [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) { - 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() { 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); + } diff --git a/src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn b/src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn index 03c36afe..4b0dbb61 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn +++ b/src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn @@ -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="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="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://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://bydfevqfagpq8" path="res://src/enemy/enemy_types/10. Eden Pillar/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"] +[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/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/model/PILLAR EXPORT 1_concrete_0025_height_1k.png" id="5_qhmtu"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_drix8"] resource_name = "DARKER" @@ -164,50 +163,6 @@ _surfaces = [{ blend_shape_mode = 0 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"] length = 0.001 tracks/0/type = "value" @@ -275,10 +230,55 @@ tracks/1/keys = { "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"] _data = { &"RESET": SubResource("Animation_qhmtu"), &"defeated": SubResource("Animation_mi284"), +&"primary_attack": SubResource("Animation_6jr7s"), &"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") 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="."] unique_name_in_owner = true libraries = { diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb similarity index 100% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb.import b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb.import similarity index 72% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb.import rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb.import index ded6eee7..9095cc64 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb.import +++ b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb.import @@ -4,12 +4,12 @@ importer="scene" importer_version=1 type="PackedScene" uid="uid://di0p6rdjw2s85" -path="res://.godot/imported/PILLAR EXPORT 1.glb-f4cad65c662305d7fc7f74d6d8dc0d91.scn" +path="res://.godot/imported/PILLAR EXPORT 1.glb-bfc66d3e7255967f66430f576d8b93e9.scn" [deps] -source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1.glb" -dest_files=["res://.godot/imported/PILLAR EXPORT 1.glb-f4cad65c662305d7fc7f74d6d8dc0d91.scn"] +source_file="res://src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1.glb" +dest_files=["res://.godot/imported/PILLAR EXPORT 1.glb-bfc66d3e7255967f66430f576d8b93e9.scn"] [params] diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg similarity index 100% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg.import b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg.import similarity index 78% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg.import rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg.import index 71031df1..d275c814 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg.import +++ b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg.import @@ -3,7 +3,7 @@ importer="texture" type="CompressedTexture2D" 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={ "vram_texture": false } @@ -13,8 +13,8 @@ generator_parameters={ [deps] -source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg" -dest_files=["res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE.jpg-aa28fe0566a79d119654f832bf3e37d4.ctex"] +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-b04caaa035d892b20005582a84f66a7c.ctex"] [params] diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg similarity index 100% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg.import b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg.import similarity index 78% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg.import rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg.import index 40947eda..e58b8577 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg.import +++ b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg.import @@ -3,7 +3,7 @@ importer="texture" type="CompressedTexture2D" 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={ "vram_texture": false } @@ -13,8 +13,8 @@ generator_parameters={ [deps] -source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg" -dest_files=["res://.godot/imported/PILLAR EXPORT 1_ENEMY_PILLAR_TEXTURE2.jpg-5c45444ccb116de4c008645c049b0b78.ctex"] +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-961cb4e5bb059cbbe822fd03e92f4ac1.ctex"] [params] diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png similarity index 100% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png.import b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png.import similarity index 74% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png.import rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png.import index 86640289..0eca518d 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png.import +++ b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_cannon_edge.png.import @@ -3,7 +3,7 @@ importer="texture" type="CompressedTexture2D" 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={ "vram_texture": false } @@ -13,8 +13,8 @@ generator_parameters={ [deps] -source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_cannon_edge.png" -dest_files=["res://.godot/imported/PILLAR EXPORT 1_cannon_edge.png-343d7b79ad9b59f7ef6322df0839c74b.ctex"] +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-8166f53353cf4e8c82155041cf1b8cb2.ctex"] [params] diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png similarity index 100% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png.import b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png.import similarity index 79% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png.import rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png.import index 8ba7acad..31ec5f39 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png.import +++ b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_concrete_0025_height_1k.png.import @@ -3,7 +3,7 @@ importer="texture" type="CompressedTexture2D" 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={ "vram_texture": false } @@ -13,8 +13,8 @@ generator_parameters={ [deps] -source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_concrete_0025_height_1k.png" -dest_files=["res://.godot/imported/PILLAR EXPORT 1_concrete_0025_height_1k.png-7f51b894f446c48349eafaa8099a658b.ctex"] +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-5a41398d7db4f20158b5fd0bbc70089e.ctex"] [params] diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg similarity index 100% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg diff --git a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg.import b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg.import similarity index 79% rename from src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg.import rename to src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg.import index 001e584c..f7b4a472 100644 --- a/src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg.import +++ b/src/enemy/enemy_types/10. Eden Pillar/model/PILLAR EXPORT 1_floral_single_tile.jpg.import @@ -3,7 +3,7 @@ importer="texture" type="CompressedTexture2D" 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={ "vram_texture": false } @@ -13,8 +13,8 @@ generator_parameters={ [deps] -source_file="res://src/enemy/enemy_types/10. Eden Pillar/PILLAR EXPORT 1_floral_single_tile.jpg" -dest_files=["res://.godot/imported/PILLAR EXPORT 1_floral_single_tile.jpg-2fce40a9051df851bf70ffcf3a567f61.ctex"] +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-c308c1c93330c1fa72f0499d913bf50c.ctex"] [params] diff --git a/src/map/dungeon/floors/Floor01.tscn b/src/map/dungeon/floors/Floor01.tscn index 2d2668c6..cb0633c4 100644 --- a/src/map/dungeon/floors/Floor01.tscn +++ b/src/map/dungeon/floors/Floor01.tscn @@ -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://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://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://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://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"] @@ -176,3 +177,6 @@ EnemyList = Array[PackedScene]([ExtResource("13_kwaga"), ExtResource("14_gkkr3") [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) + +[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) diff --git a/src/system/IHasPrimaryAttack.cs b/src/system/IHasPrimaryAttack.cs index 26170b0d..906cdb01 100644 --- a/src/system/IHasPrimaryAttack.cs +++ b/src/system/IHasPrimaryAttack.cs @@ -16,6 +16,15 @@ public interface IHasSecondaryAttack public void SecondaryAttack(); } +public interface IHasTertiaryAttack +{ + public ElementType TertiaryAttackElementalType { set; } + + public double TertiaryAttackElementalDamageBonus { set; } + + public void TertiaryAttack(); +} + public interface IHasPrimarySkill { public void PrimarySkill();