[mind UI] Soulblades HUD. Goodbye gui_icons (#30132)

* Soulblade UI

* removed deprecated dmi

* fixes

* woops, almost made soulblades good there

* :csgrad:
This commit is contained in:
DeityLink
2021-08-06 00:47:08 +02:00
committed by GitHub
parent 2e687f0bf8
commit e229e06060
21 changed files with 113 additions and 189 deletions

View File

@@ -150,58 +150,6 @@
#define ui_ai_view_images "SOUTH:[6*PIXEL_MULTIPLIER],WEST+12:[16*PIXEL_MULTIPLIER]"
#define ui_ai_config_radio "SOUTH:[6*PIXEL_MULTIPLIER],WEST+13:[16*PIXEL_MULTIPLIER]"
//Adminbus HUD
#define ui_adminbus_bg "1,1"
#define ui_adminbus_delete "11:[31*PIXEL_MULTIPLIER],1:[6*PIXEL_MULTIPLIER]"
#define ui_adminbus_delmobs "1:[6*PIXEL_MULTIPLIER],5:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_spclowns "1:[8*PIXEL_MULTIPLIER],6:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_spcarps "1:[8*PIXEL_MULTIPLIER],7:[10*PIXEL_MULTIPLIER]"
#define ui_adminbus_spbears "1:[8*PIXEL_MULTIPLIER],8:[6*PIXEL_MULTIPLIER]"
#define ui_adminbus_sptrees "1:[8*PIXEL_MULTIPLIER],9:[2*PIXEL_MULTIPLIER]"
#define ui_adminbus_spspiders "1:[8*PIXEL_MULTIPLIER],9:[30*PIXEL_MULTIPLIER]"
#define ui_adminbus_spalien "1:[5*PIXEL_MULTIPLIER],10:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_loadsids "5,2:[9*PIXEL_MULTIPLIER]"
#define ui_adminbus_loadsmone "5,3:[5*PIXEL_MULTIPLIER]"
#define ui_adminbus_massrepair "6:[3*PIXEL_MULTIPLIER],2:[9*PIXEL_MULTIPLIER]"
#define ui_adminbus_massrejuv "6:[3*PIXEL_MULTIPLIER],3:[5*PIXEL_MULTIPLIER]"
#define ui_adminbus_hook "10,3:[7*PIXEL_MULTIPLIER]"
#define ui_adminbus_juke "11:[11*PIXEL_MULTIPLIER],3:[7*PIXEL_MULTIPLIER]"
#define ui_adminbus_tele "12:[22*PIXEL_MULTIPLIER],3:[7*PIXEL_MULTIPLIER]"
#define ui_adminbus_bumpers_1 "9:[21*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_bumpers_2 "10:[5*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_bumpers_3 "10:[21*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_door_0 "11:[11*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_door_1 "11:273*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_roadlights_0 "12:[17*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_roadlights_1 "13:[1*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_roadlights_2 "13:[17*PIXEL_MULTIPLIER],2:[14*PIXEL_MULTIPLIER]"
#define ui_adminbus_free "13:[9*PIXEL_MULTIPLIER],14:[20*PIXEL_MULTIPLIER]"
#define ui_adminbus_home "14:[6*PIXEL_MULTIPLIER],14:[20*PIXEL_MULTIPLIER]"
#define ui_adminbus_antag "15:[3*PIXEL_MULTIPLIER],14:[20*PIXEL_MULTIPLIER]"
#define ui_adminbus_dellasers "6:[13*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_givelasers "6:[29*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_delbombs "9:[18*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_givebombs "10:[2*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_tdred "1:[18*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_tdarena "2:[4*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_tdgreen "3:[6*PIXEL_MULTIPLIER],13:[26*PIXEL_MULTIPLIER]"
#define ui_adminbus_tdobs "2:[4*PIXEL_MULTIPLIER],14:[28*PIXEL_MULTIPLIER]"
//Blob HUD
#define ui_blob_bgLEFT "WEST,CENTER-7"
#define ui_blob_bgRIGHT "EAST-14,CENTER-7"
#define ui_blob_powerbar "WEST,CENTER-3"
#define ui_blob_healthbar "EAST:[14*PIXEL_MULTIPLIER],CENTER-3"
#define ui_blob_spawnblob "WEST:[18*PIXEL_MULTIPLIER],CENTER-3:[5*PIXEL_MULTIPLIER]"
#define ui_blob_spawnstrong "WEST:[18*PIXEL_MULTIPLIER],CENTER-2:[9*PIXEL_MULTIPLIER]"
#define ui_blob_spawnresource "WEST:[18*PIXEL_MULTIPLIER],CENTER-1:[13*PIXEL_MULTIPLIER]"
#define ui_blob_spawnfactory "WEST:[18*PIXEL_MULTIPLIER],CENTER:[17*PIXEL_MULTIPLIER]"
#define ui_blob_spawnnode "WEST:[18*PIXEL_MULTIPLIER],CENTER+1:[21*PIXEL_MULTIPLIER]"
#define ui_blob_spawncore "WEST:[18*PIXEL_MULTIPLIER],CENTER+2:[25*PIXEL_MULTIPLIER]"
#define ui_blob_ping "EAST-1:[24*PIXEL_MULTIPLIER],CENTER+3:[21*PIXEL_MULTIPLIER]"
#define ui_blob_rally "EAST-1:[24*PIXEL_MULTIPLIER],CENTER+4:[25*PIXEL_MULTIPLIER]"
#define ui_blob_taunt "EAST-1:[24*PIXEL_MULTIPLIER],CENTER+5:[29*PIXEL_MULTIPLIER]"
//Cult HUD
#define ui_cult_Act "WEST+0:[6*PIXEL_MULTIPLIER],SOUTH+5:[15*PIXEL_MULTIPLIER]"
#define ui_cult_tattoos "WEST+0:[6*PIXEL_MULTIPLIER], SOUTH+4:[13*PIXEL_MULTIPLIER]"

View File

@@ -197,8 +197,6 @@ var/global/obj/abstract/screen/clicker/catcher = new()
return FALSE
if(!mymob.client)
return FALSE
if(!mymob.gui_icons)
mymob.gui_icons = new /datum/ui_icons(src)
var/ui_style
var/ui_color

View File

@@ -77,28 +77,6 @@
////////SOUL BLADE HUD ELEMENTS////////
mymob.gui_icons.soulblade_bgLEFT = new /obj/abstract/screen
mymob.gui_icons.soulblade_bgLEFT.icon = 'icons/mob/screen1_shade_fullscreen.dmi'
mymob.gui_icons.soulblade_bgLEFT.icon_state = "backgroundLEFT"
mymob.gui_icons.soulblade_bgLEFT.name = "Blood"
mymob.gui_icons.soulblade_bgLEFT.layer = HUD_BASE_LAYER
mymob.gui_icons.soulblade_bgLEFT.screen_loc = ui_blob_bgLEFT
mymob.gui_icons.soulblade_coverLEFT = new /obj/abstract/screen
mymob.gui_icons.soulblade_coverLEFT.icon = 'icons/mob/screen1_shade_fullscreen.dmi'
mymob.gui_icons.soulblade_coverLEFT.icon_state = "coverLEFT"
mymob.gui_icons.soulblade_coverLEFT.name = "Blood"
mymob.gui_icons.soulblade_coverLEFT.layer = HUD_ABOVE_ITEM_LAYER
mymob.gui_icons.soulblade_coverLEFT.screen_loc = ui_blob_bgLEFT
mymob.gui_icons.soulblade_coverLEFT.maptext_x = 1
mymob.gui_icons.soulblade_coverLEFT.maptext_y = 126*PIXEL_MULTIPLIER
mymob.gui_icons.soulblade_bloodbar = new /obj/abstract/screen
mymob.gui_icons.soulblade_bloodbar.icon = 'icons/mob/screen1_shade_bars.dmi'
mymob.gui_icons.soulblade_bloodbar.icon_state = "blood"
mymob.gui_icons.soulblade_bloodbar.name = "Blood"
mymob.gui_icons.soulblade_bloodbar.screen_loc = ui_blob_powerbar
mymob.healths2 = new /obj/abstract/screen
mymob.healths2.icon = 'icons/mob/screen1_shade.dmi'
mymob.healths2.icon_state = "blade_ok"

View File

@@ -28,7 +28,6 @@ var/list/mind_ui_ID2type = list()
for (var/mind_ui in activeUIs)
var/datum/mind_ui/ui = activeUIs[mind_ui]
ui.SendToClient()
ReLoginUIFailsafe() // Makes sure we're not missing an UI whose requirements were given somehow before the mob had a mind
/datum/mind/proc/RemoveAllUIs() // Removes all mind uis from client.screen, called on mob/Logout()
for (var/mind_ui in activeUIs)
@@ -144,8 +143,7 @@ var/list/mind_ui_ID2type = list()
if (!M.client)
return
for (var/obj/abstract/mind_ui_element/element in elements)
mind.current.client.screen -= element
mind.current.client.screen -= elements
// Makes every element visible
/datum/mind_ui/proc/Display()
@@ -270,25 +268,3 @@ var/list/mind_ui_ID2type = list()
I.pixel_x = (i - 1) * 6
result.overlays += I
return result
////////////////////////////////////////////////////////////////////
// //
// RE-LOGIN FAILSAFE //
// //
////////////////////////////////////////////////////////////////////
// Checks that the mob isn't missing a given UI for some reason, called by ResendAllUIs() on mob/living/Login()
// I mean, really this should never happen under normal circumstances but if for example someone placed a Test Dummy inside an adminbus
// before they had a mind, their UI would fail to initialize, and this proc makes sure that whoever then takes control of it, won't be lacking the UI.
// This isn't necessary for all UI (such as those displayed after interacting with an object), but preferable for some (such as those tied to the player's roles, species, or vehicle)
/datum/mind/proc/ReLoginUIFailsafe()
var/mob/M = current
if (!current)
return
if(istype(M.locked_to, /obj/structure/bed/chair/vehicle/adminbus))
if (!("Adminbus" in activeUIs))
DisplayUI("Adminbus")
if(isovermind(M))
if (!("Blob" in activeUIs))
DisplayUI("Blob")

View File

@@ -0,0 +1,73 @@
////////////////////////////////////////////////////////////////////
// //
// SOULBLADE (BLOOD GAUGE) //
// //
////////////////////////////////////////////////////////////////////
/datum/mind_ui/soulblade
uniqueID = "Soulblade"
x = "LEFT"
element_types_to_spawn = list(
/obj/abstract/mind_ui_element/blood_gauge,
/obj/abstract/mind_ui_element/blood_count,
)
/datum/mind_ui/soulblade/Valid()
var/mob/M = mind.current
if (isshade(M) && istype(M.loc, /obj/item/weapon/melee/soulblade))
return TRUE
return FALSE
//------------------------------------------------------------
/obj/abstract/mind_ui_element/blood_gauge
name = "Blood"
icon = 'icons/ui/soulblade/21x246.dmi'
icon_state = "blood_gauge_background"
layer = MIND_UI_BACK
offset_y = -119
/obj/abstract/mind_ui_element/blood_gauge/UpdateIcon()
var/mob/living/simple_animal/shade/M = GetUser()
if(!istype(M) || !istype(M.loc, /obj/item/weapon/melee/soulblade))
return
var/obj/item/weapon/melee/soulblade/SB = M.loc
overlays.len = 0
var/image/gauge = image('icons/ui/soulblade/18x200.dmi', src, "blood")
var/matrix/gauge_matrix = matrix()
gauge_matrix.Scale(1,SB.blood/SB.maxblood)
gauge.transform = gauge_matrix
gauge.layer = MIND_UI_BUTTON
gauge.pixel_y = round(-77 + 100 * (SB.blood/SB.maxblood))
overlays += gauge
var/image/cover = image(icon, src, "blood_gauge_cover")
cover.layer = MIND_UI_FRONT
overlays += cover
//------------------------------------------------------------
/obj/abstract/mind_ui_element/blood_count
icon = 'icons/ui/soulblade/21x246.dmi'
icon_state = ""
layer = MIND_UI_FRONT+1
mouse_opacity = 0
/obj/abstract/mind_ui_element/blood_count/UpdateIcon()
var/mob/living/simple_animal/shade/M = GetUser()
if(!istype(M) || !istype(M.loc, /obj/item/weapon/melee/soulblade))
return
var/obj/item/weapon/melee/soulblade/SB = M.loc
overlays.len = 0
overlays += String2Image("[SB.blood]")
if(SB.blood >= 100)
offset_x = 0
else if(SB.blood >= 10)
offset_x = 3
else
offset_x = 6
UpdateUIScreenLoc()
//------------------------------------------------------------