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 edb635e7f2e..d744824c91d 100644 Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ