using System; using System.Collections.Generic; using Chickensoft.AutoInject; using Chickensoft.Introspection; using Chickensoft.Sync.Primitives; using Gamesmiths.Forge.Godot.Resources.Abilities; using Godot; using Movementtests.systems; namespace Movementtests.managers; [GlobalClass, Meta(typeof(IAutoNode))] public partial class InventoryManager : Node, IDisposable { public override void _Notification(int what) => this.Notify(what); private AutoSet _startedFlyingAbilities = new(); private AutoSet _flyingTickAbilities = new(); private AutoSet _stoppedFlyingAbilities = new(); private AutoSet _startedPlantedAbilities = new(); private AutoSet _plantedTickAbilities = new(); private AutoSet _stoppedPlantedAbilities = new(); public IAutoSet StartedFlyingAbilities => _startedFlyingAbilities; public IAutoSet FlyingTickAbilities => _flyingTickAbilities; public IAutoSet StoppedFlyingAbilities => _stoppedFlyingAbilities; public IAutoSet StartedPlantedAbilities => _startedPlantedAbilities; public IAutoSet PlantedTickAbilities => _plantedTickAbilities; public IAutoSet StoppedPlantedAbilities => _stoppedPlantedAbilities; private readonly AutoMap> _weaponEventsInventory = new(); public IAutoMap> WeaponEventsInventory => _weaponEventsInventory; public Dictionary> GetEventElements() { return new Dictionary> { { WeaponSystem.WeaponEvent.StartedFlying, _startedFlyingAbilities }, { WeaponSystem.WeaponEvent.StoppedFlying, _stoppedFlyingAbilities}, { WeaponSystem.WeaponEvent.FlyingTick, _flyingTickAbilities }, { WeaponSystem.WeaponEvent.StartedPlanted, _startedPlantedAbilities }, { WeaponSystem.WeaponEvent.StoppedPlanted, _stoppedPlantedAbilities }, { WeaponSystem.WeaponEvent.PlantedTick, _plantedTickAbilities }, }; } public void OnReady() { foreach (var (forEvent, behaviorSet) in GetEventElements()) { _weaponEventsInventory[forEvent] = behaviorSet; } } public void InitializeFromResource(WeaponInventory inventory) { var elements = GetEventElements(); foreach (var forEvent in elements.Keys) { elements[forEvent] = new AutoSet(inventory.EventMap[forEvent]); } } public new void Dispose() { GC.SuppressFinalize(this); foreach (var element in GetEventElements().Values) element.Dispose(); _weaponEventsInventory.Dispose(); base.Dispose(); } public void AddAbilityForWeaponEvent(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior) { var inventoryForEvent = _weaponEventsInventory[forEvent]; inventoryForEvent.Add(abilityBehavior); } public void RemoveAbilityForWeaponEvent(WeaponSystem.WeaponEvent forEvent, ForgeAbilityBehavior abilityBehavior) { var inventoryForEvent = _weaponEventsInventory[forEvent]; inventoryForEvent.Remove(abilityBehavior); } }