class_name SovietWeapons extends RefCounted const MODELS := {0:"ak47",1:"ppsh41",4:"makarov",5:"sks",7:"ak47",8:"ppsh41"} static func build(index: int) -> Node3D: var id: String = MODELS[index] var model := (load("res://assets/soviet/%s.tscn" % id) as PackedScene).instantiate() as Node3D model.name = "WeaponModel" model.set_meta("weapon_index",index) model.set_meta("soviet_model",id) return model static func variant(model: Node3D, design: Dictionary) -> void: if int(model.get_meta("weapon_index",0)) != 4: return var id := "tokarev" if design.get("soviet_variant",0) == 1 else "makarov" if model.get_meta("soviet_model","") == id: return var replacement := (load("res://assets/soviet/%s.tscn" % id) as PackedScene).instantiate() as Node3D for part in ["Frame","Magazine","Bolt"]: var target := model.get_node(part) for child in target.get_children(): target.remove_child(child) child.queue_free() for child in replacement.get_node(part).get_children(): clear_owner(child) child.reparent(target,false) model.get_node("Muzzle").position = replacement.get_node("Muzzle").position model.set_meta("soviet_model",id) replacement.free() static func clear_owner(node: Node) -> void: node.owner = null for child in node.get_children(): clear_owner(child)