Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / ui / IUiNode.cs
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// Ui节点代码接口
  6. /// </summary>
  7. /// <typeparam name="TNodeType">Godot中的节点类型</typeparam>
  8. /// <typeparam name="TCloneType">克隆该对象返回的类型</typeparam>
  9. public abstract class IUiNode<TNodeType, TCloneType> where TNodeType : Node
  10. {
  11. /// <summary>
  12. /// Godot节点实例
  13. /// </summary>
  14. public TNodeType Instance { get; }
  15. /// <summary>
  16. /// 克隆当前对象, 并返回新的对象,
  17. /// 注意: 如果子节点改名或者移动层级, 那么有可能对导致属性中的子节点无法访问
  18. /// </summary>
  19. public abstract TCloneType Clone();
  20.  
  21. public IUiNode(TNodeType node)
  22. {
  23. Instance = node;
  24. }
  25. /// <summary>
  26. /// 嵌套打开子ui
  27. /// </summary>
  28. public UiBase OpenNestedUi(string uiName)
  29. {
  30. var packedScene = ResourceManager.Load<PackedScene>("res://" + GameConfig.UiPrefabDir + uiName + ".tscn");
  31. var uiBase = packedScene.Instantiate<UiBase>();
  32. Instance.AddChild(uiBase);
  33. uiBase.OnCreateUi();
  34. uiBase.ShowUi();
  35. return uiBase;
  36. }
  37. /// <summary>
  38. /// 嵌套打开子ui
  39. /// </summary>
  40. public T OpenNestedUi<T>(string uiName) where T : UiBase
  41. {
  42. return (T)OpenNestedUi(uiName);
  43. }
  44. }