class_name Weapon extends Node3D var stats: WeaponStats var attachments: Array[Attachment] func init_weapon(stats: WeaponStats): self.stats = stats; func attach(newAttachment: Attachment)-> void: attachments.append(newAttachment) func unattach(attachmentToRemove: Attachment)-> void: attachments.erase(attachmentToRemove) func get_damage()->int: var damage = stats.damage for attachment in attachments: damage += attachment.get_damage() return damage func get_fire_rate()->int: var fire_rate = stats.fire_rate for attachment in attachments: fire_rate += attachment.get_fire_rate() return fire_rate func get_hit_effects()-> Array[Effect]: var hit_effects = [] hit_effects.append_array(stats.hit_effects.value) for attachment in attachments: hit_effects.append_array(attachment.get_hit_effects()) return hit_effects