I have this description of systems and classes. Is there a better way to organize it?
Systems:
- Core system:
-- GameMaster.cs: Main class controlling overall game state and progression. TODO: Define game state and progression
-- GameTime.cs: Class responsible for managing in-game time and date system.
-- WorldEventManager.cs: Class responsible for managing world events.
-- WorldWeatherManager.cs: Class responsible for managing world weather.
-- GlobalStateManager.cs: Class responsible for managing world global states.

- NPCs systems:
-- NPCBrain.cs: Class responsible for handling NPCs’ decision making and state switching using Fluid HTN.

-- Navigation System:
--- A* Pathfinding Project
--- PathfindingManager.cs: Class responsible for handling A* Pathfinding requests.

-- Sensor System:
--- A system that allows AI agents to sense their environment and detect other agents, objects
--- VisionSensor.cs: Class responsible for NPCs’ field of view, raycasting vision, and detecting other objects/characters.
--- HearingSensor.cs: Class responsible for area detection, NPCs can hear sounds generated by nearby events or interactions.

-- Inventory System:
--- A system that allows AI agents to pick up items, use items, equip items, store items, drop items
--- ItemDatabase.cs: Holds all the ScriptableObjects for items in the game world.
--- Inventory.cs: Handles the inventory system for NPCs. Handle different ItemTypes and their interactions, including equipping, unequipping, and using items.
--- Item.cs: Base class for all type of items. Contains an ItemType Enum, which defines whether the item is a consumable, weapon, or armor. The interactions and functions of the item depend on its ItemType. Contains an Effect variable for effects that can represent onsumables like food, potions or other usable items or buffs.
--- EquipmentSlot.cs: Enum representing different equipment slots (Head, Body, Hand)

-- Communication System:
--- A system that allows AI agents to exchange information and coordinate with each other
--- Personality System:
---- A subsystem that allows AI agents to have a unique name and unique memory of specific events
--- TODO: add classes

-- Faction System:
--- A system that allows AI agents to belong to a specific faction that has unique relationships with other factions
--- Faction.cs: Base class representing a faction, its relationships, and reputation system.
--- FactionDatabase.cs: Holds all the factions and related information in the game world.
--- FactionRelation.cs: Represents relationships between factions and their standings.

-- Quest System:
--- A system that allows AI agents to take quests, complete quests, fail quests, create quests
--- Quest.cs: Represents a quest with objectives, rewards, and related information.
--- QuestGenerator.cs: Creates procedural quests for NPCs.
--- QuestObjective.cs: Represents a single objective within a quest.
--- QuestCompletion.cs: Responsible for completing the quest and awarding rewards.

-- Trading System:
--- A system that allows AI agents to buy and sell items with other agents
--- TradingManager.cs: Class responsible for managing transactions, including buying, selling, and bartering items.
--- TradeInventory.cs: Represents the inventory of items available for trading for characters and merchants.

-- Combat System:
--- A system that allows AI agents to fight each other with melee or range weapon. In real time. Using Fluid HTN for tactics.
--- CombatManager.cs: Class responsible for managing combat interactions, handling AI tactics, and updating the combat state.
--- TODO: add explanations how CombatManager.cs will work

-- Health System:
--- A system that allows AI agents to have a health, lose health, restore health
--- HealthSystem.cs: Class responsible for managing character HP, taking damage, and handling death events.

-- Stamina System:
--- A system that allows AI agents to have a stamina, lose stamina, restore stamina
--- StaminaSystem.cs: Class responsible for managing character stamina, stamina regeneration, and usage.

-- Stats System:
--- Represents the various attributes and statistics for characters in the game, such as strength, agility, intelligence, and more.
--- AgentStats.cs: Class responsible for managing character attributes, leveling up, and updating stats.

- Weapon System:
-- Weapon.cs: Class responsible for handling weapon behavior, including firing projectiles.
-- Projectile.cs: Base class for all projectiles.
-- ProjectileSpawner.cs: Class responsible for instantiating projectiles and assigning properties.
-- TODO: add classes

- Camera System:
-- CameraController.cs: Class responsible for camera movement, smooth following of the player/controlled NPC, and managing camera zoom levels.

- Audio System:
-- AudioManager.cs: Class responsible for managing and playing sound effects, background music, and NPC audio.
-- MusicManager.cs: Class responsible for managing and switching background music based on game events and locations.

- UI System:
-- UIManager.cs: Responsible for updating and controlling general UI elements.
-- InventoryUI.cs: Controls inventory related UI elements.
-- QuestLogUI.cs: Controls quest log related UI elements.
-- TODO: maybe add more classes

- Logging System:
-- GameLogger.cs: Handles logging of game-related events for debugging and analytics purposes.
-- TODO: maybe add more classes and more explanations

- Save Load System:
-- SaveLoadSystem.cs: Responsible for saving and loading game data to and from files.
-- TODO: maybe add more classes and explain how save load system will work

- Pooling System:
-- A system that handles the pooling of frequently instantiated objects, such as projectiles, to improve performance.
-- ObjectPooler.cs: Generic pooling class to handle different types of game objects.
-- ProjectilePool.cs: Class responsible for pooling projectiles specifically, derived from ObjectPooler.