Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #####
- # en
- # Item class that represents an item on the ground or inside a chest
- #####
- # es
- # Clase Item: representa un item en el piso o dentro de un cofre
- #####
- class_name Item
- extends Area2D
- const TOOLTIP_Y_OFFSET := 20
- onready var sprite = $Sprite
- onready var ui = $HoverUI
- onready var ui_container = $HoverUI/Container
- onready var name_label = $HoverUI/Container/NameLabel
- onready var tooltip_texture = $HoverUI/Container/TextureRect
- onready var tween = $Tween
- onready var light = $Light2D
- var item_name := ""
- var item_desc := ""
- var item_id := 0
- var item_uid := ""
- var item_type := ""
- var in_chest := false
- var container_chest := Node2D
- func _ready() -> void:
- ## Duplicate the material so that every instance has a unique shader
- ## 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
- var mat = sprite.get_material().duplicate(true)
- sprite.set_material(mat)
- func set_metadata(name: String, desc: String, uid: String, id: int, type: String, effects: Array, is_chest: bool) -> void:
- item_name = name
- item_desc = desc
- item_uid = uid
- item_id = id
- item_type = type
- set_tooltip(item_name, effects)
- in_chest = is_chest
- if not is_chest:
- light.visible = true
- else:
- light.visible = false
- func set_tooltip(name: String, effects: Array) -> void:
- name_label.text = name
- name_label.rect_position.y = name_label.rect_position.y - TOOLTIP_Y_OFFSET * effects.size()
- tooltip_texture.rect_scale.y = tooltip_texture.rect_scale.y * (1 + effects.size())
- tooltip_texture.rect_position.y = tooltip_texture.rect_position.y - TOOLTIP_Y_OFFSET * effects.size()
- var i := 1
- for effect in effects:
- var eff_label = name_label.duplicate(true)
- #eff_label.rect_size = name_label.rect_size
- eff_label.text = effect.id + ": " + str(effect.min) + " / " + str(effect.max)
- eff_label.rect_position.y = name_label.rect_position.y + i * TOOLTIP_Y_OFFSET
- ui_container.add_child(eff_label)
- i += 1
- func set_texture(texture: Texture) -> void:
- sprite.texture = texture
- func _on_Item_mouse_entered():
- ui.offset = get_global_mouse_position()
- ui_container.visible = true
- if in_chest:
- container_chest.hovered_item = self
- tween.interpolate_method(self, "set_shader_border", 0, 2, 0.1)
- tween.start()
- func _on_Item_mouse_exited():
- ui_container.visible = false
- if in_chest:
- container_chest.hovered_item = null
- tween.interpolate_method(self, "set_shader_border", 2, 0, 0.1)
- tween.start()
- func _on_Item_body_entered(body):
- if body.is_in_group("player"):
- body.step_on_item(get_instance_id(), self)
- func _on_Item_body_exited(body):
- if body.is_in_group("player"):
- body.unstep_on_item(get_instance_id())
- func despawn() -> void:
- set_shader_border(0)
- queue_free()
- func set_shader_border(border: float) -> void:
- sprite.material.set_shader_param("border", border)
- ## For the HUD
- ## Para el HUD
- func get_sprite() -> Sprite:
- return sprite
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement