Skip to content

Commit 1c920c8

Browse files
code (#37469)
1 parent 289ea2a commit 1c920c8

File tree

3 files changed

+20
-159
lines changed

3 files changed

+20
-159
lines changed

code/modules/RCD/RCD.dm

Lines changed: 5 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
var/current_menu=null //we are keeping both systems of schematics for the sake of backwards compatability
4545
var/list/datum/rcd_scematic_grouping/schem_groups=null
4646
var/datum/rcd_grouped_schematic/selected_schem=null
47+
var/list/client/loaded_clients=null //store a list of clients who have loaded all the images, so we can skip trying to send it to them.
4748

4849

4950

@@ -52,6 +53,7 @@
5253

5354
schem_groups=new()
5455
settings=new()
56+
loaded_clients=new()
5557

5658
//interface gets created BEFORE the schematics get created, so they can modify the HEAD content (RPD pipe colour picker).
5759
interface = new(src, sanitize(name))
@@ -380,158 +382,8 @@
380382
/datum/rcd_schematic/con_airlock,
381383
/datum/rcd_schematic/con_window,
382384
)
383-
current_menu="deconstruct"
384385

385-
386-
/obj/item/device/rcd/mech/New()
387-
. = ..()
388-
rcd_list += src
389-
390-
var/datum/rcd_scematic_grouping/destroy/dest_g = new(src)
391-
dest_g.schematics+= new /datum/rcd_grouped_schematic/destroy_all(src)
392-
393-
schem_groups+=dest_g
394-
schem_groups+= new /datum/rcd_scematic_grouping/build_wall/engi_std(src)
395-
schem_groups+= new /datum/rcd_scematic_grouping/build_floors/engi_std(src)
396-
schem_groups+= new /datum/rcd_scematic_grouping/build_airlock/engi_std(src)
397-
schem_groups+=new /datum/rcd_scematic_grouping/build_windows/engi_std(src)
398-
399-
current_menu=schem_groups[1]?.name
400-
schem_groups[1]?.switch_to()
401-
402-
403-
/obj/item/device/rcd/mech/attack_self(var/mob/user)
404-
rebuild_ui()
405-
interface.show(user)
406-
for(var/datum/rcd_scematic_grouping/schemgroup in schem_groups)
407-
schemgroup.send_assets(user.client)
408-
for(var/datum/rcd_grouped_schematic/sch)
409-
sch.send_assets(user.client)
410-
interface.hide(user) //have to do this since loading so many images takes a lot of time. and no images is better than no UI
411-
interface.show(user)
412-
413-
414-
/obj/item/device/rcd/mech/Topic(var/href, var/list/href_list)
415-
//for(var/i in href_list)
416-
// world.log << "[i] = [href_list[i]]"
417-
418-
if(href_list["set_group"])
419-
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
420-
if(schem_group.name==href_list["set_group"])
421-
current_menu=href_list["set_group"]
422-
schem_group.switch_to()
423-
do_spark()
424-
rebuild_ui()
425-
return
426-
if(href_list["set_schematic"])
427-
var/datum/rcd_scematic_grouping/group
428-
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
429-
if(schem_group.name==current_menu)
430-
group=schem_group
431-
break
432-
if(group)
433-
for(var/datum/rcd_grouped_schematic/schm in group.schematics)
434-
if(schm.name==href_list["set_schematic"])
435-
selected_schem=schm
436-
do_spark()
437-
rebuild_ui()
438-
break
439-
return
440-
if(href_list["set_arg"])
441-
if(href_list["value_togglelist"])
442-
var/val = href_list["value_isnum"]=="yes" ? text2num(href_list["value"]) : href_list["value"]
443-
var/found=FALSE
444-
for(var/n in settings[href_list["set_arg"]])
445-
if(n==val)
446-
found=TRUE
447-
break
448-
if( found )
449-
settings[href_list["set_arg"]] -= val
450-
else
451-
settings[href_list["set_arg"]] += val
452-
else if(href_list["value_resetlist"])
453-
settings[href_list["set_arg"]]=new /list()
454-
else if(href_list["value_toggle"] )
455-
settings[href_list["set_arg"]] = ! settings[href_list["set_arg"]]
456-
else if (href_list["value_input"])
457-
var/tx=""
458-
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
459-
if(schem_group.name==current_menu)
460-
tx=schem_group.selectiondialogue
461-
break
462-
settings[href_list["set_arg"]] = input(usr, tx, src, "[selected_schem?.name]")
463-
else
464-
settings[href_list["set_arg"]] = href_list["value_isnum"]=="yes" ? text2num(href_list["value"]) : href_list["value"]
465-
rebuild_ui()
466-
return
467-
468-
return
469-
470-
/obj/item/device/rcd/mech/rebuild_ui()
471-
var/dat=""
472386

473-
//that's right, you can embed a stylesheet in the html body, and you better believe i'm going to do this instead of setting up a whole new file for like 2 rules.
474-
dat+={"<style>
475-
.grouplisting{
476-
text-align:center;
477-
font-size:100%;
478-
}
479-
.grouplisting img {
480-
width:64px;
481-
height:64px;
482-
}
483-
484-
.grouplisting a{
485-
width:100%;
486-
height:100%;
487-
display:block;
488-
background:revert;
489-
}
490-
491-
.clickabletable td{
492-
text-align:center;
493-
height:100%; /*to make it so that links inhabit the whole size of the td. kinda annoying to have to do all this.*/
494-
}
495-
496-
.clickabletable a{
497-
width:100%;
498-
height:100%;
499-
display:block;
500-
}
501-
502-
img, .clickabletable img, .grouplisting img {
503-
border:none;
504-
background:none;
505-
image-rendering:pixelated;
506-
}
507-
508-
</style>"}
509-
510-
dat+="<table class='grouplisting'><tr>"
511-
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
512-
dat+="<td class='[schem_group.name==current_menu ? "schem_selected" : "schem" ]'><a href='?src=\ref[interface];set_group=[schem_group.name]'><img src='[schem_group.headerimage]'><br>[schem_group.name]</a></td>"
513-
dat+="</tr></table><hr>"
514-
515-
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
516-
if(schem_group.name==current_menu)
517-
var/t=schem_group.generate_html()
518-
dat+=t
519-
break
520-
521-
interface.updateLayout(dat)
522-
523-
/obj/item/device/rcd/mech/afterattack(var/atom/A, var/mob/user)
524-
if(!selected_schem)
525-
return 1
526-
if( !(user.Adjacent(A) && A.Adjacent(user)) )
527-
return 1
528-
if(get_dist(A, user) > 1)
529-
return 1
530-
531-
var/c=selected_schem.build(A,user)
532-
if(!c)
533-
to_chat(user, "<span class='warning'>\The [src]'s error light flickers.</span>")
534-
else
535-
use_energy(c, user)
536-
rebuild_ui()
537-
return 1
387+
/obj/item/device/rcd/mech/attack_self(var/mob/living/user)
388+
if(!selected || user.shown_schematics_background || !selected.show(user))
389+
user.hud_used.toggle_show_schematics_display(schematics["Construction"], 0, src)

code/modules/RCD/engie.dm

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,21 @@
4545
/obj/item/device/rcd/matter/engineering/attack_self(var/mob/user)
4646
rebuild_ui()
4747
interface.show(user)
48+
if( locate(user.client) in loaded_clients )
49+
return
50+
4851
for(var/datum/rcd_scematic_grouping/schemgroup in schem_groups)
4952
schemgroup.send_assets(user.client)
5053
for(var/datum/rcd_grouped_schematic/sch)
5154
sch.send_assets(user.client)
5255
interface.hide(user) //have to do this since loading so many images takes a lot of time. and no images is better than no UI
5356
interface.show(user)
57+
loaded_clients+=user.client
5458

5559

5660
/obj/item/device/rcd/matter/engineering/Topic(var/href, var/list/href_list)
61+
if(href_list["clear_images"])
62+
loaded_clients=new()
5763
if(href_list["set_group"])
5864
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
5965
if(schem_group.name==href_list["set_group"])
@@ -109,7 +115,7 @@
109115
/obj/item/device/rcd/matter/engineering/rebuild_ui()
110116
var/dat=""
111117

112-
dat+="Compressed Matter: [matter]/[max_matter]<hr>"
118+
dat+="Compressed Matter: [matter]/[max_matter] <span class='schem'><a href='?src=\ref[interface];clear_images=yes;'>Reload Images</a></span><hr>"
113119

114120
//that's right, you can embed a stylesheet in the html body, and you better believe i'm going to do this instead of setting up a whole new file for like 2 rules.
115121
dat+={"<style>
@@ -234,18 +240,21 @@
234240

235241
rebuild_ui()
236242
interface.show(user)
243+
if( locate(user.client) in loaded_clients )
244+
return
245+
237246
for(var/datum/rcd_scematic_grouping/schemgroup in schem_groups)
238247
schemgroup.send_assets(user.client)
239248
for(var/datum/rcd_grouped_schematic/sch)
240249
sch.send_assets(user.client)
241250
interface.hide(user) //have to do this since loading so many images takes a lot of time. and no images is better than no UI
242251
interface.show(user)
252+
loaded_clients+=user.client
243253

244254

245255
/obj/item/device/rcd/borg/engineering/Topic(var/href, var/list/href_list)
246-
//for(var/i in href_list)
247-
// world.log << "[i] = [href_list[i]]"
248-
256+
if(href_list["clear_images"])
257+
loaded_clients=new()
249258
if(href_list["set_group"])
250259
for(var/datum/rcd_scematic_grouping/schem_group in schem_groups)
251260
if(schem_group.name==href_list["set_group"])
@@ -301,7 +310,7 @@
301310
/obj/item/device/rcd/borg/engineering/rebuild_ui()
302311
var/dat=""
303312

304-
dat+="Charge: [floor(matter)]<hr>"
313+
dat+="Charge: [floor(matter)] <span class='schem'><a href='?src=\ref[interface];clear_images=yes;'>Reload Images</a></span><hr>"
305314

306315
//that's right, you can embed a stylesheet in the html body, and you better believe i'm going to do this instead of setting up a whole new file for like 2 rules.
307316
dat+={"<style>

code/modules/RCD/schematics/engineering_rcd.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@
581581
return dat
582582

583583
/datum/rcd_scematic_grouping/build_windows/switch_to()
584-
linked_rcd.selected_schem = schematics[1]
584+
linked_rcd.selected_schem = schematics[2] //use rglass by default.
585585

586586

587587
/datum/rcd_scematic_grouping/build_windows/send_assets(var/client/client)

0 commit comments

Comments
 (0)