Files
Yogstation/code/game/mecha/equipment/mecha_equipment.dm
Jamie D 10c9af0d77 Material datums - Moogle Helped - Check #10169 for more info (#10176)
* Hmm

* work please

* Fixes

* Ack

* REEE

* EEEE

* e

* e

* e

* STAND FIX

* Update code/game/machinery/autolathe.dm

Co-authored-by: Nichlas Pihl <nichlas00100@gmail.com>

* Update code/game/machinery/autolathe.dm

Co-authored-by: Nichlas Pihl <nichlas00100@gmail.com>

Co-authored-by: Nichlas Pihl <nichlas00100@gmail.com>
2020-10-28 17:53:59 +00:00

175 lines
5.5 KiB
Plaintext

//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
/obj/item/mecha_parts/mecha_equipment
name = "mecha equipment"
icon = 'icons/mecha/mecha_equipment.dmi'
icon_state = "mecha_equip"
force = 5
max_integrity = 300
var/equip_cooldown = 0 // cooldown after use
var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff)
var/energy_drain = 0
var/obj/mecha/chassis = null
var/range = MELEE //bitFflags
var/salvageable = 1
var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates
var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist.
var/destroy_sound = 'sound/mecha/critdestr.ogg'
/// Bitflag. Used by exosuit fabricator to assign sub-categories based on which exosuits can equip this.
var/mech_flags = NONE
/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page()
if(chassis)
send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
send_byjax(chassis.occupant,"exosuit.browser","equipment_menu",chassis.get_equipment_menu(),"dropdowns")
return 1
return
/obj/item/mecha_parts/mecha_equipment/proc/update_equip_info()
if(chassis)
send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",get_equip_info())
return 1
return
/obj/item/mecha_parts/mecha_equipment/Destroy()
if(chassis)
chassis.equipment -= src
if(chassis.selected == src)
chassis.selected = null
src.update_chassis_page()
log_message("[src] is destroyed.", LOG_MECHA)
if(chassis.occupant)
chassis.occupant_message("<span class='danger'>[src] is destroyed!</span>")
chassis.occupant.playsound_local(chassis, destroy_sound, 50)
chassis = null
return ..()
/obj/item/mecha_parts/mecha_equipment/try_attach_part(mob/user, obj/mecha/M)
if(can_attach(M))
if(!user.temporarilyRemoveItemFromInventory(src))
return FALSE
attach(M)
user.visible_message("[user] attaches [src] to [M].", "<span class='notice'>You attach [src] to [M].</span>")
return TRUE
to_chat(user, "<span class='warning'>You are unable to attach [src] to [M]!</span>")
return FALSE
/obj/item/mecha_parts/mecha_equipment/proc/get_equip_info()
if(!chassis)
return
var/txt = "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span>&nbsp;"
if(chassis.selected == src)
txt += "<b>[src.name]</b>"
else if(selectable)
txt += "<a href='?src=[REF(chassis)];select_equip=[REF(src)]'>[src.name]</a>"
else
txt += "[src.name]"
return txt
/obj/item/mecha_parts/mecha_equipment/proc/is_ranged()//add a distance restricted equipment. Why not?
return range&RANGED
/obj/item/mecha_parts/mecha_equipment/proc/is_melee()
return range&MELEE
/obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target)
if(!target)
return 0
if(!chassis)
return 0
if(!equip_ready)
return 0
if(energy_drain && !chassis.has_charge(energy_drain))
return 0
if(chassis.is_currently_ejecting)
return 0
if(chassis.equipment_disabled)
to_chat(chassis.occupant, "<span=warn>Error -- Equipment control unit is unresponsive.</span>")
return 0
return 1
/obj/item/mecha_parts/mecha_equipment/proc/action(atom/target)
return 0
/obj/item/mecha_parts/mecha_equipment/proc/start_cooldown()
set_ready_state(0)
chassis.use_power(energy_drain)
addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown)
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target)
if(!chassis)
return
var/C = chassis.loc
set_ready_state(0)
chassis.use_power(energy_drain)
. = do_after(chassis.occupant, equip_cooldown, target=target)
set_ready_state(1)
if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir))
return 0
/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, delay)
if(!chassis)
return
var/C = chassis.loc
. = do_after(chassis.occupant, delay, target=target)
if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir))
return 0
/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M)
if(M.equipment.len<M.max_equip)
return 1
/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M)
M.equipment += src
chassis = M
forceMove(M)
log_message("[src] initialized.", LOG_MECHA)
update_chassis_page()
return
/obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null)
moveto = moveto || get_turf(chassis)
if(src.Move(moveto))
chassis.equipment -= src
if(chassis.selected == src)
chassis.selected = null
update_chassis_page()
log_message("[src] removed from equipment.", LOG_MECHA)
chassis = null
set_ready_state(1)
return
/obj/item/mecha_parts/mecha_equipment/Topic(href,href_list)
if(href_list["detach"])
detach()
/obj/item/mecha_parts/mecha_equipment/proc/set_ready_state(state)
equip_ready = state
if(chassis)
send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info())
return
/obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message)
if(chassis)
chassis.occupant_message("[icon2html(src, chassis.occupant)] [message]")
return
/obj/item/mecha_parts/mecha_equipment/log_message(message, message_type=LOG_GAME, color=null, log_globally)
if(chassis)
chassis.log_message("ATTACHMENT: [src] [message]", message_type, color)
else
..()
//Used for reloading weapons/tools etc. that use some form of resource
/obj/item/mecha_parts/mecha_equipment/proc/rearm()
return 0
/obj/item/mecha_parts/mecha_equipment/proc/needs_rearm()
return 0