Files
Paradise/code/game/objects/items/devices/painter/floor_painter.dm
Custodi e766a767ce Add wide mode for modular painter & fix for decal painter (#28760)
* Fix painter

* Add wide mode for painter
Fix decal overlaying

* Rebuild tgui
2025-03-27 22:18:04 +00:00

104 lines
4.1 KiB
Plaintext

// Floor painter
/datum/painter/floor
module_name = "floor painter"
module_state = "floor_painter"
var/floor_icon = 'icons/turf/floors.dmi'
var/floor_state = "floor"
var/floor_dir = SOUTH
var/wide_mode = FALSE
var/static/list/allowed_states = list("arrival", "arrivalcorner", "bar", "barber", "bcircuit", "black", "blackcorner", "blue", "bluecorner",
"bluefull", "bluered", "blueyellow", "blueyellowfull", "bot", "brown", "browncorner", "browncornerold", "brownfull", "cafeteria", "caution",
"cautioncorner", "cautionfull", "chapel", "cmo", "dark", "delivery", "escape", "escapecorner", "floor", "floorgrime", "freezerfloor", "gcircuit",
"green", "greenblue", "greenbluefull", "greencorner", "greenfull", "greenyellow", "greenyellowfull", "grimy", "hydrofloor", "loadingarea", "neutral",
"neutralcorner", "neutralfull", "orange", "orangecorner", "orangefull", "purple", "purplecorner", "purplefull", "rcircuit", "rampbottom", "ramptop", "red",
"redblue", "redbluefull", "darkredblue", "darkredbluefull", "redcorner", "redfull", "redgreen", "redgreenfull", "darkredgreen", "darkredgreenfull",
"redyellow", "redyellowfull", "darkredyellow", "darkredyellowfull", "warning", "warningcorner", "warnwhite", "warnwhitecorner", "white",
"whiteblue", "whitebluecorner", "whitebluefull", "whitebot", "whitecorner", "whitedelivery", "whitegreen", "whitegreencorner", "whitegreenfull", "whitehall",
"whitepurple", "whitepurplecorner", "whitepurplefull", "whitered", "whiteredcorner", "whiteredfull", "whiteyellow", "whiteyellowcorner", "whiteyellowfull",
"yellow", "yellowcorner", "yellowcornersiding", "yellowsiding", "darkpurple", "darkpurplecorners", "darkpurplefull",
"darkred", "darkredcorners", "darkredfull", "darkblue", "darkbluecorners", "darkbluefull", "darkgreen", "darkgreencorners",
"darkgreenfull", "darkyellow", "darkyellowcorners", "darkyellowfull", "darkbrown", "darkbrowncorners", "darkbrownfull")
/datum/painter/floor/paint_atom(atom/target, mob/user)
if(!istype(target, /turf/simulated/floor/plasteel))
to_chat(user, "<span class='warning'>[holder] can only be used on station flooring.</span>")
return
var/turf/simulated/floor/plasteel/F = target
if(!wide_mode && F.icon_state == floor_state && F.dir == floor_dir)
to_chat(user, "<span class='notice'>This is already painted [floor_state] [dir2text(floor_dir)]!</span>")
return
F.icon_state = floor_state
F.icon_regular_floor = floor_state
F.dir = floor_dir
if(wide_mode)
var/turf/simulated/floor/plasteel/tileList = F.AdjacentTurfs(TRUE, FALSE, FALSE)
for(var/turf/simulated/floor/plasteel/T in tileList)
T.icon_state = floor_state
T.icon_regular_floor = floor_state
T.dir = floor_dir
return TRUE
/datum/painter/floor/pick_color(mob/user)
if(!user)
return
ui_interact(user)
/datum/painter/floor/ui_state(mob/user)
return GLOB.inventory_state
/datum/painter/floor/ui_interact(mob/user, datum/tgui/ui = null)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "FloorPainter", module_name)
// Disable automatic updates, because we are the only user of the item, and don't expect to observe external changes
ui.set_autoupdate(FALSE)
ui.open()
/datum/painter/floor/ui_data(mob/user)
var/list/data = list()
data["selectedStyle"] = floor_state
data["selectedDir"] = floor_dir
data["wideMode"] = wide_mode
return data
/datum/painter/floor/ui_static_data(mob/user)
var/list/data = list()
data["icon"] = floor_icon
data["availableStyles"] = allowed_states
return data
/datum/painter/floor/ui_act(action, params)
if(..())
return
if(action == "select_style")
var/new_style = params["style"]
if(allowed_states.Find(new_style) != 0)
floor_state = new_style
if(action == "cycle_style")
var/index = allowed_states.Find(floor_state)
index += text2num(params["offset"])
while(index < 1)
index += length(allowed_states)
while(index > length(allowed_states))
index -= length(allowed_states)
floor_state = allowed_states[index]
if(action == "select_direction")
var/dir = params["direction"]
if(dir != 0)
floor_dir = dir
if(action == "wide_mode")
wide_mode = !wide_mode
return TRUE