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);
}
}
///
/// ProjectileContainer
/// 抛射体容器
///
public static Node2D? ProjectileContainer { get; set; }
///
/// 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;
});
}
}