Files
Aurora.3/code/_onclick/hud/robot.dm
Matt Atlas 556f1aa86f Fullscreen overlay rework, full-black unconsciousness overlay, overlay fadeout animations + more. (#10053)
Ported the clickcatcher from tg/bay. You can now click black spots to turn. Isn't that handy, especially with vision cones.

    Reworked fullscreen overlays into an easier and better system, courtesy of PsiOmegaDelta.

    Similiarly, added fadeout animations to all pain overlays, plus unconsciousness.

    Fixed the vampire frenzy overlay never showing.

    Unconsciousness is now FULL darkness.

    Flashing mobs is now an inbuilt proc.
2020-10-02 08:53:14 +03:00

235 lines
6.0 KiB
Plaintext

var/obj/screen/robot_inventory
/mob/living/silicon/robot/instantiate_hud(var/datum/hud/HUD)
HUD.robot_hud()
/datum/hud/proc/robot_hud()
src.adding = list()
src.other = list()
var/obj/screen/using
if(!isrobot(mymob))
return
var/mob/living/silicon/robot/r = mymob
//Fov
if(r.can_have_vision_cone)
r.vision_cone_overlay = new /obj/screen/fov()
src.adding += r.vision_cone_overlay
//Radio
using = new /obj/screen()
using.name = "radio"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen/robot.dmi'
using.icon_state = "radio"
using.screen_loc = ui_movi
using.layer = SCREEN_LAYER
src.adding += using
//Module select
using = new /obj/screen/module/one()
src.adding += using
r.inv1 = using
using = new /obj/screen/module/two()
src.adding += using
r.inv2 = using
using = new /obj/screen/module/three()
src.adding += using
r.inv3 = using
//End of module select
//Intent
using = new /obj/screen()
using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen/robot.dmi'
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
using.layer = SCREEN_LAYER
src.adding += using
action_intent = using
// Up Hint
mymob.up_hint = new /obj/screen()
mymob.up_hint.icon = 'icons/mob/screen/robot.dmi'
mymob.up_hint.icon_state = "uphint0"
mymob.up_hint.name = "up hint"
mymob.up_hint.screen_loc = ui_up_hint
//Cell
r.cells = new /obj/screen()
r.cells.icon = 'icons/mob/screen/robot.dmi'
r.cells.icon_state = "charge-empty"
r.cells.name = "cell"
r.cells.screen_loc = ui_toxin
//Health
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen/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/screen/robot.dmi'
mymob.hands.icon_state = "nomod"
mymob.hands.name = "module"
mymob.hands.screen_loc = ui_borg_module
if(r.module)
mymob.hands.icon_state = lowertext(r.mod_type)
//Module Panel
using = new /obj/screen()
using.name = "panel"
using.icon = 'icons/mob/screen/robot.dmi'
using.icon_state = "panel"
using.screen_loc = ui_borg_panel
using.layer = SCREEN_LAYER
src.adding += using
//Store
mymob.throw_icon = new /obj/screen()
mymob.throw_icon.icon = 'icons/mob/screen/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/screen/robot.dmi'
robot_inventory.icon_state = "inventory"
robot_inventory.screen_loc = ui_borg_inventory
//Temp
mymob.pullin = new /obj/screen()
mymob.pullin.icon = 'icons/mob/screen/robot.dmi'
mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_borg_pull
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen/robot.dmi'
mymob.zone_sel.cut_overlays()
mymob.zone_sel.add_overlay(image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]"))
// Computer device hud
r.computer.screen_loc = ui_oxygen
r.computer.layer = SCREEN_LAYER
//Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
mymob.item_use_icon = new /obj/screen/gun/item(null)
mymob.gun_move_icon = new /obj/screen/gun/move(null)
mymob.radio_use_icon = new /obj/screen/gun/radio(null)
mymob.client.screen = null
mymob.client.screen += list(
mymob.throw_icon,
mymob.zone_sel,
mymob.hands,
mymob.healths,
r.cells,
mymob.up_hint,
mymob.pullin,
robot_inventory,
mymob.gun_setting_icon,
r.computer)
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)
to_chat(usr, "<span class='danger'>No module selected</span>")
return
if(!r.module.modules)
to_chat(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 += r.module.emag
else
if(r.module.emag in r.module.modules)
r.module.modules -= r.module.emag
if(r.malf_AI_module)
if(!((r.module.malf_AI_module in r.module.modules) && r.module.malf_AI_module == null))
r.module.modules += r.module.malf_AI_module
else
if(r.module.malf_AI_module in r.module.modules)
r.module.modules -= r.module.malf_AI_module
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 = SCREEN_LAYER
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