Advertisement
Guest User

Untitled

a guest
Oct 19th, 2024
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. extends Node2D
  2.  
  3. const GRID_WIDTH: int = 10
  4. const GRID_HEIGHT: int = 10
  5. const ITEM_SIZE: int = 2
  6. const GRID_SIZE: int = GRID_WIDTH * GRID_HEIGHT
  7. const EMPTY_SPACE: int = 0
  8.  
  9. var inventory: PackedInt32Array = PackedInt32Array()
  10.  
  11. func _ready() -> void:
  12. initialize_worst_case_inventory()
  13. print_grid()
  14.  
  15. func initialize_worst_case_inventory() -> void:
  16. inventory.resize(GRID_SIZE)
  17. inventory.fill(1)
  18.  
  19. var empty_start: int = (GRID_HEIGHT - ITEM_SIZE) * GRID_WIDTH + (GRID_WIDTH - ITEM_SIZE)
  20. for i in range(ITEM_SIZE):
  21. for j in range(ITEM_SIZE):
  22. inventory[empty_start + j + i * GRID_WIDTH] = EMPTY_SPACE
  23.  
  24. func benchmark_find_space(iterations: int) -> float:
  25. var start_time: float = Time.get_ticks_usec()
  26.  
  27. for _i in range(iterations):
  28. find_next_available_space()
  29.  
  30. var end_time: float = Time.get_ticks_usec()
  31. var elapsed_time: float = (end_time - start_time) / 1_000_000.0
  32. print("GDScript: Find space benchmark (%d iterations) took %.6f seconds" % [iterations, elapsed_time])
  33. return elapsed_time
  34.  
  35. func find_next_available_space() -> Vector2i:
  36. var max_index: int = GRID_SIZE - ITEM_SIZE * GRID_WIDTH - ITEM_SIZE + 1
  37. var row_offset: int = GRID_WIDTH - ITEM_SIZE + 1
  38.  
  39. var i: int = 0
  40. while i < max_index:
  41. if inventory[i] == EMPTY_SPACE:
  42. var is_available: bool = true
  43. for y in range(ITEM_SIZE):
  44. for x in range(ITEM_SIZE):
  45. if inventory[i + x + y * GRID_WIDTH] != EMPTY_SPACE:
  46. is_available = false
  47. break
  48. if not is_available:
  49. break
  50. if is_available:
  51. return Vector2i(i % GRID_WIDTH, i / GRID_WIDTH)
  52. i += ITEM_SIZE
  53. else:
  54. i += 1
  55. if i % row_offset == 0:
  56. i += (ITEM_SIZE - 1) * GRID_WIDTH
  57.  
  58. return Vector2i(-1, -1)
  59.  
  60. func print_grid() -> void:
  61. print("GDScript Grid:")
  62. var row: String = ""
  63. for i in range(GRID_SIZE):
  64. row += "□ " if inventory[i] == EMPTY_SPACE else "■ "
  65. if (i + 1) % GRID_WIDTH == 0:
  66. print(row)
  67. row = ""
  68. print("")
  69.  
  70. func initialize_inventory_for_sorting() -> void:
  71. inventory.resize(GRID_SIZE)
  72. inventory.fill(EMPTY_SPACE)
  73.  
  74. var items: PackedInt32Array = PackedInt32Array([1, 2, 3, 4, 5])
  75. var positions: PackedVector2Array = PackedVector2Array([Vector2i(2, 2), Vector2i(5, 1), Vector2i(1, 5), Vector2i(7, 6), Vector2i(4, 8)])
  76.  
  77. for i in range(items.size()):
  78. place_item(items[i], positions[i].x, positions[i].y)
  79.  
  80. func place_item(item: int, x: int, y: int) -> void:
  81. var start_index: int = y * GRID_WIDTH + x
  82. for i in range(ITEM_SIZE):
  83. for j in range(ITEM_SIZE):
  84. inventory[start_index + j + i * GRID_WIDTH] = item
  85.  
  86. func benchmark_sort_inventory(iterations: int) -> float:
  87. var start_time: float = Time.get_ticks_usec()
  88.  
  89. for _i in range(iterations):
  90. sort_inventory()
  91.  
  92. var end_time: float = Time.get_ticks_usec()
  93. var elapsed_time: float = (end_time - start_time) / 1_000_000.0
  94. print("GDScript: Sort inventory benchmark (%d iterations) took %.6f seconds" % [iterations, elapsed_time])
  95. return elapsed_time
  96.  
  97. func sort_inventory() -> void:
  98. var items: PackedInt32Array = PackedInt32Array()
  99. var item_counts: PackedInt32Array = PackedInt32Array()
  100. item_counts.resize(6)
  101.  
  102. for item in inventory:
  103. item_counts[item] += 1
  104.  
  105. for i in range(1, 6):
  106. if item_counts[i] > 0:
  107. items.append(i)
  108.  
  109. inventory.fill(EMPTY_SPACE)
  110.  
  111. for item in items:
  112. var item_pos: Vector2i = find_next_available_space()
  113. if item_pos.x != -1 and item_pos.y != -1:
  114. place_item(item, item_pos.x, item_pos.y)
  115.  
  116. func print_inventory_for_sorting() -> void:
  117. print("GDScript Inventory Before Sorting:")
  118. print_grid()
  119. sort_inventory()
  120. print("GDScript Inventory After Sorting:")
  121. print_grid()
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement