Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIRROR] Refactor renaming UNIQUE_RENAME items from the pen to an element #2849

Merged
merged 1 commit into from
Apr 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
#define MAX_CHARTER_LEN 80
#define MAX_PLAQUE_LEN 144
#define MAX_LABEL_LEN 64
#define MAX_DESC_LEN 280

// Audio/Visual Flags. Used to determine what sense are required to notice a message.
#define MSG_VISUAL (1<<0)
Expand Down
4 changes: 2 additions & 2 deletions code/__DEFINES/traits/sources.dm
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,8 @@

/// Trait from an organ being inside a bodypart
#define ORGAN_INSIDE_BODY_TRAIT "organ_inside_body"
/// Trait when something was labelled by a pen.
#define PEN_LABEL_TRAIT "pen_label"
/// Trait when something was labelled by the /datum/element/tool_renaming element.
#define RENAMING_TOOL_LABEL_TRAIT "renaming_tool_label"

/// Trait when a drink was renamed by a shaker
#define SHAKER_LABEL_TRAIT "shaker_trait"
78 changes: 78 additions & 0 deletions code/datums/elements/tool_renaming.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#define OPTION_RENAME "Rename"
#define OPTION_DESCRIPTION "Description"
#define OPTION_RESET "Reset"

/**
* Renaming tool element
*
* When using this tool on an object with UNIQUE_RENAME,
* lets the user rename/redesc it.
*/
/datum/element/tool_renaming

/datum/element/tool_renaming/Attach(datum/target)
. = ..()
if(!isitem(target))
return ELEMENT_INCOMPATIBLE

RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(attempt_rename))

/datum/element/tool_renaming/Detach(datum/source)
. = ..()
UnregisterSignal(source, COMSIG_ITEM_INTERACTING_WITH_ATOM)

/datum/element/tool_renaming/proc/attempt_rename(datum/source, mob/living/user, atom/interacting_with, list/modifiers)
SIGNAL_HANDLER

if(!isobj(interacting_with))
return NONE

var/obj/renamed_obj = interacting_with

if(!(renamed_obj.obj_flags & UNIQUE_RENAME))
return NONE

INVOKE_ASYNC(src, PROC_REF(async_rename), user, renamed_obj)
return ITEM_INTERACT_SUCCESS

/datum/element/tool_renaming/proc/async_rename(mob/living/user, obj/renamed_obj)
var/custom_choice = tgui_input_list(user, "What would you like to edit?", "Customization", list(OPTION_RENAME, OPTION_DESCRIPTION, OPTION_RESET))
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj) || isnull(custom_choice))
return

switch(custom_choice)
if(OPTION_RENAME)
var/old_name = renamed_obj.name
var/input = tgui_input_text(user, "What do you want to name [renamed_obj]?", "Object Name", "[old_name]", MAX_NAME_LEN)
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj))
return
if(input == old_name || !input)
to_chat(user, span_notice("You changed [renamed_obj] to... well... [renamed_obj]."))
return
renamed_obj.AddComponent(/datum/component/rename, input, renamed_obj.desc)
to_chat(user, span_notice("You have successfully renamed \the [old_name] to [renamed_obj]."))
ADD_TRAIT(renamed_obj, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT)
renamed_obj.update_appearance(UPDATE_NAME)

if(OPTION_DESCRIPTION)
var/old_desc = renamed_obj.desc
var/input = tgui_input_text(user, "Describe [renamed_obj]", "Description", "[old_desc]", MAX_DESC_LEN)
if(QDELETED(renamed_obj) || !user.can_perform_action(renamed_obj))
return
if(input == old_desc || !input)
to_chat(user, span_notice("You decide against changing [renamed_obj]'s description."))
return
renamed_obj.AddComponent(/datum/component/rename, renamed_obj.name, input)
to_chat(user, span_notice("You have successfully changed [renamed_obj]'s description."))
ADD_TRAIT(renamed_obj, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT)
renamed_obj.update_appearance(UPDATE_DESC)

if(OPTION_RESET)
qdel(renamed_obj.GetComponent(/datum/component/rename))
to_chat(user, span_notice("You have successfully reset [renamed_obj]'s name and description."))
REMOVE_TRAIT(renamed_obj, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT)
renamed_obj.update_appearance(UPDATE_NAME | UPDATE_DESC)

#undef OPTION_RENAME
#undef OPTION_DESCRIPTION
#undef OPTION_RESET
49 changes: 1 addition & 48 deletions code/modules/paperwork/pen.dm
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
dart_insert_projectile_icon_state, \
CALLBACK(src, PROC_REF(get_dart_var_modifiers))\
)
AddElement(/datum/element/tool_renaming)
RegisterSignal(src, COMSIG_DART_INSERT_ADDED, PROC_REF(on_inserted_into_dart))
RegisterSignal(src, COMSIG_DART_INSERT_REMOVED, PROC_REF(on_removed_from_dart))

Expand Down Expand Up @@ -209,54 +210,6 @@
log_combat(user, M, "stabbed", src)
return TRUE

/obj/item/pen/afterattack(obj/O, mob/living/user, proximity)
. = ..()

if (!proximity)
return .

. |= AFTERATTACK_PROCESSED_ITEM

//Changing name/description of items. Only works if they have the UNIQUE_RENAME object flag set
if(isobj(O) && (O.obj_flags & UNIQUE_RENAME))
var/penchoice = tgui_input_list(user, "What would you like to edit?", "Pen Setting", list("Rename", "Description", "Reset"))
if(QDELETED(O) || !user.can_perform_action(O))
return
if(penchoice == "Rename")
var/input = tgui_input_text(user, "What do you want to name [O]?", "Object Name", "[O.name]", MAX_NAME_LEN)
var/oldname = O.name
if(QDELETED(O) || !user.can_perform_action(O))
return
if(input == oldname || !input)
to_chat(user, span_notice("You changed [O] to... well... [O]."))
else
O.AddComponent(/datum/component/rename, input, O.desc)
to_chat(user, span_notice("You have successfully renamed \the [oldname] to [O]."))
ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT)
O.update_appearance(UPDATE_ICON)

if(penchoice == "Description")
var/input = tgui_input_text(user, "Describe [O]", "Description", "[O.desc]", 280)
var/olddesc = O.desc
if(QDELETED(O) || !user.can_perform_action(O))
return
if(input == olddesc || !input)
to_chat(user, span_notice("You decide against changing [O]'s description."))
else
O.AddComponent(/datum/component/rename, O.name, input)
to_chat(user, span_notice("You have successfully changed [O]'s description."))
ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT)
O.update_appearance(UPDATE_ICON)

if(penchoice == "Reset")
if(QDELETED(O) || !user.can_perform_action(O))
return

qdel(O.GetComponent(/datum/component/rename))
to_chat(user, span_notice("You have successfully reset [O]'s name and description."))
REMOVE_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT)
O.update_appearance(UPDATE_ICON)

/obj/item/pen/get_writing_implement_details()
return list(
interaction_mode = MODE_WRITING,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
/obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change(datum/reagents/holder, ...)
. = ..()
if(!length(reagents.reagent_list))
REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) //so new drinks can rename the glass
REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT) //so new drinks can rename the glass

// Having our icon state change removes fill thresholds
/obj/item/reagent_containers/cup/glass/drinkingglass/on_cup_change(datum/glass_style/style)
Expand All @@ -58,7 +58,7 @@
return

REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, SHAKER_LABEL_TRAIT)
REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT)
REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, RENAMING_TOOL_LABEL_TRAIT)
name = initial(name)
desc = initial(desc)
update_appearance(UPDATE_NAME | UPDATE_DESC)
Expand Down
1 change: 1 addition & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -1595,6 +1595,7 @@
#include "code\datums\elements\tenacious.dm"
#include "code\datums\elements\tiny_mob_hunter.dm"
#include "code\datums\elements\tool_flash.dm"
#include "code\datums\elements\tool_renaming.dm"
#include "code\datums\elements\toy_talk.dm"
#include "code\datums\elements\turf_transparency.dm"
#include "code\datums\elements\undertile.dm"
Expand Down
Loading