private void HandleShieldHitMessage(ShieldHitMessage shieldHitMessage) { if (!Stats.HasEnough(StatsEnum.Energy, shieldHitMessage.EnergyDamage)) { Stats.AddAmount(StatsEnum.Health, -shieldHitMessage.OriginalDamage); _isShielded = false; _shieldScript.ShieldDown(); } else { Stats.AddAmount(StatsEnum.Energy, -shieldHitMessage.EnergyDamage); } _characterDamage.RegisterNewBlockedDamageSource(shieldHitMessage.Weapon.GetInstanceID()); }
private bool FireAttack(IAttack attack) { if (Stats == null && attack.RequiredEnergy > 0) { Debug.Log("Weapon requires energy to use, but no energy component attached."); return(false); } if (Stats != null && Stats.IsStatDefined(StatsEnum.Energy) && !Stats.HasEnough(StatsEnum.Energy, attack.RequiredEnergy)) { Debug.Log("Not enaugh energy."); return(false); } if (!attack.CanFire(Stats)) { return(false); } attack.Fire(Stats); if (Stats != null && Stats.IsStatDefined(StatsEnum.Energy)) { Stats.AddAmount(StatsEnum.Energy, -attack.RequiredEnergy); } return(true); }
private void Fire(Vector2 position, float degAngle, Stats stats) { if (stats == null) { Debug.LogWarning("No attached 'stats' object not found for this gun!"); } else if (stats.HasEnough(StatsEnum.Bullets, BulletsRequired)) { if (!_weaponStateMachine.TryFire()) { return; } Bullet.CreateBullet(position, degAngle, BulletPrototype, Layers.GetLayer(LayerName.PlayerBullets), _dynamicGameObjects.transform); stats.AddAmount(StatsEnum.Bullets, -BulletsRequired); } }
private void HandleWeaponHit(WeaponHitMessage weaponHitMessage) { Stats.AddAmount(StatsEnum.Health, -weaponHitMessage.Damage); Stats.AddAmount(StatsEnum.Stability, -weaponHitMessage.StabilityDamage); }