extends Area3D ## An item lying on the ground (stick, stone, flint). Look at it and press E. ## Lives on collision layer 2, so the player walks through it but the ## interaction ray still finds it. var item_id := "stick" var amount := 1 var uid := "" ## stable id for saves (see props.gd) var taken := false func setup(id: String, mesh: Mesh, material: Material, radius: float) -> void: item_id = id collision_layer = 2 collision_mask = 0 monitoring = false var mi := MeshInstance3D.new() mi.mesh = mesh mi.material_override = material add_child(mi) var cs := CollisionShape3D.new() var sph := SphereShape3D.new() sph.radius = radius cs.shape = sph cs.position = Vector3(0, radius * 0.5, 0) add_child(cs) func interact_prompt(_player: Node) -> String: return "[E] Pick up %s" % ItemDB.item_name(item_id) func interact(player: Node) -> void: Actions.pickup(player, self) func collected() -> void: taken = true queue_free()