From f4699372a611d2faedc0bd1e694a9483b5347336 Mon Sep 17 00:00:00 2001 From: Fikou Date: Tue, 27 Apr 2021 01:30:05 +0200 Subject: [PATCH] Build Mode Update! (#58715) Improves the experience of using build mode for building events and stuff. You can now choose any from the eight dirs, not just cardinals and northwest. Decals are now supported by build mode! This means that they can have any dir you want instead of always being south. Areas are now filled in by default, you can still paint them manually with altclick. Switches new tab width from 5 to 4, which means that the buttons for modes/dirs will be more naturally distributed, 4 per line when we have 8 dirs and 12 modes --- code/modules/buildmode/buildmode.dm | 4 +-- code/modules/buildmode/submodes/advanced.dm | 6 ++++- code/modules/buildmode/submodes/area_edit.dm | 27 +++++++++++++++---- code/modules/buildmode/submodes/basic.dm | 6 ++--- code/modules/buildmode/submodes/fill.dm | 4 ++- icons/misc/buildmode.dmi | Bin 2856 -> 2707 bytes 6 files changed, 35 insertions(+), 12 deletions(-) diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 8ee15ad72e2..9fa4eb495e0 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -15,7 +15,7 @@ // Switching management var/switch_state = BM_SWITCHSTATE_NONE - var/switch_width = 5 + var/switch_width = 4 // modeswitch UI var/atom/movable/screen/buildmode/mode/modebutton var/list/modeswitch_buttons = list() @@ -72,7 +72,7 @@ buttons += new /atom/movable/screen/buildmode/quit(src) // build the lists of switching buttons build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /atom/movable/screen/buildmode/modeswitch) - build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /atom/movable/screen/buildmode/dirswitch) + build_options_grid(GLOB.alldirs, dirswitch_buttons, /atom/movable/screen/buildmode/dirswitch) // this creates a nice offset grid for choosing between buildmode options, // because going "click click click ah hell" sucks. diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm index 6657e4286b4..1dbc5fbb348 100644 --- a/code/modules/buildmode/submodes/advanced.dm +++ b/code/modules/buildmode/submodes/advanced.dm @@ -1,6 +1,6 @@ /datum/buildmode_mode/advanced key = "advanced" - var/objholder = null + var/atom/objholder = null // FIXME: add logic which adds a button displaying the icon // of the currently selected path @@ -47,6 +47,10 @@ log_admin("Build Mode: [key_name(c)] modified [T] in [AREACOORD(object)] to [objholder]") T = T.ChangeTurf(objholder) T.setDir(BM.build_dir) + else if(ispath(objholder, /obj/effect/turf_decal)) + var/turf/T = get_turf(object) + T.AddElement(/datum/element/decal, initial(objholder.icon), initial(objholder.icon_state), BM.build_dir, FALSE, initial(objholder.color), null, null, initial(objholder.alpha)) + log_admin("Build Mode: [key_name(c)] in [AREACOORD(object)] added a [initial(objholder.name)] decal with dir [BM.build_dir] to [T]") else if(!isnull(objholder)) var/obj/A = new objholder (get_turf(object)) A.setDir(BM.build_dir) diff --git a/code/modules/buildmode/submodes/area_edit.dm b/code/modules/buildmode/submodes/area_edit.dm index 039f2897a88..ba0acb68161 100644 --- a/code/modules/buildmode/submodes/area_edit.dm +++ b/code/modules/buildmode/submodes/area_edit.dm @@ -1,5 +1,6 @@ /datum/buildmode_mode/area_edit key = "areaedit" + use_corner_selection = TRUE var/area/storedarea var/image/areaimage @@ -22,7 +23,8 @@ /datum/buildmode_mode/area_edit/show_help(client/c) to_chat(c, "***********************************************************") - to_chat(c, "Left Mouse Button on obj/turf/mob = Paint area") + to_chat(c, "Left Mouse Button on obj/turf/mob = Select corner") + to_chat(c, "Left Mouse Button + Alt on turf/obj/mob = Paint area/span>") to_chat(c, "Right Mouse Button on obj/turf/mob = Select area to paint") to_chat(c, "Right Mouse Button on buildmode button = Create new area") to_chat(c, "***********************************************************") @@ -49,11 +51,26 @@ if(!storedarea) to_chat(c, "Configure or select the area you want to paint first!") return - var/turf/T = get_turf(object) - if(get_area(T) != storedarea) - log_admin("Build Mode: [key_name(c)] added [AREACOORD(T)] to [storedarea]") - storedarea.contents.Add(T) + if(LAZYACCESS(modifiers, ALT_CLICK)) + var/turf/T = get_turf(object) + if(get_area(T) != storedarea) + log_admin("Build Mode: [key_name(c)] added [AREACOORD(T)] to [storedarea]") + storedarea.contents.Add(T) + return + return ..() else if(LAZYACCESS(modifiers, RIGHT_CLICK)) var/turf/T = get_turf(object) storedarea = get_area(T) areaimage.loc = storedarea // color our area + +/datum/buildmode_mode/area_edit/handle_selected_area(client/c, params) + var/list/modifiers = params2list(params) + + if(LAZYACCESS(modifiers, LEFT_CLICK)) + var/choice = alert("Are you sure you want to fill area?", "Area Fill Confirmation", "Yes", "No") + if(choice != "Yes") + return + for(var/turf/T in block(get_turf(cornerA),get_turf(cornerB))) + storedarea.contents.Add(T) + log_admin("Build Mode: [key_name(c)] set the area of the region from [AREACOORD(cornerA)] through [AREACOORD(cornerB)] to [storedarea].") + diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index 59027b22a02..a5abd94fdd0 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -14,7 +14,7 @@ /datum/buildmode_mode/basic/handle_click(client/c, params, obj/object) var/list/modifiers = params2list(params) - + var/left_click = LAZYACCESS(modifiers, LEFT_CLICK) var/right_click = LAZYACCESS(modifiers, RIGHT_CLICK) var/alt_click = LAZYACCESS(modifiers, ALT_CLICK) @@ -45,9 +45,9 @@ new/obj/machinery/door/airlock(get_turf(object)) else if(istype(object,/turf) && ctrl_click && left_click) var/obj/structure/window/reinforced/window - if(BM.build_dir == NORTHWEST) + if(BM.build_dir in GLOB.diagonals) window = new /obj/structure/window/reinforced/fulltile(get_turf(object)) else window = new /obj/structure/window/reinforced(get_turf(object)) - window.setDir(BM.build_dir) + window.setDir(BM.build_dir) log_admin("Build Mode: [key_name(c)] built a window at [AREACOORD(object)]") diff --git a/code/modules/buildmode/submodes/fill.dm b/code/modules/buildmode/submodes/fill.dm index 68fd1b66cfe..f2d37cdfcd5 100644 --- a/code/modules/buildmode/submodes/fill.dm +++ b/code/modules/buildmode/submodes/fill.dm @@ -4,7 +4,7 @@ key = "fill" use_corner_selection = TRUE - var/objholder = null + var/atom/objholder = null /datum/buildmode_mode/fill/show_help(client/c) to_chat(c, "***********************************************************") @@ -64,6 +64,8 @@ if(ispath(objholder,/turf)) T = T.ChangeTurf(objholder) T.setDir(BM.build_dir) + else if(ispath(objholder, /obj/effect/turf_decal)) + T.AddElement(/datum/element/decal, initial(objholder.icon), initial(objholder.icon_state), BM.build_dir, FALSE, initial(objholder.color), null, null, initial(objholder.alpha)) else var/obj/A = new objholder(T) A.setDir(BM.build_dir) diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index edb635e7f2e7875b729d01de7bafebfacb61d69d..d744824c91ddc01f37f490d02123e815c4cd968f 100644 GIT binary patch delta 1919 zcmV-_2Y~pf7LygQDg%F1NklO6vuO`V|CDunW1B5&e}1wqb42WjhPwK zF*Cz0>C!)QK8xOyo+Znu?qlEOlJoE6v%Y?^^nOxiW=76!rhk1W=QiqFpPpdx`SSzx zs%IxST9p)Rt47lU^s7%#aCSB&x7k^K0H`zO)_vuJ_2~%~RUm&!_yNEUmTfNGS3X?N z3DOnFsvv3z_)WKB-B-SX9!M}j0OKQwV{jli5F7~pzX>v^Gx8&S5M*G}I^G*}e3PJ$ zkY5Lz)X`3Fc{jnjF;ju#IKdoVs-HQ_8Uz!Hpr^e0 z1kTz>xQs3 zmNL8Df37h?;sKL3T%NFC zK`Sow=Rl0`wk|jzU9^4v5&mZSKm_@tm>^+dhujA>Rpp{UovEt;ADAGzO5_!=rU6Ff z{Xu^fmn!>5y1oF4l|>N6IUU2sL<%Oz@i0|cgCIlI4=3o0QN@s9eFoG}#E&+a!U%#m z6R^xys=}M}xYdVff{KBB2E||rLcjsETz&|!VEv$|7_ylPTd_^h8^iJ&WOFCW%O*|{ z6!qh^Q?+QaCz1DB*o<*`@wIpsKod-X$Hjm6aHi3|SjS)iL4^*@qnHGls%@vE84M0y z!A|FkT{>#Mpr?srL~RWS#oKrYT0?3^uOIA-AYo22n3MFL)lvQ~V-aO_4t?+k2Y;}4 z`^|TNzV-MoarS|o3(vosM&kVb!5^%v8#C^9Ruw}}VyvyA*0sptFnsBBwi9Ig@Na)r zLv7xet1`MGh=&ta&YMktb7asLh7X;Mx~8Q5!6!+HbEi?n{=-LVd-{+3v-E(KM@$an)X;yoA%ce=apX})AG7Y*-tN>O2jr5q`t z@+Y5i>S?E+apqZPpL6bc=U-5bAk4X#TGCK{J~(@(;zA_gH`gz`=;BK*otwLC{f5iu zuDFsW$dE7RAgB$fkP)|;?ip9$s;jTL_PXnD*tl`irWH-gWmq_uhB^ z0}qbJ4?X+{O^~5gYkq=ejDh8qz`{WUp?``AKKj_>Pdxe5{L|y{c;T66NrH0KQJVzC zU4U5o^<4V=3opL(@+*JiSGTCR9`Rwc>31=G*VS|KZ1V2!`pCm2LTB5-Y)EX>t43?Tbs%jHu;50mB7%cI*oa=+A8gxx`wygL()g?ov3~#n002ovPDHLk FV1i8Zw)X%4 delta 2070 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 ArT_o{