More integrated circuit fixes and code improvements

This commit is contained in:
ACCount
2017-11-26 13:56:47 +03:00
committed by CitadelStationBot
parent d3b3c54e70
commit 0be326633d
29 changed files with 590 additions and 403 deletions
@@ -40,7 +40,7 @@ D [1]/ ||
message_admins("ERROR: An integrated_io ([name]) spawned without a valid holder! This is a bug.")
/datum/integrated_io/Destroy()
disconnect()
disconnect_all()
data = null
holder = null
return ..()
@@ -102,7 +102,36 @@ D [1]/ ||
/datum/integrated_io/activate/scramble()
push_data()
/datum/integrated_io/proc/write_data_to_pin(var/new_data)
/datum/integrated_io/proc/handle_wire(datum/integrated_io/linked_pin, obj/item/tool, action, mob/living/user)
if(istype(tool, /obj/item/device/multitool))
var/obj/item/device/multitool/multitool = tool
switch(action)
if("wire")
multitool.wire(src, user)
return TRUE
if("unwire")
if(linked_pin)
multitool.unwire(src, linked_pin, user)
return TRUE
if("data")
ask_for_pin_data(user)
return TRUE
else if(istype(tool, /obj/item/device/integrated_electronics/wirer))
var/obj/item/device/integrated_electronics/wirer/wirer = tool
if(linked_pin)
wirer.wire(linked_pin, user)
else
wirer.wire(src, user)
else if(istype(tool, /obj/item/device/integrated_electronics/debugger))
var/obj/item/device/integrated_electronics/debugger/debugger = tool
debugger.write_data(src, user)
return TRUE
return FALSE
/datum/integrated_io/proc/write_data_to_pin(new_data)
if(isnull(new_data) || isnum(new_data) || istext(new_data) || isweakref(new_data))
data = new_data
holder.on_data_written()
@@ -131,21 +160,20 @@ D [1]/ ||
return "the [english_list(linked)]"
return "nothing"
/datum/integrated_io/proc/disconnect()
//First we iterate over everything we are linked to.
if(linked && linked.len)
for(var/i in 1 to linked.len)
var/datum/integrated_io/their_io = linked[i]
//While doing that, we iterate them as well, and disconnect ourselves from them.
if(their_io.linked.len && their_io.linked)
for(var/j in 1 to their_io.linked.len)
var/datum/integrated_io/their_linked_io = their_io.linked[j]
if(their_linked_io == src)
their_io.linked.Remove(src)
else
continue
//Now that we're removed from them, we gotta remove them from us.
linked.Remove(their_io)
/datum/integrated_io/proc/connect_pin(datum/integrated_io/pin)
pin.linked |= src
linked |= pin
// Iterates over every linked pin and disconnects them.
/datum/integrated_io/proc/disconnect_all()
for(var/pin in linked)
disconnect_pin(pin)
/datum/integrated_io/proc/disconnect_pin(datum/integrated_io/pin)
pin.linked.Remove(src)
linked.Remove(pin)
/datum/integrated_io/proc/ask_for_data_type(mob/user, var/default, var/list/allowed_data_types = list("string","number","null"))
var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in allowed_data_types
@@ -155,7 +183,7 @@ D [1]/ ||
var/new_data = null
switch(type_to_use)
if("string")
new_data = stripped_input(user, "Now type in a string.","[src] string writing", istext(default) ? default : null)
new_data = stripped_input(user, "Now type in a string.","[src] string writing", istext(default) ? default : null, no_trim = TRUE)
if(istext(new_data) && holder.check_interactivity(user) )
to_chat(user, "<span class='notice'>You input "+new_data+" into the pin.</span>")
return new_data