Newer
Older
DungeonShooting / DungeonShooting_Godot / src / test / TestGenerateDungeon.cs
@小李xl 小李xl on 3 Jan 2023 2 KB 房间连通功能, 开发中...
  1. using System;
  2. using Godot;
  3.  
  4. public class TestGenerateDungeon : Node2D
  5. {
  6. [Export]
  7. public NodePath TileMapPath;
  8.  
  9. [Export]
  10. public NodePath Camera;
  11. private TileMap _tileMap;
  12. private Camera2D _camera;
  13.  
  14. private GenerateDungeon _generateDungeon;
  15. private Font _font;
  16.  
  17. public override void _Ready()
  18. {
  19. GD.Randomize();
  20. _tileMap = GetNode<TileMap>(TileMapPath);
  21. _camera = GetNode<Camera2D>(Camera);
  22.  
  23. _font = ResourceManager.Load<Font>(ResourcePath.resource_font_cn_font_36_tres);
  24. _generateDungeon = new GenerateDungeon(_tileMap);
  25. var nowTicks = DateTime.Now.Ticks;
  26. _generateDungeon.Generate();
  27. GD.Print("useTime: " + (DateTime.Now.Ticks - nowTicks) / 10000 + "毫秒");
  28. }
  29.  
  30. public override void _Process(float delta)
  31. {
  32. //移动相机位置
  33. var dir = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
  34. _camera.Position += dir * 1000 * delta;
  35. Update();
  36. }
  37.  
  38. public override void _Draw()
  39. {
  40.  
  41. DrawRoomInfo(_generateDungeon.StartRoom);
  42.  
  43. }
  44.  
  45. private void DrawRoomInfo(RoomInfo room)
  46. {
  47. var cellSize = _tileMap.CellSize;
  48. var pos1 = (room.Position + room.Size / 2) * cellSize;
  49. foreach (var nextRoom in room.Next)
  50. {
  51. var pos2 = (nextRoom.Position + nextRoom.Size / 2) * cellSize;
  52. DrawLine(pos1, pos2, Colors.Red);
  53. DrawRoomInfo(nextRoom);
  54. }
  55. DrawString(_font, pos1, room.Id.ToString(), Colors.Yellow);
  56. foreach (var roomDoor in room.Doors)
  57. {
  58. var originPos = roomDoor.OriginPosition * cellSize;
  59. switch (roomDoor.Direction)
  60. {
  61. case DoorDirection.E:
  62. DrawLine(originPos, originPos + new Vector2(3, 0) * cellSize, Colors.Yellow);
  63. DrawLine(originPos + new Vector2(0, 4) * cellSize, originPos + new Vector2(3, 4) * cellSize, Colors.Yellow);
  64. break;
  65. case DoorDirection.W:
  66. DrawLine(originPos, originPos - new Vector2(3, 0) * cellSize, Colors.Yellow);
  67. DrawLine(originPos + new Vector2(0, 4) * cellSize, originPos - new Vector2(3, -4) * cellSize, Colors.Yellow);
  68. break;
  69. case DoorDirection.S:
  70. DrawLine(originPos, originPos + new Vector2(0, 3) * cellSize, Colors.Yellow);
  71. DrawLine(originPos + new Vector2(4, 0) * cellSize, originPos + new Vector2(4, 3) * cellSize, Colors.Yellow);
  72. break;
  73. case DoorDirection.N:
  74. DrawLine(originPos, originPos - new Vector2(0, 3) * cellSize, Colors.Yellow);
  75. DrawLine(originPos + new Vector2(4, 0) * cellSize, originPos - new Vector2(-4, 3) * cellSize, Colors.Yellow);
  76. break;
  77. }
  78. }
  79. }
  80. }