Major Player refactor

This commit is contained in:
2025-02-07 02:29:50 -08:00
parent 0cdae88952
commit fe1a1e61ef
132 changed files with 2554 additions and 2478 deletions

View File

@@ -23,6 +23,8 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
[Dependency] IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency] IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
[Dependency] IPlayer Player => this.DependOn<IPlayer>();
#endregion
#region Exports
@@ -56,15 +58,13 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
_enemyLogic = new EnemyLogic();
_enemyLogic.Set(_enemyStatResource);
_enemyLogic.Set(this as IEnemy);
_enemyLogic.Set(GameRepo);
_enemyLogic.Set(Player);
}
public void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false, bool ignoreDefense = false, bool ignoreElementalResistance = false)
{
if (_currentHP.Value > 0)
{
ApplyKnockback();
if (!ignoreElementalResistance)
damage = CalculateElementalResistance(damage, elementType);
if (!ignoreDefense)
@@ -93,11 +93,17 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
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, -GameRepo.PlayerGlobalTransform.Value.Basis.Z);
EnemyModelView.RotateModel(GlobalTransform.Basis, -Player.CurrentBasis.Z);
_knockbackStrength = _knockbackStrength * 0.9f;
MoveAndCollide(velocity + (_knockbackDirection * _knockbackStrength));
}
public void Knockback(float impulse, Vector3 direction)
{
_knockbackDirection = direction;
_knockbackStrength = 0.3f;
}
public void Die()
{
_enemyLogic.Input(new EnemyLogic.Input.EnemyDefeated());
@@ -157,7 +163,7 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
private void OnAttackTimeout()
{
if (GlobalPosition.DistanceTo(GameRepo.PlayerGlobalPosition.Value) > 2.5f)
if (GlobalPosition.DistanceTo(Player.CurrentPosition) > 2.5f)
return;
var rng = new RandomNumberGenerator();
@@ -173,13 +179,13 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
var overlappingBodies = LineOfSight.GetOverlappingBodies();
foreach (var overlap in overlappingBodies)
{
if (Raycast.GlobalPosition != GameRepo.PlayerGlobalPosition.Value)
Raycast.LookAt(GameRepo.PlayerGlobalPosition.Value, Vector3.Up);
if (Raycast.GlobalPosition != Player.CurrentPosition)
Raycast.LookAt(Player.CurrentPosition, Vector3.Up);
Raycast.ForceRaycastUpdate();
if (Raycast.IsColliding())
{
var collider = Raycast.GetCollider();
if (collider is IPlayer player)
if (collider is IPlayer)
{
Raycast.DebugShapeCustomColor = Color.FromString("Purple", Colors.Purple);
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
@@ -188,15 +194,6 @@ public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
}
}
private void ApplyKnockback()
{
if (GameRepo.PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.Knockback))
{
_knockbackDirection = -GameRepo.PlayerGlobalTransform.Value.Basis.Z.Normalized();
_knockbackStrength = 0.3f;
}
}
private void OnHPChanged(double newHP)
{
if (newHP <= 0)