Guest User

Destructible

a guest
Nov 16th, 2024
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. extends Sprite2D
  2.  
  3. var frame_counter = 0
  4. var health : float = 10:
  5. set(value):
  6. health = value
  7. if health < 0:
  8. drop_item()
  9. var separation : float
  10. @onready var player_reference = get_tree().current_scene.find_child("Player")
  11.  
  12. var drop_node = preload("res://scenes/pickups.tscn")
  13. @export var drops : Array[Pickups]
  14.  
  15.  
  16. func _physics_process(_delta):
  17. frame_counter += 1
  18. if frame_counter >= 6:
  19. frame_counter = 0
  20. frame = (frame + 1) % 8
  21.  
  22. separation = (player_reference.position - position).length()
  23. if separation < player_reference.nearest_enemy_distance:
  24. player_reference.nearest_enemy = self
  25.  
  26.  
  27. func take_damage(amount = 1):
  28. health -= amount
  29. var tween = get_tree().create_tween()
  30. tween.tween_property(self, "modulate", Color(3, 0.25, 0.25), 0.2)
  31. tween.chain().tween_property(self, "modulate", Color(1, 1, 1), 0.2)
  32. tween.bind_node(self)
  33.  
  34.  
  35. func drop_item():
  36. var item
  37. var weights = []
  38.  
  39. for pickup in drops:
  40. if pickup is Gold:
  41. weights.append(pickup.weight)
  42. else:
  43. weights.append(pickup.weight * player_reference.luck)
  44.  
  45.  
  46. var chance = randf()
  47. for i in range(drops.size()):
  48. if chance < get_weighted_chance(weights, i):
  49. item = drops[i]
  50. break
  51.  
  52.  
  53. var item_to_drop = drop_node.instantiate()
  54.  
  55. item_to_drop.type = item
  56. item_to_drop.position = position
  57. item_to_drop.player_reference = player_reference
  58.  
  59. get_tree().current_scene.call_deferred("add_child", item_to_drop)
  60. queue_free()
  61.  
  62. func get_weighted_chance(weight, index):
  63. var sum = 0
  64. for i in range(weight.size()):
  65. sum += weight[i]
  66.  
  67. var cumulative = 0
  68. for i in range(index + 1):
  69. cumulative += weight[i]
  70.  
  71. return float(cumulative)/sum
  72.  
Advertisement
Add Comment
Please, Sign In to add comment