As a Unity Senior Developer, in addition to having a solid understanding of game development principles and best practices, it is expected that you possess knowledge and expertise in solid principles and design patterns.
Analyze and evaluate these systems.
The idea of the game is similar to games like S.T.A.L.K.E.R., Kenshi and Mount and Blade where in a large open non-procedural world live NPCs who explore and interact with the world.
Use Fluid HTN as brain for NPCs and maybe as World Director.
Short summary of Fluid HTN:
Fluid HTN, a simple HTN planner based on the Builder pattern, inspired by Fluid Behaviour Tree. HTN stands for Hierarchical Task Network, which is a method of AI planning that decomposes high-level tasks into low-level actions. The page explains the main concepts and features of Fluid HTN, such as:
Compound Tasks: high-level tasks that have multiple ways of being accomplished, such as Selectors and Sequencers.
Primitive Tasks: low-level tasks that represent a single step that can be performed by the AI, such as Operators, Effects and Conditions.
Effects: world state changes that can be applied during planning or execution, such as PlanOnly, PlanAndExecute and Permanent effects.
Domain Builder: a fluent API to simplify the design of code-oriented HTN domains, with support for custom conditions, effects, operators and selectors.
Partial planning: a feature that allows the planner to only plan up to a certain point, then continue from there once the partial plan has been completed, using Pause Plan tasks.
Domain splicing: a feature that allows the planner to splice together sub-domains to form new domains, using Splice tasks or Slot tasks for run-time splicing.
Factory interface: an interface that allows the user to customize memory management schemes, such as pooling, for arrays/collections/objects used by the planner.
Decomposition logging: a feature that allows the planner to store information about condition success and failure during decomposition, for debugging purposes.
Callback hooks: a feature that allows the user to hook up to certain events in the planner, such as OnNewPlan or OnCurrentTaskFailed.
Systems:
- Core system:
– GameMaster.cs: Main class controlling overall game state and progression.
– GameTime.cs: Class responsible for managing in-game time and date system.
– WorldController.cs: Class responsible for managing world events, weather, and global states.
– TODO: maybe add classes

- 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.
— Item.cs: Base class for all type of items.
— 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
— TODO: add classes and explain how system will work

– Combat System:
— A system that allows AI agents to fight each other with melee or range weapon
— TODO: add more classes and maybe rewrite explanation for combat system

– 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.

- 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
As a Unity Senior Developer, in addition to having a solid understanding of game development principles and best practices, it is expected that you possess knowledge and expertise in solid principles and design patterns.
Analyze and evaluate these systems.