refactor
This commit is contained in:
39
scenes/entities/loot/loot_drop.gd
Normal file
39
scenes/entities/loot/loot_drop.gd
Normal file
@@ -0,0 +1,39 @@
|
||||
extends Area3D
|
||||
|
||||
@onready var mesh: MeshInstance3D = $Mesh
|
||||
@onready var label: Label3D = $Label
|
||||
|
||||
@export var item_id: StringName = &""
|
||||
@export var amount: int = 1
|
||||
|
||||
var rotation_speed: float = 1.5
|
||||
var bob: float = 0.0
|
||||
|
||||
func _enter_tree() -> void:
|
||||
set_multiplayer_authority(1)
|
||||
|
||||
func _ready() -> void:
|
||||
add_to_group("loot")
|
||||
body_entered.connect(_on_body_entered)
|
||||
if item_id != &"":
|
||||
label.text = "%s x%d" % [str(item_id), amount]
|
||||
else:
|
||||
label.text = "Loot"
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
bob += delta
|
||||
mesh.rotation.y += rotation_speed * delta
|
||||
mesh.position.y = 0.5 + sin(bob * 2.0) * 0.1
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
if not multiplayer.is_server() and multiplayer.multiplayer_peer != null:
|
||||
return
|
||||
if not body.is_in_group("player"):
|
||||
return
|
||||
var inv: Node = get_node_or_null("/root/World/Systems/InventorySystem")
|
||||
if inv == null:
|
||||
inv = get_node_or_null("/root/Dungeon/Systems/InventorySystem")
|
||||
if inv and inv.has_method("add_item"):
|
||||
inv.add_item(body, item_id, amount)
|
||||
EventBus.item_picked_up.emit(body, item_id)
|
||||
queue_free()
|
||||
1
scenes/entities/loot/loot_drop.gd.uid
Normal file
1
scenes/entities/loot/loot_drop.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://begk6dfrigj12
|
||||
35
scenes/entities/loot/loot_drop.tscn
Normal file
35
scenes/entities/loot/loot_drop.tscn
Normal file
@@ -0,0 +1,35 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://b0loot0001"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/entities/loot/loot_drop.gd" id="1"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_1"]
|
||||
size = Vector3(0.4, 0.4, 0.4)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="LootMat"]
|
||||
albedo_color = Color(0.95, 0.85, 0.2, 1)
|
||||
emission_enabled = true
|
||||
emission = Color(1.0, 0.9, 0.4, 1)
|
||||
emission_energy_multiplier = 0.6
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_1"]
|
||||
radius = 1.2
|
||||
|
||||
[node name="LootDrop" type="Area3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Mesh" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
mesh = SubResource("BoxMesh_1")
|
||||
material_override = SubResource("LootMat")
|
||||
|
||||
[node name="Label" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
billboard = 1
|
||||
text = "Loot"
|
||||
font_size = 18
|
||||
outline_size = 3
|
||||
|
||||
[node name="PickupShape" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_1")
|
||||
Reference in New Issue
Block a user