Skip to content

Commit 7df8069

Browse files
RCD overhaul (#37413)
* basics * floors * to the windowwwwwwwwwwwwwww * icon fixes and wood walls * DOOR STUCK * dumb fix lmao * DOOR STUCK * wow guys linters are so fucking cool * fixed some scuff, new buildables * windoors, girders, removed useless changes * relative path fix * more lint * vars moved to parent object * borg * mechs * code cleanup * suggested changes --------- Co-authored-by: west3436 <66280799+west3436@users.noreply.github.com>
1 parent fca7430 commit 7df8069

File tree

5 files changed

+1806
-7
lines changed

5 files changed

+1806
-7
lines changed

code/modules/RCD/RCD.dm

Lines changed: 166 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,21 @@
3838
var/datum/html_interface/rcd/interface
3939

4040
var/obj/abstract/screen/close/closer
41+
42+
43+
var/list/settings //for stuff like window directions and construction options.
44+
var/current_menu=null //we are keeping both systems of schematics for the sake of backwards compatability
45+
var/list/schem_groups=null
46+
var/datum/rcd_grouped_schematic/selected_schem=null
47+
48+
4149

4250
/obj/item/device/rcd/New()
4351
. = ..()
4452

53+
schem_groups=new()
54+
settings=new()
55+
4556
//interface gets created BEFORE the schematics get created, so they can modify the HEAD content (RPD pipe colour picker).
4657
interface = new(src, sanitize(name))
4758
data = list()
@@ -368,8 +379,159 @@
368379
/datum/rcd_schematic/con_walls,
369380
/datum/rcd_schematic/con_airlock,
370381
/datum/rcd_schematic/con_window,
371-
)
382+
)
383+
current_menu="deconstruct"
372384

373-
/obj/item/device/rcd/mech/attack_self(var/mob/living/user)
374-
if(!selected || user.shown_schematics_background || !selected.show(user))
375-
user.hud_used.toggle_show_schematics_display(schematics["Construction"], 0, src)
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=""
472+
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

0 commit comments

Comments
 (0)