mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-01 04:21:42 +00:00
## About The Pull Request Signals were initially only usable with component listeners, which while no longer the case has lead to outdated documentation, names, and a similar location in code. This pr pulls the two apart. Partially because mso thinks we should, but also because they really aren't directly linked anymore, and having them in this midstate just confuses people. [Renames comp_lookup to listen_lookup, since that's what it does](102b79694f) [Moves signal procs over to their own file](33d07d01fd) [Renames the PREQDELETING and QDELETING comsigs to drop the parent bit since they can hook to more then just comps now](335ea4ad08) [Does something similar to the attackby comsigs (PARENT -> ATOM)](210e57051d) [And finally passes over the examine signals](65917658fb) ## Why It's Good For The Game Code makes more sense, things are better teased apart, s just good imo ## Changelog 🆑 refactor: Pulled apart the last vestiges of names/docs directly linking signals to components /🆑
75 lines
3.0 KiB
Plaintext
75 lines
3.0 KiB
Plaintext
/**
|
|
* Deployable - Bring your big guns with you, and smack em' down where you want.
|
|
*
|
|
* Allows items to spawn other items (usually objects) in front of the user after a short delay.
|
|
* If attaching this to something:
|
|
* Set deploy_time to a number in seconds for the deploy delay
|
|
* Set thing_to_be_deployed to an obj path for the thing that gets spawned
|
|
* Lastly, set delete_on_use to TRUE or FALSE if you want the object you're deploying with to get deleted when used
|
|
*/
|
|
|
|
/datum/component/deployable
|
|
/// The time it takes to deploy the object
|
|
var/deploy_time = 5 SECONDS
|
|
/// The object that gets spawned if deployed successfully
|
|
var/obj/thing_to_be_deployed
|
|
/// Used in getting the name of the deployed object
|
|
var/deployed_name
|
|
/// If the item used to deploy gets deleted on use or not
|
|
var/delete_on_use = TRUE
|
|
|
|
/datum/component/deployable/Initialize(deploy_time, thing_to_be_deployed, delete_on_use)
|
|
. = ..()
|
|
if(!isitem(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
src.deploy_time = deploy_time
|
|
src.thing_to_be_deployed = thing_to_be_deployed
|
|
src.delete_on_use = delete_on_use
|
|
|
|
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine))
|
|
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_hand))
|
|
|
|
var/obj/item/typecast = thing_to_be_deployed
|
|
deployed_name = initial(typecast.name)
|
|
|
|
/datum/component/deployable/proc/examine(datum/source, mob/user, list/examine_list)
|
|
SIGNAL_HANDLER
|
|
|
|
examine_list += span_notice("[source.p_they()] look[source.p_s()] like [source.p_they()] can be deployed into \a [deployed_name].")
|
|
|
|
/datum/component/deployable/proc/on_attack_hand(datum/source, mob/user, location, direction)
|
|
SIGNAL_HANDLER
|
|
INVOKE_ASYNC(src, PROC_REF(deploy), source, user, location, direction)
|
|
|
|
/datum/component/deployable/proc/deploy(obj/source, mob/user, location, direction) //If there's no user, location and direction are used
|
|
var/obj/deployed_object //Used for spawning the deployed object
|
|
var/turf/deploy_location //Where our deployed_object gets put
|
|
var/new_direction //What direction do we want our deployed object in
|
|
if(user)
|
|
if(!ishuman(user))
|
|
return
|
|
|
|
deploy_location = get_step(user, user.dir) //Gets spawn location for thing_to_be_deployed if there is a user
|
|
if(deploy_location.is_blocked_turf(TRUE))
|
|
source.balloon_alert(user, "insufficient room to deploy here.")
|
|
return
|
|
new_direction = user.dir //Gets the direction for thing_to_be_deployed if there is a user
|
|
source.balloon_alert(user, "deploying...")
|
|
playsound(source, 'sound/items/ratchet.ogg', 50, TRUE)
|
|
if(!do_after(user, deploy_time))
|
|
return
|
|
else //If there is for some reason no user, then the location and direction are set here
|
|
deploy_location = location
|
|
new_direction = direction
|
|
|
|
deployed_object = new thing_to_be_deployed(deploy_location)
|
|
deployed_object.setDir(new_direction)
|
|
|
|
//Sets the integrity of the new deployed machine to that of the object it came from
|
|
deployed_object.modify_max_integrity(source.max_integrity)
|
|
deployed_object.update_icon_state()
|
|
|
|
if(delete_on_use)
|
|
qdel(source)
|