Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / GameApplication.cs
  1.  
  2. using System.Collections.Generic;
  3. using System.Text.Json;
  4. using Godot;
  5.  
  6. public partial class GameApplication : Node2D
  7. {
  8. public static GameApplication Instance { get; private set; }
  9.  
  10. /// <summary>
  11. /// 是否开启调试
  12. /// </summary>
  13. [Export] public bool Debug = false;
  14.  
  15. [Export] public PackedScene CursorPack;
  16.  
  17. [Export] public NodePath RoomPath;
  18.  
  19. [Export] public NodePath ViewportPath;
  20.  
  21. [Export] public NodePath ViewportContainerPath;
  22.  
  23. [Export] public NodePath UiPath;
  24.  
  25. [Export] public NodePath GlobalNodeRootPath;
  26.  
  27. [Export] public Font Font;
  28. /// <summary>
  29. /// 鼠标指针
  30. /// </summary>
  31. public Cursor Cursor { get; private set; }
  32.  
  33. /// <summary>
  34. /// 游戏房间
  35. /// </summary>
  36. public RoomManager RoomManager { get; private set; }
  37.  
  38. /// <summary>
  39. /// 游戏渲染视口
  40. /// </summary>
  41. public SubViewport SubViewport { get; private set; }
  42.  
  43. /// <summary>
  44. /// SubViewportContainer 组件
  45. /// </summary>
  46. public SubViewportContainer SubViewportContainer { get; private set; }
  47.  
  48. /// <summary>
  49. /// 游戏ui对象
  50. /// </summary>
  51. public RoomUI Ui { get; private set; }
  52.  
  53. /// <summary>
  54. /// 全局根节点
  55. /// </summary>
  56. public Node2D GlobalNodeRoot { get; private set; }
  57. /// <summary>
  58. /// 房间配置
  59. /// </summary>
  60. public readonly List<DungeonRoomSplit> RoomConfig;
  61.  
  62. public GameApplication()
  63. {
  64. Instance = this;
  65.  
  66. //加载房间配置信息
  67. var file = FileAccess.Open(ResourcePath.resource_map_RoomConfig_json, FileAccess.ModeFlags.Read);
  68. var asText = file.GetAsText();
  69. RoomConfig = JsonSerializer.Deserialize<List<DungeonRoomSplit>>(asText);
  70. file.Dispose();
  71.  
  72. //扫描并注册当前程序集下的武器
  73. WeaponManager.RegisterWeaponFromAssembly(GetType().Assembly);
  74. }
  75. public override void _EnterTree()
  76. {
  77. //随机化种子
  78. GD.Randomize();
  79. //固定帧率
  80. Engine.MaxFps = 60;
  81. //调试绘制开关
  82. ActivityObject.IsDebug = Debug;
  83. //Engine.TimeScale = 0.3f;
  84.  
  85. GlobalNodeRoot = GetNode<Node2D>(GlobalNodeRootPath);
  86. // 初始化鼠标
  87. Input.MouseMode = Input.MouseModeEnum.Hidden;
  88. Cursor = CursorPack.Instantiate<Cursor>();
  89.  
  90. RoomManager = GetNode<RoomManager>(RoomPath);
  91. SubViewport = GetNode<SubViewport>(ViewportPath);
  92. SubViewportContainer = GetNode<SubViewportContainer>(ViewportContainerPath);
  93. Ui = GetNode<RoomUI>(UiPath);
  94.  
  95. Ui.AddChild(Cursor);
  96. }
  97.  
  98. public override void _Process(double delta)
  99. {
  100. InputManager.Update((float)delta);
  101. }
  102.  
  103. /// <summary>
  104. /// 将 viewport 以外的全局坐标 转换成 viewport 内的全局坐标
  105. /// </summary>
  106. public Vector2 GlobalToViewPosition(Vector2 globalPos)
  107. {
  108. //return globalPos;
  109. return globalPos / GameConfig.WindowScale - (GameConfig.ViewportSize / 2) + GameCamera.Main.GlobalPosition;
  110. }
  111.  
  112. /// <summary>
  113. /// 将 viewport 以内的全局坐标 转换成 viewport 外的全局坐标
  114. /// </summary>
  115. public Vector2 ViewToGlobalPosition(Vector2 viewPos)
  116. {
  117. //return viewPos;
  118. return (viewPos - GameCamera.Main.GlobalPosition + (GameConfig.ViewportSize / 2)) * GameConfig.WindowScale - GameCamera.Main.SubPixelPosition;
  119. }
  120. }