Weapon tags, change

This commit is contained in:
2024-09-07 19:55:13 -07:00
parent c308fadb87
commit c6eaf19eb0
11 changed files with 94 additions and 15 deletions

View File

@@ -2,6 +2,7 @@
using Chickensoft.Collections;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using Chickensoft.SaveFileBuilder;
using Godot;
@@ -75,8 +76,6 @@ namespace GameJamDungeon
[Node] public IArea3D CollisionDetector { get; set; } = default!;
private IAutoProp<Weapon> EquippedWeapon { get; set; } = default!;
private AutoProp<double> _currentHP { get; set; } = default!;
private AutoProp<int> _currentVT { get; set; } = default!;
@@ -100,9 +99,6 @@ namespace GameJamDungeon
GameRepo.SetPlayerGlobalPosition(GlobalPosition);
GameRepo.PlayerGlobalPosition.Sync += OnPlayerPositionUpdated;
EquippedWeapon = new AutoProp<Weapon>(new Weapon());
EquippedWeapon.Sync += OnEquippedWeaponChanged;
_currentHP = new AutoProp<double>(PlayerStatInfo.MaximumHP);
_currentVT = new AutoProp<int>(PlayerStatInfo.MaximumVT);
_currentHP.Sync += OnHPChanged;
@@ -129,7 +125,11 @@ namespace GameJamDungeon
})
.Handle((in PlayerLogic.Output.Animations.Attack output) =>
{
var attackSpeed = (float)GameRepo.EquippedWeapon.WeaponInfo.AttackSpeed;
AnimationPlayer.SetSpeedScale(attackSpeed);
AnimationPlayer.Play("attack");
if (GameRepo.EquippedWeapon.WeaponInfo.WeaponTags.Contains(WeaponTag.SelfDamage))
_currentHP.OnNext(_currentHP.Value - 5);
})
.Handle((in PlayerLogic.Output.ThrowItem output) =>
{
@@ -154,7 +154,13 @@ namespace GameJamDungeon
if (_currentHP.Value > 0)
{
var enemy = hitBox.GetParent<IEnemy>();
var damage = DamageCalculator.CalculateEnemyDamage(hitBox.Damage, PlayerStatInfo, enemy.EnemyStatInfo, GameRepo.EquippedArmor);
var isCriticalHit = false;
var rng = new RandomNumberGenerator();
rng.Randomize();
var roll = rng.Randf();
if (roll <= enemy.EnemyStatInfo.Luck)
isCriticalHit = true;
var damage = DamageCalculator.CalculateEnemyDamage(hitBox.Damage, PlayerStatInfo, enemy.EnemyStatInfo, GameRepo.EquippedArmor, isCriticalHit);
_currentHP.OnNext(_currentHP.Value - damage);
GD.Print($"Player hit for {damage} damage.");
}