mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-12 02:32:10 +00:00
* Fixes some stupid behavior in computer hardware code. (#61350) * Fixes some stupid behavior in computer hardware code. Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
72 lines
2.6 KiB
Plaintext
72 lines
2.6 KiB
Plaintext
/obj/item/modular_computer/proc/can_install_component(obj/item/computer_hardware/try_install, mob/living/user = null)
|
|
if(!try_install.can_install(src, user))
|
|
return FALSE
|
|
|
|
if(try_install.w_class > max_hardware_size)
|
|
to_chat(user, span_warning("This component is too large for \the [src]!"))
|
|
return FALSE
|
|
|
|
if(try_install.expansion_hw)
|
|
if(LAZYLEN(expansion_bays) >= max_bays)
|
|
to_chat(user, span_warning("All of the computer's expansion bays are filled."))
|
|
return FALSE
|
|
if(LAZYACCESS(expansion_bays, try_install.device_type))
|
|
to_chat(user, span_warning("The computer immediately ejects /the [try_install] and flashes an error: \"Hardware Address Conflict\"."))
|
|
return FALSE
|
|
|
|
if(all_components[try_install.device_type])
|
|
to_chat(user, span_warning("This computer's hardware slot is already occupied by \the [all_components[try_install.device_type]]."))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
|
|
/// Installs component.
|
|
/obj/item/modular_computer/proc/install_component(obj/item/computer_hardware/install, mob/living/user = null)
|
|
if(!can_install_component(install, user))
|
|
return FALSE
|
|
|
|
if(user && !user.transferItemToLoc(install, src))
|
|
return FALSE
|
|
|
|
if(install.expansion_hw)
|
|
LAZYSET(expansion_bays, install.device_type, install)
|
|
all_components[install.device_type] = install
|
|
|
|
to_chat(user, span_notice("You install \the [install] into \the [src]."))
|
|
install.holder = src
|
|
install.forceMove(src)
|
|
install.on_install(src, user)
|
|
|
|
|
|
/// Uninstalls component.
|
|
/obj/item/modular_computer/proc/uninstall_component(obj/item/computer_hardware/yeet, mob/living/user = null)
|
|
if(yeet.holder != src) // Not our component at all.
|
|
return FALSE
|
|
|
|
to_chat(user, span_notice("You remove \the [yeet] from \the [src]."))
|
|
|
|
yeet.forceMove(get_turf(src))
|
|
forget_component(yeet)
|
|
yeet.on_remove(src, user)
|
|
if(enabled && !use_power())
|
|
shutdown_computer()
|
|
update_appearance()
|
|
return TRUE
|
|
|
|
/// This isn't the "uninstall fully" proc, it just makes the computer lose all its references to the component
|
|
/obj/item/modular_computer/proc/forget_component(obj/item/computer_hardware/wipe_memory)
|
|
if(wipe_memory.holder != src)
|
|
return FALSE
|
|
if(wipe_memory.expansion_hw)
|
|
LAZYREMOVE(expansion_bays, wipe_memory.device_type)
|
|
all_components.Remove(wipe_memory.device_type)
|
|
wipe_memory.holder = null
|
|
|
|
/// Checks all hardware pieces to determine if name matches, if yes, returns the hardware piece, otherwise returns null
|
|
/obj/item/modular_computer/proc/find_hardware_by_name(name)
|
|
for(var/i in all_components)
|
|
var/obj/component = all_components[i]
|
|
if(component.name == name)
|
|
return component
|
|
return null
|