Solars panels can now be upgraded with glass (#12971)

* New solar panels dropped

* Update solar.dm

* optimization

* turns the panel effect into a mutable_apperance for syncing up

* new solar look

* color update

* I'm PISSED.

* covered in/by/with who cares

Co-authored-by: ToasterBiome <baiomurang@gmail.com>
This commit is contained in:
Redmoogle
2021-12-26 07:32:14 -05:00
committed by GitHub
parent e89591a4ed
commit c0c7dd50cd
2 changed files with 60 additions and 22 deletions

View File

@@ -12,7 +12,6 @@
active_power_usage = 0 active_power_usage = 0
max_integrity = 150 max_integrity = 150
integrity_failure = 0.33 integrity_failure = 0.33
var/id var/id
var/obscured = FALSE var/obscured = FALSE
var/sunfrac = 0 //[0-1] measure of obscuration -- multipllier against power generation var/sunfrac = 0 //[0-1] measure of obscuration -- multipllier against power generation
@@ -21,26 +20,30 @@
var/obj/machinery/power/solar_control/control var/obj/machinery/power/solar_control/control
var/needs_to_turn = TRUE //do we need to turn next tick? var/needs_to_turn = TRUE //do we need to turn next tick?
var/needs_to_update_solar_exposure = TRUE //do we need to call update_solar_exposure() next tick? var/needs_to_update_solar_exposure = TRUE //do we need to call update_solar_exposure() next tick?
var/obj/effect/overlay/panel var/mutable_appearance/panelstructure
var/mutable_appearance/paneloverlay
var/multiplier
var/panelcolor
var/obj/item/stack/sheet/glass_type
/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
. = ..() . = ..()
panel = new()
#if DM_VERSION >= 513
panel.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_ICON|VIS_INHERIT_PLANE
vis_contents += panel
#endif
panel.icon = icon
panel.icon_state = "solar_panel"
panel.layer = FLY_LAYER
Make(S) Make(S)
connect_to_network() connect_to_network()
RegisterSignal(SSsun, COMSIG_SUN_MOVED, .proc/queue_update_solar_exposure) RegisterSignal(SSsun, COMSIG_SUN_MOVED, .proc/queue_update_solar_exposure)
panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER)
paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER)
paneloverlay.color = panelcolor
update_icon()
/obj/machinery/power/solar/Destroy() /obj/machinery/power/solar/Destroy()
unset_control() //remove from control computer unset_control() //remove from control computer
return ..() return ..()
/obj/machinery/power/solar/examine(mob/user)
. = ..()
if(glass_type)
. += "It is covered with a sheet of [initial(glass_type.name)]."
//set the control of the panel to a given computer //set the control of the panel to a given computer
/obj/machinery/power/solar/proc/set_control(obj/machinery/power/solar_control/SC) /obj/machinery/power/solar/proc/set_control(obj/machinery/power/solar_control/SC)
@@ -62,9 +65,14 @@
S.anchored = TRUE S.anchored = TRUE
else else
S.forceMove(src) S.forceMove(src)
if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass
max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to S.glass_rating()
obj_integrity = max_integrity
multiplier = S.multiplier
max_integrity *= S.integmultiplier
obj_integrity = max_integrity
panelcolor = S.panelcolor
glass_type = S.glass_type
/obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I) /obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I)
playsound(src.loc, 'sound/machines/click.ogg', 50, 1) playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
@@ -107,14 +115,12 @@
/obj/machinery/power/solar/update_icon() /obj/machinery/power/solar/update_icon()
..() ..()
cut_overlays()
var/matrix/turner = matrix() var/matrix/turner = matrix()
turner.Turn(azimuth_current) turner.Turn(azimuth_current)
panel.transform = turner panelstructure.transform = turner
if(stat & BROKEN) paneloverlay.transform = turner
panel.icon_state = "solar_panel-b" add_overlay(list(paneloverlay, panelstructure))
else
panel.icon_state = "solar_panel"
/obj/machinery/power/solar/proc/queue_turn(azimuth) /obj/machinery/power/solar/proc/queue_turn(azimuth)
needs_to_turn = TRUE needs_to_turn = TRUE
@@ -180,7 +186,7 @@
if(sunfrac <= 0) if(sunfrac <= 0)
return return
var/sgen = SOLAR_GEN_RATE * sunfrac var/sgen = SOLAR_GEN_RATE * sunfrac * multiplier
add_avail(sgen) add_avail(sgen)
if(control) if(control)
control.gen += sgen control.gen += sgen
@@ -210,6 +216,9 @@
anchored = FALSE anchored = FALSE
var/tracker = 0 var/tracker = 0
var/glass_type = null var/glass_type = null
var/multiplier = 1
var/integmultiplier = 1
var/panelcolor
// Give back the glass type we were supplied with // Give back the glass type we were supplied with
/obj/item/solar_assembly/proc/give_glass(device_broken) /obj/item/solar_assembly/proc/give_glass(device_broken)
@@ -221,6 +230,34 @@
new glass_type(Tsec, 2) new glass_type(Tsec, 2)
glass_type = null glass_type = null
/obj/item/solar_assembly/proc/glass_rating()
if(is_glass_sheet(glass_type))
var/obj/item/stack/sheet/W = glass_type
if(ispath(W, /obj/item/stack/sheet/glass))
multiplier = 1
panelcolor = "#599ffa"
if(ispath(W, /obj/item/stack/sheet/rglass))
multiplier = 1.25
integmultiplier = 2
panelcolor = "#2c6dc2"
if(ispath(W, /obj/item/stack/sheet/plasmaglass))
multiplier = 1.75
integmultiplier = 1.5
panelcolor = "#d344d3"
if(ispath(W, /obj/item/stack/sheet/plasmarglass))
multiplier = 2
integmultiplier = 2.5
panelcolor = "#a124a1"
if(ispath(W, /obj/item/stack/sheet/titaniumglass))
multiplier = 2.5
integmultiplier = 4
panelcolor = "#8a8d8d"
if(ispath(W, /obj/item/stack/sheet/plastitaniumglass))
multiplier = 3
integmultiplier = 5
panelcolor = "#494949"
return TRUE
return FALSE
/obj/item/solar_assembly/attackby(obj/item/W, mob/user, params) /obj/item/solar_assembly/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_WRENCH && isturf(loc)) if(W.tool_behaviour == TOOL_WRENCH && isturf(loc))
@@ -236,13 +273,14 @@
W.play_tool_sound(src, 75) W.play_tool_sound(src, 75)
return 1 return 1
if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) if(is_glass_sheet(W))
var/obj/item/stack/sheet/S = W
if(!anchored) if(!anchored)
to_chat(user, span_warning("You need to secure the assembly before you can add glass.")) to_chat(user, span_warning("You need to secure the assembly before you can add glass."))
return return
var/obj/item/stack/sheet/S = W
if(S.use(2)) if(S.use(2))
glass_type = W.type glass_type = W.type
glass_rating()
playsound(src.loc, 'sound/machines/click.ogg', 50, 1) playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] places the glass on the solar assembly.", span_notice("You place the glass on the solar assembly.")) user.visible_message("[user] places the glass on the solar assembly.", span_notice("You place the glass on the solar assembly."))
if(tracker) if(tracker)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB