From 8e2058c4ed19d9802aa7d7363f11dd152d8a9ebf Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 18 Dec 2020 05:36:04 +1100 Subject: [PATCH 1/2] Merge pull request #1040 from eckff/CrimsonShrike-TheHottestShit Ports mecha maptext and heat gauge from baystation --- code/modules/mechs/interface/_interface.dm | 12 +- .../modules/mechs/interface/screen_objects.dm | 132 ++++++++++++++++-- code/modules/mechs/mech.dm | 1 + code/modules/mechs/mech_life.dm | 1 + icons/mecha/mech_hud.dmi | Bin 3452 -> 6320 bytes 5 files changed, 126 insertions(+), 20 deletions(-) diff --git a/code/modules/mechs/interface/_interface.dm b/code/modules/mechs/interface/_interface.dm index d6ae4ae8b85..08f8a0b2ece 100644 --- a/code/modules/mechs/interface/_interface.dm +++ b/code/modules/mechs/interface/_interface.dm @@ -36,20 +36,20 @@ var/pos = 7 for(var/additional_hud in additional_hud_elements) var/obj/screen/exosuit/M = new additional_hud(src) - M.screen_loc = "LEFT+1:6,BOTTOM+[pos]:[i * -12]" + M.screen_loc = "LEFT+1:6,BOTTOM+[pos]:[i]" hud_elements |= M - i++ - if(i == 3) - pos-- - i = 0 + i -= M.height hud_health = new /obj/screen/exosuit/health(src) hud_health.screen_loc = "RIGHT-1:28,CENTER-3:11" hud_elements |= hud_health hud_open = locate(/obj/screen/exosuit/toggle/hatch_open) in hud_elements hud_power = new /obj/screen/exosuit/power(src) - hud_power.screen_loc = "RIGHT-1:12,CENTER-4:25" + hud_power.screen_loc = "RIGHT-1:24,CENTER-4:25" hud_elements |= hud_power + hud_heat = new /obj/screen/exosuit/heat(src) + hud_heat.screen_loc = "RIGHT-1:28,CENTER-4" + hud_elements |= hud_heat refresh_hud() diff --git a/code/modules/mechs/interface/screen_objects.dm b/code/modules/mechs/interface/screen_objects.dm index d1a891a60a3..477bf451822 100644 --- a/code/modules/mechs/interface/screen_objects.dm +++ b/code/modules/mechs/interface/screen_objects.dm @@ -1,13 +1,18 @@ // Screen objects hereon out. +#define MECH_UI_STYLE(X) "" + X + "" + /obj/screen/exosuit name = "hardpoint" icon = 'icons/mecha/mech_hud.dmi' - icon_state = "hardpoint" + icon_state = "base" var/mob/living/exosuit/owner + var/height = 14 /obj/screen/exosuit/radio name = "radio" - icon_state = "radio" + maptext = MECH_UI_STYLE("RADIO") + maptext_x = 5 + maptext_y = 12 /obj/screen/exosuit/radio/Click() if(..()) @@ -30,6 +35,7 @@ name = "hardpoint" var/hardpoint_tag var/obj/item/holding + icon_state = "hardpoint" maptext_x = 34 maptext_y = 3 @@ -126,7 +132,7 @@ if(!(..())) return - if(!owner.hatch_closed) + if(!owner?.hatch_closed) to_chat(usr, SPAN_WARNING("Error: Hardpoint interface disabled while [owner.body.hatch_descriptor] is open.")) return @@ -150,7 +156,9 @@ /obj/screen/exosuit/eject name = "eject" - icon_state = "eject" + maptext = MECH_UI_STYLE("EJECT") + maptext_x = 5 + maptext_y = 12 /obj/screen/exosuit/eject/Click() if(..()) @@ -158,7 +166,9 @@ /obj/screen/exosuit/rename name = "rename" - icon_state = "rename" + maptext = MECH_UI_STYLE("RENAME") + maptext_x = 1 + maptext_y = 12 /obj/screen/exosuit/power name = "power" @@ -172,19 +182,32 @@ /obj/screen/exosuit/toggle name = "toggle" - var/toggled + var/toggled = FALSE + +/obj/screen/exosuit/toggle/Initialize() + . = ..() + queue_icon_update() + +/obj/screen/exosuit/toggle/on_update_icon() + . = ..() + icon_state = "[initial(icon_state)][toggled ? "_enabled" : ""]" + maptext = FONT_COLORED(toggled ? COLOR_WHITE : COLOR_GRAY,initial(maptext)) /obj/screen/exosuit/toggle/Click() if(..()) toggled() /obj/screen/exosuit/toggle/proc/toggled() toggled = !toggled - icon_state = "[initial(icon_state)][toggled ? "_enabled" : ""]" + queue_icon_update() return toggled /obj/screen/exosuit/toggle/air name = "air" - icon_state = "air" + icon_state = "small_important" + maptext = MECH_UI_STYLE("AIR") + maptext_x = 9 + maptext_y = 13 + height = 12 /obj/screen/exosuit/toggle/air/toggled() owner.use_air = ..() @@ -192,7 +215,11 @@ /obj/screen/exosuit/toggle/maint name = "toggle maintenance protocol" - icon_state = "maint" + icon_state = "small" + maptext = MECH_UI_STYLE("MAINT") + maptext_x = 5 + maptext_y = 13 + height = 12 /obj/screen/exosuit/toggle/maint/toggled() owner.maintenance_protocols = ..() @@ -200,7 +227,9 @@ /obj/screen/exosuit/toggle/hardpoint name = "toggle hardpoint lock" - icon_state = "hardpoint_lock" + maptext = MECH_UI_STYLE("GEAR") + maptext_x = 5 + maptext_y = 12 /obj/screen/exosuit/toggle/hardpoint/toggled() owner.hardpoints_locked = ..() @@ -208,7 +237,9 @@ /obj/screen/exosuit/toggle/hatch name = "toggle hatch lock" - icon_state = "hatch_lock" + maptext = MECH_UI_STYLE("LOCK") + maptext_x = 5 + maptext_y = 12 /obj/screen/exosuit/toggle/hatch/toggled() if(!owner.hatch_locked && !owner.hatch_closed) @@ -219,9 +250,13 @@ /obj/screen/exosuit/toggle/hatch_open name = "open or close hatch" - icon_state = "hatch_status" + maptext = MECH_UI_STYLE("CLOSE") + maptext_x = 4 + maptext_y = 12 /obj/screen/exosuit/toggle/hatch_open/toggled() + if (!owner) + return if(owner.hatch_locked && owner.hatch_closed) to_chat(usr, SPAN_WARNING("You cannot open the hatch while it is locked.")) return @@ -229,6 +264,15 @@ to_chat(usr, SPAN_NOTICE("The [owner.body.hatch_descriptor] is now [owner.hatch_closed ? "closed" : "open" ].")) owner.update_icon() +/obj/screen/exosuit/toggle/hatch_open/on_update_icon() + . = ..() + if(owner.hatch_closed) + maptext = MECH_UI_STYLE("OPEN") + maptext_x = 5 + else + maptext = MECH_UI_STYLE("CLOSE") + maptext_x = 4 + // This is basically just a holder for the updates the exosuit does. /obj/screen/exosuit/health name = "exosuit integrity" @@ -245,7 +289,11 @@ //Controls if cameras set the vision flags /obj/screen/exosuit/toggle/camera name = "toggle camera matrix" - icon_state = "camera" + icon_state = "small_important" + maptext = MECH_UI_STYLE("SENSOR") + maptext_x = 1 + maptext_y = 13 + height = 12 /obj/screen/exosuit/toggle/camera/toggled() if(!owner.head) @@ -257,5 +305,61 @@ owner.head.active_sensors = ..() to_chat(usr, SPAN_NOTICE("[owner.head.name] advanced sensor mode is [owner.head.active_sensors ? "now" : "no longer" ] active.")) +/obj/screen/exosuit/needle +#if DM_VERSION >= 513 + vis_flags = VIS_INHERIT_ID +#endif + icon_state = "heatprobe_needle" + +/obj/screen/exosuit/heat + name = "heat probe" + icon_state = "heatprobe" + var/celsius = TRUE + var/obj/screen/exosuit/needle/gauge_needle = null + desc = "TEST" + +/obj/screen/exosuit/heat/Initialize() + . = ..() + gauge_needle = new /obj/screen/exosuit/needle(owner) + vis_contents += gauge_needle + +/obj/screen/exosuit/heat/Destroy() + QDEL_NULL(gauge_needle) + . = ..() -#undef BAR_CAP \ No newline at end of file +/obj/screen/exosuit/heat/Click(location, control, params) + if(..()) + var/modifiers = params2list(params) + if(modifiers["shift"]) + if(owner && owner.material) + usr.show_message(SPAN_NOTICE("Your suit's safe operating limit ceiling is [(celsius ? "[owner.material.melting_point - T0C] °C" : "[owner.material.melting_point] K" )]."), VISIBLE_MESSAGE) + return + if(modifiers["ctrl"]) + celsius = !celsius + usr.show_message(SPAN_NOTICE("You switch the chassis probe display to use [celsius ? "celsius" : "kelvin"]."), VISIBLE_MESSAGE) + return + if(owner && owner.body && owner.body.diagnostics?.is_functional() && owner.loc) + usr.show_message(SPAN_NOTICE("The life support panel blinks several times as it updates:"), VISIBLE_MESSAGE) + + usr.show_message(SPAN_NOTICE("Chassis heat probe reports temperature of [(celsius ? "[owner.bodytemperature - T0C] °C" : "[owner.bodytemperature] K" )]."), VISIBLE_MESSAGE) + if(owner.material.melting_point < owner.bodytemperature) + usr.show_message(SPAN_WARNING("Warning: Current chassis temperature exceeds operating parameters."), VISIBLE_MESSAGE) + var/air_contents = owner.loc.return_air() + if(!air_contents) + usr.show_message(SPAN_WARNING("The external air probe isn't reporting any data!"), VISIBLE_MESSAGE) + else + usr.show_message(SPAN_NOTICE("External probes report: [jointext(atmosanalyzer_scan(owner.loc, air_contents), "
")]"), VISIBLE_MESSAGE) + else + usr.show_message(SPAN_WARNING("The life support panel isn't responding."), VISIBLE_MESSAGE) + +/obj/screen/exosuit/heat/proc/Update() + //Relative value of heat + if(owner && owner.body && owner.body.diagnostics?.is_functional() && gauge_needle) + var/value = clamp( owner.bodytemperature / (owner.material.melting_point * 1.55), 0, 1) + var/matrix/rot_matrix = matrix() + rot_matrix.Turn(Interpolate(-90, 90, value)) + rot_matrix.Translate(0, -2) + animate(gauge_needle, transform = rot_matrix, 0.1, easing = SINE_EASING) + +#undef BAR_CAP +#undef MECH_UI_STYLE diff --git a/code/modules/mechs/mech.dm b/code/modules/mechs/mech.dm index 78ff34ca6cb..e3de9bb2d37 100644 --- a/code/modules/mechs/mech.dm +++ b/code/modules/mechs/mech.dm @@ -69,6 +69,7 @@ var/obj/screen/exosuit/health/hud_health var/obj/screen/exosuit/toggle/hatch_open/hud_open var/obj/screen/exosuit/power/hud_power + var/obj/screen/exosuit/heat/hud_heat /mob/living/exosuit/is_flooded(lying_mob, absolute) . = (body && body.pilot_coverage >= 100 && hatch_closed) ? FALSE : ..() diff --git a/code/modules/mechs/mech_life.dm b/code/modules/mechs/mech_life.dm index a4330502d81..a4305e6de0f 100644 --- a/code/modules/mechs/mech_life.dm +++ b/code/modules/mechs/mech_life.dm @@ -76,6 +76,7 @@ if(prob(5)) visible_message(SPAN_DANGER("\The [src]'s hull bends and buckles under the intense heat!")) + hud_heat.Update() /mob/living/exosuit/death(var/gibbed) // Eject the pilot. diff --git a/icons/mecha/mech_hud.dmi b/icons/mecha/mech_hud.dmi index 9755c384712d14a49f16811b6f2572f576529cdb..e9536f32045237aa7bf6064c0c605a3a8d8b5a4e 100644 GIT binary patch literal 6320 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 literal 3452 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 Date: Thu, 17 Dec 2020 13:37:12 -0500 Subject: [PATCH 2/2] Ports mecha maptext and heat gauge from baystation