mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-15 12:43:13 +00:00
HUD positions are now relative the client view screen edges instead of absolute. We don't currently use custom client view ranges, but this potentially makes it more reasonable to implement (an example is a new short sighted species of ours). Port of https://github.com/d3athrow/vgstation13/pull/5984.
258 lines
7.3 KiB
Plaintext
258 lines
7.3 KiB
Plaintext
var/obj/screen/robot_inventory
|
|
|
|
|
|
/datum/hud/proc/robot_hud()
|
|
|
|
src.adding = list()
|
|
src.other = list()
|
|
|
|
var/obj/screen/using
|
|
|
|
//Radio
|
|
using = new /obj/screen()
|
|
using.name = "radio"
|
|
using.set_dir(SOUTHWEST)
|
|
using.icon = 'icons/mob/screen1_robot.dmi'
|
|
using.icon_state = "radio"
|
|
using.screen_loc = ui_movi
|
|
using.layer = 20
|
|
src.adding += using
|
|
|
|
//Module select
|
|
|
|
using = new /obj/screen()
|
|
using.name = "module1"
|
|
using.set_dir(SOUTHWEST)
|
|
using.icon = 'icons/mob/screen1_robot.dmi'
|
|
using.icon_state = "inv1"
|
|
using.screen_loc = ui_inv1
|
|
using.layer = 20
|
|
src.adding += using
|
|
mymob:inv1 = using
|
|
|
|
using = new /obj/screen()
|
|
using.name = "module2"
|
|
using.set_dir(SOUTHWEST)
|
|
using.icon = 'icons/mob/screen1_robot.dmi'
|
|
using.icon_state = "inv2"
|
|
using.screen_loc = ui_inv2
|
|
using.layer = 20
|
|
src.adding += using
|
|
mymob:inv2 = using
|
|
|
|
using = new /obj/screen()
|
|
using.name = "module3"
|
|
using.set_dir(SOUTHWEST)
|
|
using.icon = 'icons/mob/screen1_robot.dmi'
|
|
using.icon_state = "inv3"
|
|
using.screen_loc = ui_inv3
|
|
using.layer = 20
|
|
src.adding += using
|
|
mymob:inv3 = using
|
|
|
|
//End of module select
|
|
|
|
//Intent
|
|
using = new /obj/screen()
|
|
using.name = "act_intent"
|
|
using.set_dir(SOUTHWEST)
|
|
using.icon = 'icons/mob/screen1_robot.dmi'
|
|
using.icon_state = mymob.a_intent
|
|
using.screen_loc = ui_acti
|
|
using.layer = 20
|
|
src.adding += using
|
|
action_intent = using
|
|
|
|
//Cell
|
|
mymob:cells = new /obj/screen()
|
|
mymob:cells.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob:cells.icon_state = "charge-empty"
|
|
mymob:cells.name = "cell"
|
|
mymob:cells.screen_loc = ui_toxin
|
|
|
|
//Health
|
|
mymob.healths = new /obj/screen()
|
|
mymob.healths.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.healths.icon_state = "health0"
|
|
mymob.healths.name = "health"
|
|
mymob.healths.screen_loc = ui_borg_health
|
|
|
|
//Installed Module
|
|
mymob.hands = new /obj/screen()
|
|
mymob.hands.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.hands.icon_state = "nomod"
|
|
mymob.hands.name = "module"
|
|
mymob.hands.screen_loc = ui_borg_module
|
|
|
|
//Module Panel
|
|
using = new /obj/screen()
|
|
using.name = "panel"
|
|
using.icon = 'icons/mob/screen1_robot.dmi'
|
|
using.icon_state = "panel"
|
|
using.screen_loc = ui_borg_panel
|
|
using.layer = 19
|
|
src.adding += using
|
|
|
|
//Store
|
|
mymob.throw_icon = new /obj/screen()
|
|
mymob.throw_icon.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.throw_icon.icon_state = "store"
|
|
mymob.throw_icon.name = "store"
|
|
mymob.throw_icon.screen_loc = ui_borg_store
|
|
|
|
//Inventory
|
|
robot_inventory = new /obj/screen()
|
|
robot_inventory.name = "inventory"
|
|
robot_inventory.icon = 'icons/mob/screen1_robot.dmi'
|
|
robot_inventory.icon_state = "inventory"
|
|
robot_inventory.screen_loc = ui_borg_inventory
|
|
|
|
//Temp
|
|
mymob.bodytemp = new /obj/screen()
|
|
mymob.bodytemp.icon_state = "temp0"
|
|
mymob.bodytemp.name = "body temperature"
|
|
mymob.bodytemp.screen_loc = ui_temp
|
|
|
|
|
|
mymob.oxygen = new /obj/screen()
|
|
mymob.oxygen.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.oxygen.icon_state = "oxy0"
|
|
mymob.oxygen.name = "oxygen"
|
|
mymob.oxygen.screen_loc = ui_oxygen
|
|
|
|
mymob.fire = new /obj/screen()
|
|
mymob.fire.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.fire.icon_state = "fire0"
|
|
mymob.fire.name = "fire"
|
|
mymob.fire.screen_loc = ui_fire
|
|
|
|
mymob.pullin = new /obj/screen()
|
|
mymob.pullin.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.pullin.icon_state = "pull0"
|
|
mymob.pullin.name = "pull"
|
|
mymob.pullin.screen_loc = ui_borg_pull
|
|
|
|
mymob.blind = new /obj/screen()
|
|
mymob.blind.icon = 'icons/mob/screen1_full.dmi'
|
|
mymob.blind.icon_state = "blackimageoverlay"
|
|
mymob.blind.name = " "
|
|
mymob.blind.screen_loc = "1,1"
|
|
mymob.blind.layer = 0
|
|
|
|
mymob.flash = new /obj/screen()
|
|
mymob.flash.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.flash.icon_state = "blank"
|
|
mymob.flash.name = "flash"
|
|
mymob.flash.screen_loc = ui_entire_screen
|
|
mymob.flash.layer = 17
|
|
|
|
mymob.zone_sel = new /obj/screen/zone_sel()
|
|
mymob.zone_sel.icon = 'icons/mob/screen1_robot.dmi'
|
|
mymob.zone_sel.overlays.Cut()
|
|
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")
|
|
|
|
//Handle the gun settings buttons
|
|
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
|
|
if (mymob.client)
|
|
if (mymob.client.gun_mode) // If in aim mode, correct the sprite
|
|
mymob.gun_setting_icon.set_dir(2)
|
|
for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons
|
|
if (G.aim_targets)
|
|
mymob.item_use_icon = new /obj/screen/gun/item(null)
|
|
if (mymob.client.target_can_click)
|
|
mymob.item_use_icon.set_dir(1)
|
|
src.adding += mymob.item_use_icon
|
|
mymob.radio_use_icon = new /obj/screen/gun/radio(null)
|
|
if (mymob.client.target_can_radio)
|
|
mymob.radio_use_icon.set_dir(1)
|
|
src.adding += mymob.radio_use_icon
|
|
mymob.gun_move_icon = new /obj/screen/gun/move(null)
|
|
if (mymob.client.target_can_move)
|
|
mymob.gun_move_icon.set_dir(1)
|
|
mymob.gun_run_icon = new /obj/screen/gun/run(null)
|
|
if (mymob.client.target_can_run)
|
|
mymob.gun_run_icon.set_dir(1)
|
|
src.adding += mymob.gun_run_icon
|
|
src.adding += mymob.gun_move_icon
|
|
|
|
mymob.client.screen = null
|
|
|
|
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.blind, mymob.flash, mymob.gun_setting_icon, robot_inventory) //, mymob.rest, mymob.sleep, mymob.mach )
|
|
mymob.client.screen += src.adding + src.other
|
|
|
|
return
|
|
|
|
|
|
/datum/hud/proc/toggle_show_robot_modules()
|
|
if(!isrobot(mymob))
|
|
return
|
|
|
|
var/mob/living/silicon/robot/r = mymob
|
|
|
|
r.shown_robot_modules = !r.shown_robot_modules
|
|
update_robot_modules_display()
|
|
|
|
|
|
/datum/hud/proc/update_robot_modules_display()
|
|
if(!isrobot(mymob))
|
|
return
|
|
|
|
var/mob/living/silicon/robot/r = mymob
|
|
|
|
if(r.shown_robot_modules)
|
|
//Modules display is shown
|
|
//r.client.screen += robot_inventory //"store" icon
|
|
|
|
if(!r.module)
|
|
usr << "<span class='danger'>No module selected</span>"
|
|
return
|
|
|
|
if(!r.module.modules)
|
|
usr << "<span class='danger'>Selected module has no modules to select</span>"
|
|
return
|
|
|
|
if(!r.robot_modules_background)
|
|
return
|
|
|
|
var/display_rows = -round(-(r.module.modules.len) / 8)
|
|
r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7"
|
|
r.client.screen += r.robot_modules_background
|
|
|
|
var/x = -4 //Start at CENTER-4,SOUTH+1
|
|
var/y = 1
|
|
|
|
//Unfortunately adding the emag module to the list of modules has to be here. This is because a borg can
|
|
//be emagged before they actually select a module. - or some situation can cause them to get a new module
|
|
// - or some situation might cause them to get de-emagged or something.
|
|
if(r.emagged)
|
|
if(!(r.module.emag in r.module.modules))
|
|
r.module.modules.Add(r.module.emag)
|
|
else
|
|
if(r.module.emag in r.module.modules)
|
|
r.module.modules.Remove(r.module.emag)
|
|
|
|
for(var/atom/movable/A in r.module.modules)
|
|
if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
|
|
//Module is not currently active
|
|
r.client.screen += A
|
|
if(x < 0)
|
|
A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7"
|
|
else
|
|
A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7"
|
|
A.layer = 20
|
|
|
|
x++
|
|
if(x == 4)
|
|
x = -4
|
|
y++
|
|
|
|
else
|
|
//Modules display is hidden
|
|
//r.client.screen -= robot_inventory //"store" icon
|
|
for(var/atom/A in r.module.modules)
|
|
if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
|
|
//Module is not currently active
|
|
r.client.screen -= A
|
|
r.shown_robot_modules = 0
|
|
r.client.screen -= r.robot_modules_background
|