mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-16 18:52:45 +01:00
Fix solar trackers sometimes vanishing when deconstructed (#7710)
Fix solar trackers sometimes vanishing, without leaving an assembly behind, when deconstructed. Also refactor solar code a little.
This commit is contained in:
+13
-32
@@ -24,13 +24,16 @@ GLOBAL_LIST_EMPTY(solars_list)
|
||||
var/ndir = SOUTH // target dir
|
||||
var/turn_angle = 0
|
||||
var/obj/machinery/power/solar_control/control = null
|
||||
var/glass_type = /obj/item/stack/material/glass
|
||||
|
||||
/obj/machinery/power/solar/drain_power()
|
||||
return -1
|
||||
|
||||
/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
|
||||
/obj/machinery/power/solar/Initialize(mapload, glass_type)
|
||||
. = ..()
|
||||
Make(S)
|
||||
if(glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass
|
||||
health *= 2
|
||||
update_icon()
|
||||
connect_to_network()
|
||||
|
||||
/obj/machinery/power/solar/Destroy()
|
||||
@@ -50,28 +53,16 @@ GLOBAL_LIST_EMPTY(solars_list)
|
||||
control.connected_panels.Remove(src)
|
||||
control = null
|
||||
|
||||
/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
S = new /obj/item/solar_assembly(src)
|
||||
S.glass_type = /obj/item/stack/material/glass
|
||||
S.anchored = TRUE
|
||||
S.loc = src
|
||||
if(S.glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass
|
||||
health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
|
||||
|
||||
if(W.is_crowbar())
|
||||
playsound(src, 'sound/machines/click.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] begins to take the glass off the solar panel.</span>")
|
||||
if(do_after(user, 50))
|
||||
var/obj/item/solar_assembly/S = locate() in src
|
||||
if(S)
|
||||
S.loc = src.loc
|
||||
S.give_glass()
|
||||
var/obj/item/solar_assembly/S = new(loc)
|
||||
S.anchored = TRUE
|
||||
var/obj/item/stack/glass = new glass_type(loc)
|
||||
glass.amount = 2
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] takes the glass off the solar panel.</span>")
|
||||
qdel(src)
|
||||
@@ -169,8 +160,8 @@ GLOBAL_LIST_EMPTY(solars_list)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S)
|
||||
..(loc, S, 0)
|
||||
/obj/machinery/power/solar/fake/New(var/turf/loc, var/glass_type)
|
||||
..(loc, glass_type, 0)
|
||||
|
||||
/obj/machinery/power/solar/fake/process()
|
||||
. = PROCESS_KILL
|
||||
@@ -213,20 +204,11 @@ GLOBAL_LIST_EMPTY(solars_list)
|
||||
w_class = ITEMSIZE_LARGE // Pretty big!
|
||||
anchored = 0
|
||||
var/tracker = 0
|
||||
var/glass_type = null
|
||||
|
||||
/obj/item/solar_assembly/attack_hand(var/mob/user)
|
||||
if(!anchored || !isturf(loc)) // You can't pick it up
|
||||
..()
|
||||
|
||||
// Give back the glass type we were supplied with
|
||||
/obj/item/solar_assembly/proc/give_glass()
|
||||
if(glass_type)
|
||||
var/obj/item/stack/material/S = new glass_type(src.loc)
|
||||
S.amount = 2
|
||||
glass_type = null
|
||||
|
||||
|
||||
/obj/item/solar_assembly/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
if (!isturf(loc))
|
||||
return 0
|
||||
@@ -246,13 +228,12 @@ GLOBAL_LIST_EMPTY(solars_list)
|
||||
if(istype(W, /obj/item/stack/material) && (W.get_material_name() == "glass" || W.get_material_name() == "rglass"))
|
||||
var/obj/item/stack/material/S = W
|
||||
if(S.use(2))
|
||||
glass_type = W.type
|
||||
playsound(src, 'sound/machines/click.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] places the glass on the solar assembly.</span>")
|
||||
if(tracker)
|
||||
new /obj/machinery/power/tracker(get_turf(src), src)
|
||||
new /obj/machinery/power/tracker(get_turf(src), W.type)
|
||||
else
|
||||
new /obj/machinery/power/solar(get_turf(src), src)
|
||||
new /obj/machinery/power/solar(get_turf(src), W.type)
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need two sheets of glass to put them into a solar panel.</span>")
|
||||
|
||||
@@ -11,14 +11,15 @@
|
||||
anchored = 1
|
||||
density = 1
|
||||
use_power = USE_POWER_OFF
|
||||
var/glass_type = /obj/item/stack/material/glass
|
||||
|
||||
var/id = 0
|
||||
var/sun_angle = 0 // sun angle as set by sun datum
|
||||
var/obj/machinery/power/solar_control/control = null
|
||||
|
||||
/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S)
|
||||
..(loc)
|
||||
Make(S)
|
||||
/obj/machinery/power/tracker/Initialize(mapload, glass_type)
|
||||
. = ..()
|
||||
update_icon()
|
||||
connect_to_network()
|
||||
|
||||
/obj/machinery/power/tracker/Destroy()
|
||||
@@ -38,15 +39,6 @@
|
||||
control.connected_tracker = null
|
||||
control = null
|
||||
|
||||
/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
S = new /obj/item/solar_assembly(src)
|
||||
S.glass_type = /obj/item/stack/material/glass
|
||||
S.tracker = 1
|
||||
S.anchored = 1
|
||||
S.loc = src
|
||||
update_icon()
|
||||
|
||||
//updates the tracker icon and the facing angle for the control computer
|
||||
/obj/machinery/power/tracker/proc/set_angle(var/angle)
|
||||
sun_angle = angle
|
||||
@@ -63,10 +55,11 @@
|
||||
playsound(src, 'sound/machines/click.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] begins to take the glass off the solar tracker.</span>")
|
||||
if(do_after(user, 50))
|
||||
var/obj/item/solar_assembly/S = locate() in src
|
||||
if(S)
|
||||
S.loc = src.loc
|
||||
S.give_glass()
|
||||
var/obj/item/solar_assembly/S = new(loc)
|
||||
S.tracker = TRUE
|
||||
S.anchored = TRUE
|
||||
var/obj/item/stack/glass = new glass_type(loc)
|
||||
glass.amount = 2
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'>[user] takes the glass off the tracker.</span>")
|
||||
qdel(src)
|
||||
|
||||
Reference in New Issue
Block a user