Files
Bubberstation/code/modules/power/lighting/light_construct.dm
SkyratBot b2cc74a77e [MIRROR] Fixes layering issues brought by the FoV PR. [MDB IGNORE] (#11411)
* Fixes layering issues brought by the FoV PR.

* Update code/__DEFINES/layers.dm

* Update code/modules/mob/living/living_defines.dm

* Update code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
2022-02-10 02:51:52 +00:00

168 lines
5.5 KiB
Plaintext

/obj/structure/light_construct
name = "light fixture frame"
desc = "A light fixture under construction."
icon = 'icons/obj/lighting.dmi'
icon_state = "tube-construct-stage1"
anchored = TRUE
layer = WALL_OBJ_LAYER
plane = GAME_PLANE_UPPER
max_integrity = 200
armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 80, ACID = 50)
///Light construction stage (LIGHT_CONSTRUCT_EMPTY, LIGHT_CONSTRUCT_WIRED, LIGHT_CONSTRUCT_CLOSED)
var/stage = LIGHT_CONSTRUCT_EMPTY
///Type of fixture for icon state
var/fixture_type = "tube"
///Amount of sheets gained on deconstruction
var/sheets_refunded = 2
///Reference for light object
var/obj/machinery/light/new_light = null
///Reference for the internal cell
var/obj/item/stock_parts/cell/cell
///Can we support a cell?
var/cell_connectors = TRUE
/obj/structure/light_construct/Initialize(mapload, ndir, building)
. = ..()
if(building)
setDir(ndir)
/obj/structure/light_construct/Destroy()
QDEL_NULL(cell)
return ..()
/obj/structure/light_construct/get_cell()
return cell
/obj/structure/light_construct/examine(mob/user)
. = ..()
switch(stage)
if(LIGHT_CONSTRUCT_EMPTY)
. += "It's an empty frame."
if(LIGHT_CONSTRUCT_WIRED)
. += "It's wired."
if(LIGHT_CONSTRUCT_CLOSED)
. += "The casing is closed."
if(cell_connectors)
if(cell)
. += "You see [cell] inside the casing."
else
. += "The casing has no power cell for backup power."
else
. += span_danger("This casing doesn't support power cells for backup power.")
/obj/structure/light_construct/attack_hand(mob/user, list/modifiers)
if(!cell)
return
user.visible_message(span_notice("[user] removes [cell] from [src]!"), span_notice("You remove [cell]."))
user.put_in_hands(cell)
cell.update_appearance()
cell = null
add_fingerprint(user)
/obj/structure/light_construct/attack_tk(mob/user)
if(!cell)
return
to_chat(user, span_notice("You telekinetically remove [cell]."))
var/obj/item/stock_parts/cell/cell_reference = cell
cell = null
cell_reference.forceMove(drop_location())
return cell_reference.attack_tk(user)
/obj/structure/light_construct/attackby(obj/item/tool, mob/user, params)
add_fingerprint(user)
if(istype(tool, /obj/item/stock_parts/cell))
if(!cell_connectors)
to_chat(user, span_warning("This [name] can't support a power cell!"))
return
if(HAS_TRAIT(tool, TRAIT_NODROP))
to_chat(user, span_warning("[tool] is stuck to your hand!"))
return
if(cell)
to_chat(user, span_warning("There is a power cell already installed!"))
return
if(user.temporarilyRemoveItemFromInventory(tool))
user.visible_message(span_notice("[user] hooks up [tool] to [src]."), \
span_notice("You add [tool] to [src]."))
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
tool.forceMove(src)
cell = tool
add_fingerprint(user)
return
if(istype(tool, /obj/item/light))
to_chat(user, span_warning("This [name] isn't finished being setup!"))
return
switch(stage)
if(LIGHT_CONSTRUCT_EMPTY)
if(tool.tool_behaviour == TOOL_WRENCH)
if(cell)
to_chat(user, span_warning("You have to remove the cell first!"))
return
to_chat(user, span_notice("You begin deconstructing [src]..."))
if (tool.use_tool(src, user, 30, volume=50))
new /obj/item/stack/sheet/iron(drop_location(), sheets_refunded)
user.visible_message(span_notice("[user.name] deconstructs [src]."), \
span_notice("You deconstruct [src]."), span_hear("You hear a ratchet."))
playsound(src, 'sound/items/deconstruct.ogg', 75, TRUE)
qdel(src)
return
if(istype(tool, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/coil = tool
if(coil.use(1))
icon_state = "[fixture_type]-construct-stage2"
stage = LIGHT_CONSTRUCT_WIRED
user.visible_message(span_notice("[user.name] adds wires to [src]."), \
span_notice("You add wires to [src]."))
else
to_chat(user, span_warning("You need one length of cable to wire [src]!"))
return
if(LIGHT_CONSTRUCT_WIRED)
if(tool.tool_behaviour == TOOL_WRENCH)
to_chat(usr, span_warning("You have to remove the wires first!"))
return
if(tool.tool_behaviour == TOOL_WIRECUTTER)
stage = LIGHT_CONSTRUCT_EMPTY
icon_state = "[fixture_type]-construct-stage1"
new /obj/item/stack/cable_coil(drop_location(), 1, "red")
user.visible_message(span_notice("[user.name] removes the wiring from [src]."), \
span_notice("You remove the wiring from [src]."), span_hear("You hear clicking."))
tool.play_tool_sound(src, 100)
return
if(tool.tool_behaviour == TOOL_SCREWDRIVER)
user.visible_message(span_notice("[user.name] closes [src]'s casing."), \
span_notice("You close [src]'s casing."), span_hear("You hear screwing."))
tool.play_tool_sound(src, 75)
switch(fixture_type)
if("tube")
new_light = new /obj/machinery/light/built(loc)
if("bulb")
new_light = new /obj/machinery/light/small/built(loc)
new_light.setDir(dir)
transfer_fingerprints_to(new_light)
if(!QDELETED(cell))
new_light.cell = cell
cell.forceMove(new_light)
cell = null
qdel(src)
return
return ..()
/obj/structure/light_construct/blob_act(obj/structure/blob/attacking_blob)
if(attacking_blob && attacking_blob.loc == loc)
qdel(src)
/obj/structure/light_construct/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
new /obj/item/stack/sheet/iron(loc, sheets_refunded)
qdel(src)
/obj/structure/light_construct/small
name = "small light fixture frame"
icon_state = "bulb-construct-stage1"
fixture_type = "bulb"
sheets_refunded = 1