using ColdMint.scripts.character; using ColdMint.scripts.inventory; using ColdMint.scripts.loader.uiLoader; using ColdMint.scripts.map.events; using ColdMint.scripts.utils; using Godot; namespace ColdMint.scripts; /// /// The node holder within the game scene /// 游戏场景内的节点持有者 /// public static class GameSceneNodeHolder { private static Player? _player; /// /// Player instances within the game scene /// 游戏场景内的玩家实例 /// public static Player? Player { get => _player; set { _player = value; //Broadcast the event to the outside when the player instance changes. //当玩家实例改变时,向外广播事件。 var playerInstanceChangeEvent = new PlayerInstanceChangeEvent { PlayerInstance = _player }; EventManager.PlayerInstanceChangeEvent?.Invoke(playerInstanceChangeEvent); } } /// /// WeaponContainer /// 武器容器 /// public static Node2D? WeaponContainer { get; set; } /// /// PacksackContainer /// 背包容器 /// public static Node2D? PacksackContainer { get; set; } /// /// PlayerContainer /// 玩家容器 /// public static Node2D? PlayerContainer { get; set; } /// /// AICharacterContainer /// AICharacter角色 /// public static Node2D? AiCharacterContainer { get; set; } /// /// HotBar /// 快捷栏 /// public static HotBar? HotBar { get; set; } /// /// Health Bar UI /// 健康条UI /// public static HealthBarUi? HealthBarUi { get; set; } /// /// operation tip /// 操作提示 /// public static RichTextLabel? OperationTipLabel { get; set; } /// /// BackpackUiContainer /// 背包Ui容器 /// /// ///The knapsack Ui container houses the container of the knapsack ui node. When a user uses a backpack, the node to which his backpack is attached is displayed from within the backpack ui container. ///背包Ui容器内存放的是背包ui节点的容器。当用户使用背包时,会从背包ui容器内将其背包对于的节点展示出来。 /// public static Control? BackpackUiContainer { get; set; } /// /// Hide the knapsack node in the knapsack Ui if the knapsack UI is displayed /// 如果背包Ui处于显示状态,那么隐藏背包UI内的背包节点 /// public static void HideBackpackUiContainerIfVisible() { if (BackpackUiContainer == null) { return; } if (!BackpackUiContainer.Visible) { return; } NodeUtils.ForEachNode(BackpackUiContainer, node => { //If the child node is not visible, the traversal continues. //如果子节点不可见,则继续遍历。 if (!node.Visible) return false; //Until you find a visible node, hide it, and return true, ending the loop. //直到找到可见的节点,隐藏该节点,然后返回true,结束遍历。 node.Hide(); return true; }); } }