Files
Bubberstation/code/modules/buildmode/submodes/area_edit.dm
Fikou f4699372a6 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
2021-04-26 16:30:05 -07:00

77 lines
2.9 KiB
Plaintext

/datum/buildmode_mode/area_edit
key = "areaedit"
use_corner_selection = TRUE
var/area/storedarea
var/image/areaimage
/datum/buildmode_mode/area_edit/New()
areaimage = image('icons/turf/areas.dmi', null, "yellow")
..()
/datum/buildmode_mode/area_edit/enter_mode(datum/buildmode/BM)
BM.holder.images += areaimage
/datum/buildmode_mode/area_edit/exit_mode(datum/buildmode/BM)
areaimage.loc = null // de-color the area
BM.holder.images -= areaimage
return ..()
/datum/buildmode_mode/area_edit/Destroy()
QDEL_NULL(areaimage)
storedarea = null
return ..()
/datum/buildmode_mode/area_edit/show_help(client/c)
to_chat(c, "<span class='notice'>***********************************************************</span>")
to_chat(c, "<span class='notice'>Left Mouse Button on obj/turf/mob = Select corner</span>")
to_chat(c, "<span class='notice'>Left Mouse Button + Alt on turf/obj/mob = Paint area/span>")
to_chat(c, "<span class='notice'>Right Mouse Button on obj/turf/mob = Select area to paint</span>")
to_chat(c, "<span class='notice'>Right Mouse Button on buildmode button = Create new area</span>")
to_chat(c, "<span class='notice'>***********************************************************</span>")
/datum/buildmode_mode/area_edit/change_settings(client/c)
var/target_path = input(c, "Enter typepath:", "Typepath", "/area")
var/areatype = text2path(target_path)
if(ispath(areatype,/area))
var/areaname = input(c, "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 // color our area
/datum/buildmode_mode/area_edit/handle_click(client/c, params, object)
var/list/modifiers = params2list(params)
if(LAZYACCESS(modifiers, LEFT_CLICK))
if(!storedarea)
to_chat(c, "<span class='warning'>Configure or select the area you want to paint first!</span>")
return
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].")