From 9a6b5c274940aab3bd8441c1365c4fc8a8f5b9a4 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 5 Oct 2015 08:28:52 -0700 Subject: [PATCH 1/2] Upgrade radios to NanoUI Things changed: - All radios now use nanoUI - Syndicate mode for any radios with syndicate access! - Electropacks also upgraded, since they are technically radios - Fancy as a motherfucker --- code/datums/wires/radio.dm | 5 - .../items/devices/radio/electropack.dm | 91 ++++-------- .../game/objects/items/devices/radio/radio.dm | 137 ++++++++++-------- code/modules/nano/interaction/default.dm | 2 + nano/templates/radio_basic.tmpl | 89 ++++++++++++ nano/templates/radio_electro.tmpl | 37 +++++ 6 files changed, 236 insertions(+), 125 deletions(-) create mode 100644 nano/templates/radio_basic.tmpl create mode 100644 nano/templates/radio_electro.tmpl diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index 9da8890ac32..6c2fb9713da 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -12,11 +12,6 @@ var/const/WIRE_TRANSMIT = 4 return 1 return 0 -/datum/wires/radio/Interact(var/mob/living/user) - if(CanUse(user)) - var/obj/item/device/radio/R = holder - R.interact(user) - /datum/wires/radio/UpdatePulsed(var/index) var/obj/item/device/radio/R = holder switch(index) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 56d6fbbdafd..b6ea20e9954 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -10,11 +10,13 @@ materials = list(MAT_METAL=10000, MAT_GLASS=2500) var/code = 2 + is_special = 1 + /obj/item/device/radio/electropack/attack_hand(mob/user as mob) if(src == user.back) user << "You need help taking this off!" - return - ..() + return 0 + . = ..() /obj/item/device/radio/electropack/Destroy() if(istype(src.loc, /obj/item/assembly/shock_kit)) @@ -53,42 +55,22 @@ A.flags |= NODROP /obj/item/device/radio/electropack/Topic(href, href_list) - //..() - if(usr.stat || usr.restrained()) - return - if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf))))) - usr.set_machine(src) - if(href_list["freq"]) - var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - set_frequency(new_frequency) - else - if(href_list["code"]) - code += text2num(href_list["code"]) - code = round(code) - code = min(100, code) - code = max(1, code) - else - if(href_list["power"]) - on = !( on ) - icon_state = "electropack[on]" - if(!( master )) - if(istype(loc, /mob)) - attack_self(loc) - else - for(var/mob/M in viewers(1, src)) - if(M.client) - attack_self(M) - else - if(istype(master.loc, /mob)) - attack_self(master.loc) - else - for(var/mob/M in viewers(1, master)) - if(M.client) - attack_self(M) - else - usr << browse(null, "window=radio") - return - return + if(..()) + return 1 + + if(href_list["freq"]) + var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) + set_frequency(new_frequency) + + else if(href_list["code"]) + code += text2num(href_list["code"]) + code = round(code) + code = Clamp(code, 1, 100) + + else if(href_list["power"]) + on = !on + + add_fingerprint(usr) /obj/item/device/radio/electropack/receive_signal(datum/signal/signal) if(!signal || signal.encryption != code) @@ -115,26 +97,17 @@ master.receive_signal() return -/obj/item/device/radio/electropack/attack_self(mob/user as mob, flag1) - if(!istype(user, /mob/living/carbon/human)) - return - user.set_machine(src) - var/dat = {" -Turn [on ? "Off" : "On"]
-Frequency/Code for electropack:
-Frequency: -- -- [format_frequency(frequency)] -+ -+
+/obj/item/device/radio/electropack/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] -Code: -- -- [code] -+ -+
-
"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return + data["power"] = on + data["freq"] = format_frequency(frequency) + data["code"] = code + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_electro.tmpl", "[name]", 550, 500) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 4aa8f8b73f0..8b340f518a2 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -38,6 +38,9 @@ var/global/list/default_medbay_channels = list( var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrpyed radio + + var/is_special = 0 //For electropacks mostly, skips Topic() checks + flags = CONDUCT slot_flags = SLOT_BELT throw_speed = 2 @@ -89,59 +92,68 @@ var/global/list/default_medbay_channels = list( secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) /obj/item/device/radio/attack_ghost(mob/user) - interact(user) + return ui_interact(user) /obj/item/device/radio/attack_self(mob/user as mob) user.set_machine(src) interact(user) -/obj/item/device/radio/interact(mob/user as mob) - if(!on) - return +/obj/item/device/radio/interact(mob/user) + if(!user) + return 0 - if(active_uplink_check(user)) - return + if(b_stat) + wires.Interact(user) - var/dat = "[src]" + return ui_interact(user) - if(!istype(src, /obj/item/device/radio/headset)) //Headsets dont get a mic button - dat += "Microphone: [broadcasting ? "Engaged" : "Disengaged"]
" +/obj/item/device/radio/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] - dat += {" - Speaker: [listening ? "Engaged" : "Disengaged"]
- Frequency: - - - - - [format_frequency(frequency)] - + - +
- "} + data["mic_status"] = broadcasting + data["speaker"] = listening + data["freq"] = format_frequency(frequency) + data["rawfreq"] = num2text(frequency) - dat+=list_channels(user) + data["mic_cut"] = (wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) + data["spk_cut"] = (wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) - dat+={"[text_wires()]
"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return + var/list/chanlist = list_channels(user) + if(islist(chanlist) && chanlist.len) + data["chan_list"] = chanlist + data["chan_list_len"] = chanlist.len + + if(syndie) + data["useSyndMode"] = 1 + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 550, 500) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) /obj/item/device/radio/proc/list_channels(var/mob/user) return list_internal_channels(user) /obj/item/device/radio/proc/list_secure_channels(var/mob/user) - var/dat = "" - for (var/ch_name in channels) - dat+=text_sec_channel(ch_name, channels[ch_name]) + var/dat[0] + + for(var/ch_name in channels) + var/chan_stat = channels[ch_name] + var/listening = !!(chan_stat & FREQ_LISTENING) != 0 + + dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening))) + return dat /obj/item/device/radio/proc/list_internal_channels(var/mob/user) - var/dat = "" - for (var/internal_chan in internal_channels) + var/dat[0] + for(var/internal_chan in internal_channels) if(has_channel_access(user, internal_chan)) - dat+="[get_frequency_name(text2num(internal_chan))]
" + dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan))))) - if(dat) - dat = "
Internal Channels
" + dat return dat /obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq) @@ -169,13 +181,6 @@ var/global/list/default_medbay_channels = list( return wires.GetInteractWindow() return -/obj/item/device/radio/proc/text_sec_channel(var/chan_name, var/chan_stat) - var/list = !!(chan_stat&FREQ_LISTENING)!=0 - return {" - [chan_name]
- Speaker: [list ? "Engaged" : "Disengaged"]
- "} - /obj/item/device/radio/proc/ToggleBroadcast() broadcasting = !broadcasting && !(wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) @@ -186,6 +191,9 @@ var/global/list/default_medbay_channels = list( if(..()) return 1 + if(is_special) + return 0 + if (href_list["track"]) var/mob/target = locate(href_list["track"]) var/mob/living/silicon/ai/A = locate(href_list["track2"]) @@ -205,7 +213,7 @@ var/global/list/default_medbay_channels = list( else if (href_list["talk"]) ToggleBroadcast() . = 1 - else if (href_list["listen"]) + else if(href_list["listen"]) var/chan_name = href_list["ch_name"] if (!chan_name) ToggleReception() @@ -220,11 +228,10 @@ var/global/list/default_medbay_channels = list( if(has_channel_access(usr, freq)) set_frequency(text2num(freq)) . = 1 + if(href_list["nowindow"]) // here for pAIs, maybe others will want it, idk return 1 - if(.) - interact(usr) add_fingerprint(usr) /obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = config.contact_levels) //BS12 EDIT @@ -703,32 +710,40 @@ var/global/list/default_medbay_channels = list( usr << "Loudspeaker enabled." . = 1 - if(.) - interact(usr) /obj/item/device/radio/borg/interact(mob/user as mob) if(!on) return - var/dat = "[src]" - dat += {" - Speaker: [listening ? "Engaged" : "Disengaged"]
- Frequency: - - - - - [format_frequency(frequency)] - + - +
- Broadcasting: [subspace_transmission ? "Disable" : "Enable"]
- Loudspeaker: [shut_up ? "Enable" : "Disable"]
- "} + . = ..() - if(subspace_transmission)//Don't even bother if subspace isn't turned on - dat+=list_channels(user) - dat+={"[text_wires()]
"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return +/obj/item/device/radio/borg/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] + + data["mic_status"] = broadcasting + data["speaker"] = listening + data["freq"] = format_frequency(frequency) + data["rawfreq"] = num2text(frequency) + + var/list/chanlist = list_channels(user) + if(islist(chanlist) && chanlist.len) + data["chan_list"] = chanlist + data["chan_list_len"] = chanlist.len + + if(syndie) + data["useSyndMode"] = 1 + + data["has_loudspeaker"] = 1 + data["loudspeaker"] = !shut_up + data["has_subspace"] = 1 + data["subspace"] = subspace_transmission + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 550, 500) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) /obj/item/device/radio/proc/config(op) if(radio_controller) diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index ae999cbcf03..7cc91a13009 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -43,6 +43,8 @@ var/obj/machinery/Machine = src_object if(Machine.emagged) return STATUS_INTERACTIVE + if(istype(src_object, /obj/item/device/radio/borg/syndicate)) //Not ideal, but they can't access their own radio otherwise. + return STATUS_INTERACTIVE return STATUS_UPDATE /mob/living/silicon/ai/default_can_use_topic(var/src_object) diff --git a/nano/templates/radio_basic.tmpl b/nano/templates/radio_basic.tmpl new file mode 100644 index 00000000000..9aaad8cb489 --- /dev/null +++ b/nano/templates/radio_basic.tmpl @@ -0,0 +1,89 @@ + +{{if data.useSyndMode}} + {{:helper.syndicateMode()}} +{{/if}} + +
+
+ Microphone +
+
+ {{if data.mic_cut}} + {{:helper.link('On', null, null, 'disabled')}} + {{:helper.link('Off', null, null, 'disabled')}} + {{else}} + {{:helper.link('On', null, {'talk' : 0}, data.mic_status ? 'selected' : null)}} + {{:helper.link('Off', null, {'talk' : 1}, data.mic_status ? null : 'selected')}} + {{/if}} +
+
+ +
+
+ Speaker +
+
+ {{if data.spk_cut}} + {{:helper.link('On', null, null, 'disabled')}} + {{:helper.link('Off', null, null, 'disabled')}} + {{else}} + {{:helper.link('On', null, {'listen' : 0}, data.speaker ? 'selected' : null)}} + {{:helper.link('Off', null, {'listen' : 1}, data.speaker ? null : 'selected')}} + {{/if}} +
+
+ +{{if data.has_subspace}} +
+ Subspace Transmission: +
+
+ {{:helper.link('On', null, {'mode' : 1}, data.subspace ? 'selected' : null)}} + {{:helper.link('Off', null, {'mode' : 0}, data.subspace ? null : 'selected')}} +
+{{/if}} + +{{if data.has_loudspeaker}} +
+ Loudspeaker: +
+
+ {{:helper.link('On', null, {'shutup' : 0}, data.loudspeaker ? 'selected' : null)}} + {{:helper.link('Off', null, {'shutup' : 1}, data.loudspeaker ? null : 'selected')}} +
+{{/if}} + +
+
+ Frequency: {{:data.freq}} +
+
+ {{:helper.link('--', null, {'freq' : -10})}} + {{:helper.link('-', null, {'freq' : -2})}} + {{:helper.link('+', null, {'freq' : 2})}} + {{:helper.link('++', null, {'freq' : 10})}} +
+
+ +{{if data.chan_list_len >= 1}} +

Channels

+
+ {{for data.chan_list}} +
+ {{:value.display_name}} +
+
+ {{if value.secure_channel}} + Speaker:  + {{:helper.link('On', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? null : 'selected')}} + {{:helper.link('Off', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? 'selected' : null)}} + {{else}} + {{:helper.link('Switch', null, {'spec_freq' : value.chan}, data.rawfreq == value.chan ? 'selected' : null)}} + {{/if}} +
+ {{/for}} +
+{{/if}} \ No newline at end of file diff --git a/nano/templates/radio_electro.tmpl b/nano/templates/radio_electro.tmpl new file mode 100644 index 00000000000..9fb8183ad01 --- /dev/null +++ b/nano/templates/radio_electro.tmpl @@ -0,0 +1,37 @@ + +
+
+ Power +
+
+ {{:helper.link('On', null, {'power' : 1}, data.power ? 'selected' : null)}} + {{:helper.link('Off', null, {'power' : 1}, data.power ? null : 'selected')}} +
+
+ +
+
+ Frequency: {{:data.freq}} +
+
+ {{:helper.link('--', null, {'freq' : -10})}} + {{:helper.link('-', null, {'freq' : -2})}} + {{:helper.link('+', null, {'freq' : 2})}} + {{:helper.link('++', null, {'freq' : 10})}} +
+
+ +
+
+ Code: {{:data.code}} +
+
+ {{:helper.link('--', null, {'code' : -5})}} + {{:helper.link('-', null, {'code' : -1})}} + {{:helper.link('+', null, {'code' : 1})}} + {{:helper.link('++', null, {'code' : 5})}} +
+
\ No newline at end of file From ec747b9f04bf1d90542746fdba4d5f929035dfb5 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 5 Oct 2015 09:31:11 -0700 Subject: [PATCH 2/2] Size tweaks, less snowflakey syndieborg radio --- code/game/objects/items/devices/radio/electropack.dm | 2 +- code/game/objects/items/devices/radio/radio.dm | 9 +++++++-- code/modules/nano/interaction/default.dm | 2 -- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index b6ea20e9954..aea107885f7 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -107,7 +107,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) - ui = new(user, src, ui_key, "radio_electro.tmpl", "[name]", 550, 500) + ui = new(user, src, ui_key, "radio_electro.tmpl", "[name]", 400, 500) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 8b340f518a2..1ef94fde8d2 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -128,7 +128,7 @@ var/global/list/default_medbay_channels = list( ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) - ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 550, 500) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 550) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) @@ -583,6 +583,11 @@ var/global/list/default_medbay_channels = list( syndie = 1 keyslot = new /obj/item/device/encryptionkey/syndicate +/obj/item/device/radio/borg/syndicate/CanUseTopic(mob/user, datum/topic_state/state) + . = ..() + if(. == STATUS_UPDATE && istype(user, /mob/living/silicon/robot/syndicate)) + . = STATUS_INTERACTIVE + /obj/item/device/radio/borg/Destroy() myborg = null return ..() @@ -740,7 +745,7 @@ var/global/list/default_medbay_channels = list( ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) - ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 550, 500) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 430, 500) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index 7cc91a13009..ae999cbcf03 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -43,8 +43,6 @@ var/obj/machinery/Machine = src_object if(Machine.emagged) return STATUS_INTERACTIVE - if(istype(src_object, /obj/item/device/radio/borg/syndicate)) //Not ideal, but they can't access their own radio otherwise. - return STATUS_INTERACTIVE return STATUS_UPDATE /mob/living/silicon/ai/default_can_use_topic(var/src_object)