Advertisement
Guest User

Untitled

a guest
May 12th, 2021
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #####
  2. # en
  3. # Item class that represents an item on the ground or inside a chest
  4. #####
  5. # es
  6. # Clase Item: representa un item en el piso o dentro de un cofre
  7. #####
  8. class_name Item
  9. extends Area2D
  10.  
  11. const TOOLTIP_Y_OFFSET := 20
  12.  
  13. onready var sprite = $Sprite
  14. onready var ui = $HoverUI
  15. onready var ui_container = $HoverUI/Container
  16. onready var name_label = $HoverUI/Container/NameLabel
  17. onready var tooltip_texture = $HoverUI/Container/TextureRect
  18. onready var tween = $Tween
  19. onready var light = $Light2D
  20.  
  21. var item_name := ""
  22. var item_desc := ""
  23. var item_id := 0
  24. var item_uid := ""
  25. var item_type := ""
  26.  
  27. var in_chest := false
  28. var container_chest := Node2D
  29.  
  30.  
  31. func _ready() -> void:
  32.     ## Duplicate the material so that every instance has a unique shader
  33.     ## Duplicamos el material para que cada vez que se instance un nodo Item, tenga un shader unico y no lo comparta con el resto de los items
  34.     var mat = sprite.get_material().duplicate(true)
  35.     sprite.set_material(mat)
  36.  
  37.  
  38. func set_metadata(name: String, desc: String, uid: String, id: int, type: String, effects: Array, is_chest: bool) -> void:
  39.     item_name = name
  40.     item_desc = desc
  41.     item_uid = uid
  42.     item_id = id
  43.     item_type = type
  44.     set_tooltip(item_name, effects)
  45.     in_chest = is_chest
  46.     if not is_chest:
  47.         light.visible = true
  48.     else:
  49.         light.visible = false
  50.  
  51.  
  52. func set_tooltip(name: String, effects: Array) -> void:
  53.     name_label.text = name
  54.     name_label.rect_position.y = name_label.rect_position.y - TOOLTIP_Y_OFFSET * effects.size()
  55.     tooltip_texture.rect_scale.y = tooltip_texture.rect_scale.y * (1 + effects.size())
  56.     tooltip_texture.rect_position.y = tooltip_texture.rect_position.y - TOOLTIP_Y_OFFSET * effects.size()
  57.     var i := 1
  58.     for effect in effects:
  59.         var eff_label = name_label.duplicate(true)
  60.         #eff_label.rect_size = name_label.rect_size
  61.         eff_label.text = effect.id + ": " + str(effect.min) + " / " + str(effect.max)
  62.         eff_label.rect_position.y = name_label.rect_position.y + i * TOOLTIP_Y_OFFSET
  63.         ui_container.add_child(eff_label)
  64.         i += 1
  65.  
  66.  
  67. func set_texture(texture: Texture) -> void:
  68.     sprite.texture = texture
  69.  
  70.  
  71. func _on_Item_mouse_entered():
  72.     ui.offset = get_global_mouse_position()
  73.     ui_container.visible = true
  74.     if in_chest:
  75.         container_chest.hovered_item = self
  76.     tween.interpolate_method(self, "set_shader_border", 0, 2, 0.1)
  77.     tween.start()
  78.  
  79.  
  80. func _on_Item_mouse_exited():
  81.     ui_container.visible = false
  82.     if in_chest:
  83.         container_chest.hovered_item = null
  84.     tween.interpolate_method(self, "set_shader_border", 2, 0, 0.1)
  85.     tween.start()
  86.  
  87.  
  88. func _on_Item_body_entered(body):
  89.     if body.is_in_group("player"):
  90.         body.step_on_item(get_instance_id(), self)
  91.  
  92.  
  93. func _on_Item_body_exited(body):
  94.     if body.is_in_group("player"):
  95.         body.unstep_on_item(get_instance_id())
  96.  
  97.  
  98. func despawn() -> void:
  99.     set_shader_border(0)
  100.     queue_free()
  101.  
  102.  
  103. func set_shader_border(border: float) -> void:
  104.     sprite.material.set_shader_param("border", border)
  105.  
  106. ## For the HUD
  107. ## Para el HUD
  108. func get_sprite() -> Sprite:
  109.     return sprite
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement