diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm index ebe37bc9697..535ffed740e 100644 --- a/code/modules/admin/buildmode.dm +++ b/code/modules/admin/buildmode.dm @@ -4,7 +4,8 @@ #define THROW_BUILDMODE 4 #define AREA_BUILDMODE 5 #define COPY_BUILDMODE 6 -#define NUM_BUILDMODES 6 +#define AREAEDIT_BUILDMODE 7 +#define NUM_BUILDMODES 7 /obj/screen/buildmode icon = 'icons/misc/buildmode.dmi' @@ -128,11 +129,19 @@ var/varholder = "name" var/valueholder = "derp" var/objholder = /obj/structure/closet + var/area/storedarea = null + var/image/areaimage var/atom/movable/stored = null +/datum/click_intercept/buildmode/New(client/c) + ..() + areaimage = image('icons/turf/areas.dmi',null,"yellow") + holder.images += areaimage + /datum/click_intercept/buildmode/Destroy() stored = null Reset() + qdel(areaimage) ..() /datum/click_intercept/buildmode/create_buttons() @@ -188,6 +197,12 @@ user << "Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target" user << "Right Mouse Button on obj/mob = Select target to copy" user << "***********************************************************" + if(AREAEDIT_BUILDMODE) + user << "***********************************************************" + user << "Left Mouse Button on obj/turf/mob = Paint area" + user << "Right Mouse Button on obj/turf/mob = Select area to paint" + user << "Right Mouse Button on buildmode button = Create new area" + user << "***********************************************************" /datum/click_intercept/buildmode/proc/change_settings(mob/user) switch(mode) @@ -199,7 +214,7 @@ objholder = text2path(target_path) if(!ispath(objholder)) objholder = pick_closest_path(target_path) - if(!objholder) + if(!objholder || ispath(objholder, /area)) objholder = /obj/structure/closet alert("That path is not allowed.") else @@ -234,6 +249,20 @@ generator_path = type cornerA = null cornerB = null + if(AREAEDIT_BUILDMODE) + var/target_path = input(user,"Enter typepath:", "Typepath", "/area") + var/areatype = text2path(target_path) + if(ispath(areatype,/area)) + var/areaname = input(user,"Enter area name:", "Area name", "Area") + if(!areaname || !length(areaname)) + return + storedarea = new areatype + storedarea.power_equip = 0 + storedarea.power_light = 0 + storedarea.power_environ = 0 + storedarea.always_unpowered = 0 + storedarea.name = areaname + areaimage.loc = storedarea /datum/click_intercept/buildmode/proc/change_dir() switch(build_dir) @@ -257,6 +286,10 @@ /datum/click_intercept/buildmode/proc/Reset()//Reset temporary variables deselect_region() + if(mode == AREAEDIT_BUILDMODE) + areaimage.loc = storedarea + else + areaimage.loc = null /datum/click_intercept/buildmode/proc/select_tile(var/turf/T) return new /obj/effect/buildmode_reticule(T, holder) @@ -396,3 +429,14 @@ if(ismovableatom(object)) // No copying turfs for now. user << "[object] set as template." stored = object + if(AREAEDIT_BUILDMODE) + if(left_click) + if(!storedarea) + return + var/turf/T = get_turf(object) + if(get_area(T) != storedarea) + storedarea.contents.Add(T) + else if(right_click) + var/turf/T = get_turf(object) + storedarea = get_area(T) + areaimage.loc = storedarea diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index ca9d1fd05cc..3ac5c80d1a5 100644 Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ