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. /// <summary>
  16. /// 游戏渲染视口
  17. /// </summary>
  18. [Export] public SubViewport SubViewport;
  19.  
  20. /// <summary>
  21. /// SubViewportContainer 组件
  22. /// </summary>
  23. [Export] public SubViewportContainer SubViewportContainer;
  24.  
  25. /// <summary>
  26. /// 场景根节点
  27. /// </summary>
  28. [Export] public Node2D SceneRoot;
  29. /// <summary>
  30. /// 全局根节点
  31. /// </summary>
  32. [Export] public Node2D GlobalNodeRoot;
  33.  
  34. /// <summary>
  35. /// 鼠标指针
  36. /// </summary>
  37. public Cursor Cursor { get; private set; }
  38. /// <summary>
  39. /// 游戏房间
  40. /// </summary>
  41. public RoomManager RoomManager { get; private set; }
  42. /// <summary>
  43. /// 房间配置
  44. /// </summary>
  45. public List<DungeonRoomSplit> RoomConfig { get; private set; }
  46.  
  47. public GameApplication()
  48. {
  49. Instance = this;
  50. InitRoomConfig();
  51.  
  52. //初始化 ActivityObject
  53. ActivityObject.InitActivity();
  54. }
  55. public override void _EnterTree()
  56. {
  57. //随机化种子
  58. //GD.Randomize();
  59. //固定帧率
  60. Engine.MaxFps = 60;
  61. //调试绘制开关
  62. ActivityObject.IsDebug = Debug;
  63. //Engine.TimeScale = 0.3f;
  64.  
  65. //初始化ui
  66. UiManager.Init();
  67. // 初始化鼠标
  68. Input.MouseMode = Input.MouseModeEnum.Hidden;
  69. Cursor = ResourceManager.Load<PackedScene>(ResourcePath.prefab_ui_Cursor_tscn).Instantiate<Cursor>();
  70. AddChild(Cursor);
  71.  
  72. //打开ui
  73. UiManager.Open_RoomUI();
  74. RoomManager = ResourceManager.Load<PackedScene>(ResourcePath.scene_Room_tscn).Instantiate<RoomManager>();
  75. SceneRoot.AddChild(RoomManager);
  76. }
  77.  
  78. public override void _Process(double delta)
  79. {
  80. InputManager.Update((float)delta);
  81. }
  82.  
  83. /// <summary>
  84. /// 将 viewport 以外的全局坐标 转换成 viewport 内的全局坐标
  85. /// </summary>
  86. public Vector2 GlobalToViewPosition(Vector2 globalPos)
  87. {
  88. //return globalPos;
  89. return globalPos / GameConfig.WindowScale - (GameConfig.ViewportSize / 2) + GameCamera.Main.GlobalPosition;
  90. }
  91.  
  92. /// <summary>
  93. /// 将 viewport 以内的全局坐标 转换成 viewport 外的全局坐标
  94. /// </summary>
  95. public Vector2 ViewToGlobalPosition(Vector2 viewPos)
  96. {
  97. // 3.5写法
  98. //return (viewPos - GameCamera.Main.GlobalPosition + (GameConfig.ViewportSize / 2)) * GameConfig.WindowScale - GameCamera.Main.SubPixelPosition;
  99. return (viewPos - (GameCamera.Main.GlobalPosition + GameCamera.Main.Offset) + (GameConfig.ViewportSize / 2)) * GameConfig.WindowScale;
  100. }
  101.  
  102. //初始化房间配置
  103. private void InitRoomConfig()
  104. {
  105. //加载房间配置信息
  106. var file = FileAccess.Open(ResourcePath.resource_map_RoomConfig_json, FileAccess.ModeFlags.Read);
  107. var asText = file.GetAsText();
  108. RoomConfig = JsonSerializer.Deserialize<List<DungeonRoomSplit>>(asText);
  109. file.Dispose();
  110. //需要处理 DoorAreaInfos 长度为 0 的房间, 并为其配置默认值
  111. foreach (var roomSplit in RoomConfig)
  112. {
  113. var areaInfos = roomSplit.RoomInfo.DoorAreaInfos;
  114. if (areaInfos.Count == 0)
  115. {
  116. areaInfos.Add(new DoorAreaInfo(DoorDirection.N, GameConfig.TileCellSize, (roomSplit.RoomInfo.Size.X - 1) * GameConfig.TileCellSize));
  117. areaInfos.Add(new DoorAreaInfo(DoorDirection.S, GameConfig.TileCellSize, (roomSplit.RoomInfo.Size.X - 1) * GameConfig.TileCellSize));
  118. areaInfos.Add(new DoorAreaInfo(DoorDirection.W, GameConfig.TileCellSize, (roomSplit.RoomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  119. areaInfos.Add(new DoorAreaInfo(DoorDirection.E, GameConfig.TileCellSize, (roomSplit.RoomInfo.Size.Y - 1) * GameConfig.TileCellSize));
  120. }
  121. }
  122. }
  123. }