mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-16 20:52:33 +00:00
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
64 lines
3.0 KiB
Plaintext
64 lines
3.0 KiB
Plaintext
/datum/buildmode_mode/advanced
|
|
key = "advanced"
|
|
var/atom/objholder = null
|
|
|
|
// FIXME: add logic which adds a button displaying the icon
|
|
// of the currently selected path
|
|
|
|
/datum/buildmode_mode/advanced/show_help(client/c)
|
|
to_chat(c, "<span class='notice'>***********************************************************</span>")
|
|
to_chat(c, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
|
|
to_chat(c, "<span class='notice'>Left Mouse Button + alt on turf/obj = Copy object type</span>")
|
|
to_chat(c, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
|
|
to_chat(c, "<span class='notice'>Right Mouse Button = Delete objects</span>")
|
|
to_chat(c, "")
|
|
to_chat(c, "<span class='notice'>Use the button in the upper left corner to</span>")
|
|
to_chat(c, "<span class='notice'>change the direction of built objects.</span>")
|
|
to_chat(c, "<span class='notice'>***********************************************************</span>")
|
|
|
|
/datum/buildmode_mode/advanced/change_settings(client/c)
|
|
var/target_path = input(c, "Enter typepath:", "Typepath", "/obj/structure/closet")
|
|
objholder = text2path(target_path)
|
|
if(!ispath(objholder))
|
|
objholder = pick_closest_path(target_path)
|
|
if(!objholder)
|
|
alert("No path was selected")
|
|
return
|
|
else if(ispath(objholder, /area))
|
|
objholder = null
|
|
alert("That path is not allowed.")
|
|
return
|
|
|
|
/datum/buildmode_mode/advanced/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)
|
|
|
|
if(left_click && alt_click)
|
|
if (istype(object, /turf) || istype(object, /obj) || istype(object, /mob))
|
|
objholder = object.type
|
|
to_chat(c, "<span class='notice'>[initial(object.name)] ([object.type]) selected.</span>")
|
|
else
|
|
to_chat(c, "<span class='notice'>[initial(object.name)] is not a turf, object, or mob! Please select again.</span>")
|
|
else if(left_click)
|
|
if(ispath(objholder,/turf))
|
|
var/turf/T = get_turf(object)
|
|
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)
|
|
log_admin("Build Mode: [key_name(c)] modified [A]'s [COORD(A)] dir to [BM.build_dir]")
|
|
else
|
|
to_chat(c, "<span class='warning'>Select object type first.</span>")
|
|
else if(right_click)
|
|
if(isobj(object))
|
|
log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]")
|
|
qdel(object)
|