mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-12 08:36:00 +01:00
Added component manipulation on objects (#60771)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
This commit is contained in:
@@ -78,6 +78,52 @@
|
||||
target._AddElement(lst)
|
||||
log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(target)].")
|
||||
message_admins(span_notice("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(target)]."))
|
||||
if(href_list[VV_HK_REMOVECOMPONENT] || href_list[VV_HK_MASS_REMOVECOMPONENT])
|
||||
if(!check_rights(NONE))
|
||||
return
|
||||
var/mass_remove = href_list[VV_HK_MASS_REMOVECOMPONENT]
|
||||
var/list/components = list()
|
||||
var/all_components_on_target = LAZYACCESS(target.datum_components, /datum/component)
|
||||
if(islist(all_components_on_target))
|
||||
for(var/datum/component/component in LAZYACCESS(target.datum_components, /datum/component))
|
||||
components += component.type
|
||||
else if(all_components_on_target)
|
||||
var/datum/component/component = all_components_on_target
|
||||
components += component.type
|
||||
var/list/names = list()
|
||||
names += "---Components---"
|
||||
if(length(components))
|
||||
names += sortList(components, /proc/cmp_typepaths_asc)
|
||||
names += "---Elements---"
|
||||
// We have to list every element here because there is no way to know what element is on this object without doing some sort of hack.
|
||||
names += sortList(subtypesof(/datum/element), /proc/cmp_typepaths_asc)
|
||||
var/path = tgui_input_list(usr, "Choose a component/element to remove. All elements listed here may not be on the datum.", "Remove element", names)
|
||||
if(!usr || !path || path == "---Components---" || path == "---Elements---")
|
||||
return
|
||||
if(QDELETED(src))
|
||||
to_chat(usr, "That thing doesn't exist anymore!")
|
||||
return
|
||||
var/list/targets_to_remove_from = list(target)
|
||||
if(mass_remove)
|
||||
var/method = vv_subtype_prompt(target.type)
|
||||
targets_to_remove_from = get_all_of_type(target.type, method)
|
||||
|
||||
if(alert(usr, "Are you sure you want to mass-delete [path] on [target.type]?", "Mass Remove Confirmation", "Yes", "No") == "No")
|
||||
return
|
||||
|
||||
for(var/datum/target_to_remove_from as anything in targets_to_remove_from)
|
||||
if(ispath(path, /datum/element))
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
lst = list()
|
||||
lst.Insert(1, path)
|
||||
target._RemoveElement(lst)
|
||||
else
|
||||
var/list/components_actual = target_to_remove_from.GetComponents(path)
|
||||
for(var/to_delete in components_actual)
|
||||
qdel(to_delete)
|
||||
|
||||
message_admins(span_notice("[key_name_admin(usr)] has [mass_remove? "mass" : ""] removed [path] component from [mass_remove? target.type : key_name_admin(target)]."))
|
||||
if(href_list[VV_HK_MODIFY_GREYSCALE])
|
||||
if(!check_rights(NONE))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user