mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-19 14:51:27 +00:00
* find and replace. this causes zero errors. * there was one error * repathing * minor emote repathing as well
117 lines
3.3 KiB
Plaintext
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
|