Files
Paradise/code/datums/radio_frequency.dm
Luc 5d5f83d791 Lobotomizes the brain from /mob/living/carbon (#23320)
* find and replace. this causes zero errors.

* there was one error

* repathing

* minor emote repathing as well
2023-11-29 18:39:43 +00:00

117 lines
3.3 KiB
Plaintext

/datum/radio_frequency
var/frequency as num
var/list/obj/devices = list()
/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, filter = null as text|null, range = null as num|null)
var/turf/start_point
if(range)
start_point = get_turf(source)
if(!start_point)
qdel(signal)
return 0
if(filter)
send_to_filter(source, signal, filter, start_point, range)
send_to_filter(source, signal, RADIO_DEFAULT, start_point, range)
else
//Broadcast the signal to everyone!
for(var/next_filter in devices)
send_to_filter(source, signal, next_filter, start_point, range)
//Sends a signal to all machines belonging to a given filter. Should be called by post_signal()
/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, filter, turf/start_point = null, range = null)
if(range && !start_point)
return
for(var/obj/device in devices[filter])
if(device == source)
continue
if(range)
var/turf/end_point = get_turf(device)
if(!end_point)
continue
if(start_point.z!=end_point.z || get_dist(start_point, end_point) > range)
continue
device.receive_signal(signal, TRANSMISSION_RADIO, frequency)
/datum/radio_frequency/proc/add_listener(obj/device as obj, filter as text|null)
if(!filter)
filter = RADIO_DEFAULT
//log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]")
var/list/obj/devices_line = devices[filter]
if(!devices_line)
devices_line = new
devices[filter] = devices_line
if(device in devices[filter])
return
devices_line += device
// var/list/obj/devices_line___ = devices[filter_str]
// var/l = devices_line___.len
//log_admin("DEBUG: devices_line.len=[devices_line.len]")
//log_admin("DEBUG: devices(filter_str).len=[l]")
/datum/radio_frequency/proc/remove_listener(obj/device)
for(var/devices_filter in devices)
var/list/devices_line = devices[devices_filter]
devices_line-=device
while(null in devices_line)
devices_line -= null
if(devices_line.len==0)
devices -= devices_filter
qdel(devices_line)
/datum/signal
var/obj/source
var/transmission_method = 0 //unused at the moment
//0 = wire
//1 = radio transmission
//2 = subspace transmission
var/list/data = list()
var/encryption
var/frequency = 0
/datum/signal/proc/copy_from(datum/signal/model)
source = model.source
transmission_method = model.transmission_method
data = model.data
encryption = model.encryption
frequency = model.frequency
/datum/signal/proc/debug_print()
if(source)
. = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n"
else
. = "signal = {source = '[source]' ()\n"
for(var/i in data)
. += "data\[\"[i]\"\] = \"[data[i]]\"\n"
if(islist(data[i]))
var/list/L = data[i]
for(var/t in L)
. += "data\[\"[i]\"\] list has: [t]"
/datum/signal/proc/get_race(mob/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
. = H.dna.species.name
else if(isbrain(M))
var/mob/living/brain/B = M
. = B.get_race()
else if(issilicon(M))
. = "Artificial Life"
else if(isslime(M))
. = "Slime"
else if(isbot(M))
. = "Bot"
else if(isanimal(M))
. = "Domestic Animal"
else
. = "Unidentifiable"
//callback used by objects to react to incoming radio signals
/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
return null