mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-22 04:37:45 +01:00
Bodycams :) (#7573)
This commit is contained in:
@@ -7,6 +7,8 @@ var/global/list/radio_channels_by_freq = list(
|
||||
num2text(ENG_FREQ) = "Engineering",
|
||||
num2text(MED_FREQ) = "Medical",
|
||||
num2text(MED_I_FREQ)="Medical(I)",
|
||||
num2text(BDCM_FREQ) ="Bodycam", // CHOMPEdit
|
||||
|
||||
num2text(SEC_FREQ) = "Security",
|
||||
num2text(SEC_I_FREQ)="Security(I)",
|
||||
num2text(SCI_FREQ) = "Science",
|
||||
|
||||
@@ -9,6 +9,8 @@ var/global/list/default_internal_channels = list(
|
||||
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
||||
num2text(MED_FREQ) = list(access_medical_equip),
|
||||
num2text(MED_I_FREQ)=list(access_medical_equip),
|
||||
num2text(BDCM_FREQ) =list(access_security), // CHOMPEdit
|
||||
|
||||
num2text(SEC_FREQ) = list(access_security),
|
||||
num2text(SEC_I_FREQ)=list(access_security),
|
||||
num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology),
|
||||
|
||||
@@ -118,6 +118,9 @@
|
||||
|
||||
/obj/item/device/tvcamera/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
// CHOMPEdit
|
||||
if(!camera)
|
||||
return
|
||||
if(camera.status && !isturf(target))
|
||||
show_tvs(target)
|
||||
user.visible_message("<b>[user]</b> aims [src] at [target].", "You aim [src] at [target].")
|
||||
@@ -149,6 +152,169 @@
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_belt()
|
||||
|
||||
// CHOMPEdit Start - Bodycam
|
||||
// Security Bodycam
|
||||
|
||||
/obj/item/clothing/accessory/bodycam
|
||||
name = "Body Camera"
|
||||
desc = "A small body camera for security personnel. It can be attached to your uniform! Use in hand to configure."
|
||||
icon_state = "eshield"
|
||||
item_state = "eshield"
|
||||
w_class = ITEMSIZE_COST_TINY
|
||||
slot_flags = ACCESSORY_SLOT_DECOR
|
||||
appearance_flags = RESET_COLOR
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
var/channel = "Default Bodycamera Feed"
|
||||
var/obj/machinery/camera/network/bodycamera/bcamera
|
||||
var/obj/item/device/radio/bradio
|
||||
var/datum/weakref/showing
|
||||
var/showing_name
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/New()
|
||||
..()
|
||||
listening_objects += src
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/Destroy()
|
||||
listening_objects -= src
|
||||
qdel(bcamera)
|
||||
qdel(bradio)
|
||||
bcamera = null
|
||||
bradio = null
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/examine()
|
||||
. = ..()
|
||||
. += "Video feed is [bcamera.status ? "on" : "off"]"
|
||||
. += "Audio feed is [bradio.broadcasting ? "on" : "off"]"
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/Initialize()
|
||||
. = ..()
|
||||
bcamera = new(src)
|
||||
bcamera.c_tag = channel
|
||||
bcamera.status = FALSE
|
||||
bradio = new(src)
|
||||
bradio.listening = FALSE
|
||||
bradio.set_frequency(BDCM_FREQ)
|
||||
bradio.icon = src.icon
|
||||
bradio.icon_state = src.icon_state
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/hear_talk(mob/M, list/message_pieces, verb)
|
||||
bradio.hear_talk(M, message_pieces, verb)
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/attack_self(mob/user)
|
||||
add_fingerprint(user)
|
||||
//user.set_machine(src)
|
||||
show_bodycam_ui(user)
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/proc/show_bodycam_ui(mob/user)
|
||||
var/dat = list()
|
||||
dat += "Channel name is: <a href='?src=\ref[src];channel=1'>[channel ? channel : "unidentified broadcast"]</a><br>"
|
||||
dat += "Video streaming is <a href='?src=\ref[src];video=1'>[bcamera.status ? "on" : "off"]</a><br>"
|
||||
if(bcamera.status && showing_name)
|
||||
dat += "- You're showing [showing_name] to your viewers.<br>"
|
||||
dat += "Mic is <a href='?src=\ref[src];sound=1'>[bradio.broadcasting ? "on" : "off"]</a><br>"
|
||||
dat += "Sound is being broadcasted on frequency [format_frequency(bradio.frequency)] ([get_frequency_name(bradio.frequency)])<br>"
|
||||
var/datum/browser/popup = new(user, "Hovercamera", "Eye Buddy", 300, 390, src)
|
||||
popup.set_content(jointext(dat,null))
|
||||
popup.open()
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/Topic(bred, href_list, state = GLOB.tgui_physical_state)
|
||||
|
||||
if(..())
|
||||
return 1
|
||||
if(href_list["channel"])
|
||||
var/nc = tgui_input_text(usr, "Channel name", "Select new channel name", channel, MAX_NAME_LEN)
|
||||
nc = sanitize(nc,MAX_NAME_LEN)
|
||||
if(nc)
|
||||
channel = nc
|
||||
bcamera.c_tag = channel
|
||||
to_chat(usr, "<span class='notice'>New channel name - '[channel]' is set</span>")
|
||||
if(href_list["video"])
|
||||
bcamera.set_status(!bcamera.status)
|
||||
var/turf/here = get_turf(usr)
|
||||
if(bcamera.status)
|
||||
to_chat(usr,"<span class='notice'>Video streaming activated. Broadcasting on channel '[channel]'</span>")
|
||||
if(here)
|
||||
here.visible_message("<span class='notice'>[usr] turns on their body camera.</span>")
|
||||
show_bodycamera_tvs(loc)
|
||||
else
|
||||
to_chat(usr,"<span class='notice'>Video streaming deactivated.</span>")
|
||||
if(here)
|
||||
here.visible_message("<span class='warning'>[usr] turns off their body camera!</span>")
|
||||
hide_bodycamera_tvs()
|
||||
for(var/obj/machinery/computer/security/telescreen/bodycamera/ES as anything in GLOB.bodycamera_screens)
|
||||
ES.stop_showing()
|
||||
update_icon()
|
||||
if(href_list["sound"])
|
||||
bradio.ToggleBroadcast()
|
||||
if(bradio.broadcasting)
|
||||
to_chat(usr,"<span class='notice'>Audio streaming activated. Broadcasting on frequency [format_frequency(bradio.frequency)].</span>")
|
||||
else
|
||||
to_chat(usr,"<span class='notice'>Audio streaming deactivated.</span>")
|
||||
if(!href_list["close"])
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/proc/show_bodycamera_tvs(atom/thing)
|
||||
if(showing)
|
||||
hide_bodycamera_tvs(showing)
|
||||
|
||||
showing = WEAKREF(thing)
|
||||
showing_name = "[thing]"
|
||||
for(var/obj/machinery/computer/security/telescreen/bodycamera/ES as anything in GLOB.bodycamera_screens)
|
||||
ES.show_thing(thing, src)
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/proc/hide_bodycamera_tvs()
|
||||
if(!showing)
|
||||
return
|
||||
for(var/obj/machinery/computer/security/telescreen/bodycamera/ES as anything in GLOB.bodycamera_screens)
|
||||
ES.maybe_stop_showing(showing)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
showing = null
|
||||
showing_name = null
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/Moved(atom/old_loc, direction, forced = FALSE, movetime)
|
||||
. = ..()
|
||||
if(bcamera.status && loc != old_loc)
|
||||
show_bodycamera_tvs(loc)
|
||||
|
||||
/* // Kinda unneeded, since this one is worn on the suit.
|
||||
/obj/item/clothing/accessory/bodycam/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(bcamera.status && !isturf(target))
|
||||
show_bodycamera_tvs(target)
|
||||
user.visible_message("<b>[user]</b> aims [src] at [target].", "You aim [src] at [target].")
|
||||
if(user.machine == src)
|
||||
show_bodycam_ui(user) // refresh the UI
|
||||
*/
|
||||
/obj/item/clothing/accessory/bodycam/process()
|
||||
if(!showing)
|
||||
return PROCESS_KILL
|
||||
|
||||
var/atom/A = showing.resolve()
|
||||
if(!A || QDELETED(A))
|
||||
show_bodycamera_tvs(loc)
|
||||
|
||||
if(get_dist(get_turf(src), get_turf(A)) > 5)
|
||||
show_bodycamera_tvs(loc)
|
||||
|
||||
/obj/item/clothing/accessory/bodycam/update_icon()
|
||||
..()
|
||||
if(bcamera.status)
|
||||
icon_state = "eshield"
|
||||
item_state = "eshield"
|
||||
else
|
||||
icon_state = "eshield"
|
||||
item_state = "eshield"
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H))
|
||||
H.update_inv_r_hand()
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_belt()
|
||||
// CHOMPEdit End
|
||||
|
||||
//Assembly by roboticist
|
||||
|
||||
|
||||
@@ -42,6 +42,18 @@
|
||||
..()
|
||||
network = NETWORK_THUNDER
|
||||
|
||||
// CHOMPEdit Begin - Bodycam
|
||||
/obj/item/weapon/circuitboard/security/telescreen/bodycamera
|
||||
name = T_BOARD("security bodycamera monitor")
|
||||
build_path = /obj/machinery/computer/security/telescreen/bodycamera
|
||||
board_type = new /datum/frame/frame_types/display
|
||||
matter = list(MAT_STEEL = 50, MAT_GLASS = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/security/telescreen/bodycamera/New()
|
||||
..()
|
||||
network = NETWORK_BODYCAM
|
||||
// CHOMPEdit End
|
||||
|
||||
/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
|
||||
if (..(C))
|
||||
C.set_network(network.Copy())
|
||||
|
||||
@@ -114,7 +114,9 @@
|
||||
/obj/item/clothing/shoes/boots/winter/security,
|
||||
/obj/item/device/flashlight/maglight,
|
||||
/obj/item/clothing/mask/gas/half,
|
||||
/obj/item/clothing/mask/gas/sechailer/swat/hos)
|
||||
/obj/item/clothing/mask/gas/sechailer/swat/hos, // CHOMPEdit
|
||||
/obj/item/clothing/accessory/bodycam) // CHOMPEdit
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/hos/Initialize()
|
||||
if(prob(50))
|
||||
@@ -172,7 +174,9 @@
|
||||
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
||||
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
||||
/obj/item/device/ticket_printer, //CHOMPStation addition
|
||||
/obj/item/device/retail_scanner/security //CHOMPStation addition
|
||||
/obj/item/device/retail_scanner/security, //CHOMPStation addition
|
||||
/obj/item/clothing/accessory/bodycam // CHOMPEdit
|
||||
|
||||
)
|
||||
|
||||
/obj/structure/closet/secure_closet/warden/Initialize()
|
||||
@@ -217,7 +221,9 @@
|
||||
/obj/item/device/holowarrant, //CHOMPStation addition
|
||||
/obj/item/device/retail_scanner/security, //CHOMPStation addition
|
||||
/obj/item/clothing/glasses/hud/security, //CHOMPStation addition
|
||||
/obj/item/device/ticket_printer //CHOMPStation addition
|
||||
/obj/item/device/ticket_printer, //CHOMPStation addition
|
||||
/obj/item/clothing/accessory/bodycam // CHOMPEdit
|
||||
|
||||
)
|
||||
|
||||
/obj/structure/closet/secure_closet/security/Initialize()
|
||||
|
||||
Reference in New Issue
Block a user