34 lines
845 B
GDScript
34 lines
845 B
GDScript
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
|
|
|