using Chickensoft.AutoInject; using Chickensoft.Introspection; using Chickensoft.Serialization; using Godot; using Zennysoft.Ma.Adapter; using Zennysoft.Ma.Adapter.Entity; namespace Zennysoft.Game.Ma; [Meta(typeof(IAutoNode)), Id("accessory")] public partial class Accessory : Node3D, IAccessory { public override void _Notification(int what) => this.Notify(what); [Node] private Sprite3D _sprite { get; set; } = default!; public override void _Ready() { _sprite.Texture = Stats.Texture; _bonusDamage = Stats.BonusAttack; _bonusDefense = Stats.BonusDefense; _bonusLuck = Stats.BonusLuck; _bonusHp = Stats.BonusHP; _bonusVt = Stats.BonusVT; } public string ItemName => Stats.Name; public string StatDescription => Stats.StatDescription; public string FlavorText => Stats.FlavorText; public float SpawnRate => Stats.SpawnRate; public int ThrowDamage => Stats.ThrowDamage; public float ThrowSpeed => Stats.ThrowSpeed; public int BonusAttack { get => _bonusDamage; } public int BonusDefense { get => _bonusDefense; } public int BonusLuck { get => _bonusLuck; } public int BonusHP { get => _bonusHp; } public int BonusVT { get => _bonusVt; } public ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance, Stats.CurseResistance); [Save("accessory_tag")] public AccessoryTag AccessoryTag => Stats.AccessoryTag; public ItemTag ItemTag => Stats.ItemTag; [Save("accessory_bonus_damage")] private int _bonusDamage { get; set; } = 0; [Save("accessory_bonus_damage")] private int _bonusDefense { get; set; } = 0; [Save("accessory_bonus_luck")] private int _bonusLuck { get; set; } = 0; [Save("accessory_bonus_hp")] private int _bonusHp { get; set; } = 0; [Save("accessory_bonus_vt")] private int _bonusVt { get; set; } = 0; public void IncreaseAttack(int bonus) => _bonusDamage += bonus; public void SetAttack(int newBonus) => _bonusDamage = newBonus; public void IncreaseDefense(int bonus) => _bonusDefense += bonus; public void SetDefense(int newBonus) => _bonusDefense = newBonus; public void IncreaseLuck(int bonus) => _bonusLuck += bonus; public void SetLuck(int newBonus) => _bonusLuck = newBonus; [Export] [Save("accessory_stats")] public AccessoryStats Stats { get; set; } = new AccessoryStats(); public Augment Augment { get; set; } public bool Glued { get; set; } public Texture2D GetTexture() => Stats.Texture; }