Files
2016-03-06 20:52:14 +01:00

183 lines
4.7 KiB
Plaintext

/*
Special frequency list:
On the map:
1149 for PDA messaging
1433 for hydroponics alerts
1435 for status displays
1437 for atmospherics/fire alerts
1445 for bot nav beacons
1447 for mulebot control
1449 for airlock controls
1453 for engineering access
1457 for door access request
1475 for Mail chute location
1359 for security headsets
1357 for engineering headsets
1354 for research headsets
1356 for medical headsets
1352 for syndicate headsets
*/
#define TRANSMISSION_WIRE 0
#define TRANSMISSION_RADIO 1
var/global/datum/controller/radio/radio_controller
datum/controller/radio
var/list/datum/radio_frequency/frequencies = list()
var/list/active_jammers = list()
proc/add_object(obj/device, new_frequency)
var/datum/radio_frequency/frequency = frequencies[new_frequency]
if(!frequency)
frequency = new
frequency.frequency = new_frequency
frequencies[new_frequency] = frequency
if( !frequency.devices.Find(device) )
frequency.devices += device
return frequency
proc/remove_object(obj/device, old_frequency)
var/datum/radio_frequency/frequency = frequencies[old_frequency]
if(frequency)
frequency.devices -= device
if(frequency.devices.len < 1)
qdel(frequency)
frequencies -= old_frequency
return 1
proc/return_frequency(frequency)
return frequencies[frequency]
/*
mob/verb/listfreq()
boutput(world, "<span style=\"color:blue\">registered devices:</span>")
for(var/fn in radio_controller.frequencies)
var/datum/radio_frequency/f = radio_controller.return_frequency(fn)
boutput(world, "<span style=\"color:blue\">[fn]</span>")
for(var/obj/o in f.devices)
boutput(world, "<span style=\"color:blue\">>[o]</span>")
boutput(world, "<span style=\"color:blue\">end</span>")
*/
var/global/list/datum/signal/reusable_signals = list()
proc/get_free_signal()
if (reusable_signals && reusable_signals.len)
while (. == null && reusable_signals.len)
. = reusable_signals[reusable_signals.len]
reusable_signals.len--
if (. == null)
return new /datum/signal ()
else
return new /datum/signal ()
datum/radio_frequency
var/frequency
var/list/obj/devices = list()
proc
post_signal(obj/source, datum/signal/signal, range)
var/turf/start_point
if(range)
start_point = get_turf(source)
if(!start_point)
if (reusable_signals && reusable_signals.len && !(signal in reusable_signals))
signal.dispose()
else if (signal)
signal.wipe()
reusable_signals += signal
return 0
if (check_for_jammer(source))
return 0
signal.channels_passed += "[src.frequency];"
for(var/obj/device in devices)
if(device != source)
if (check_for_jammer(device))
continue
if(range)
var/turf/end_point = get_turf(device)
if(end_point)
if(start_point.z != end_point.z) continue
if(max(abs(start_point.x-end_point.x), abs(start_point.y-end_point.y)) <= range)
device.receive_signal(signal, TRANSMISSION_RADIO, frequency)
else
device.receive_signal(signal, TRANSMISSION_RADIO, frequency)
if (!reusable_signals || reusable_signals.len > 10)
signal.dispose()
else if (signal)
signal.wipe()
if (!(signal in reusable_signals))
reusable_signals += signal
check_for_jammer(obj/source)
if (solar_flare)
return 1
if (radio_controller.active_jammers.len)
for (var/atom/A in radio_controller.active_jammers) // Can be a mob or obj.
if (A && get_dist(get_turf(source), get_turf(A)) <= 6)
return 1
return 0
obj/proc
receive_signal(datum/signal/signal, receive_method, receive_param)
return null
datum/signal
var/obj/source
var/channels_passed = "" //Param-like list of frequencies this signal has been on, for transponders and stuff.
var/transmission_method = 0
//0 = wire
//1 = radio transmission
var/data = list()
var/encryption
//We can carry a computer file around, why not.
var/datum/computer/file/data_file
proc/copy_from(datum/signal/model)
source = model.source
transmission_method = model.transmission_method
data = model.data
encryption = model.encryption
proc/wipe()
source = null
channels_passed = ""
data = list()
encryption = null
if (data_file)
data_file.dispose()
data_file = null
return
disposing()
if(src.data_file)
src.data_file.dispose()
if (reusable_signals)
reusable_signals -= null
..()
// debuggging
proc/show()
boutput(world, "signal from \ref[source][source] on [channels_passed]")
for(var/key in data)
boutput(world, "[key]=[data[key]]")
boutput(world, "end of signal")