From 3a90cfeef6f832a63196d7355ad73289b723372b Mon Sep 17 00:00:00 2001 From: Skies-Of-Blue <86762641+Skies-Of-Blue@users.noreply.github.com> Date: Tue, 5 Sep 2023 14:04:08 -0700 Subject: [PATCH] Ports 'Ports 'Pointing at something on yourself now shows the item'' (#2290) ## About The Pull Request Ports https://github.com/BeeStation/BeeStation-Hornet/pull/8553, which is in turn a port of https://github.com/tgstation/tgstation/pull/68642 ## Why It's Good For The Game Good for rp, allows you to visually show off items without relying on chat. Previous to this, it visually looked like you were pointing to yourself, which could very easily lead to confusion. ## Changelog :cl: add: pointing at something on yourself now shows the item /:cl: --- code/__DEFINES/dcs/signals.dm | 3 +- code/__DEFINES/hud.dm | 2 + code/game/atoms.dm | 5 ++ code/game/objects/effects/decals/misc.dm | 15 ---- code/game/objects/items.dm | 10 +-- code/modules/mob/mob.dm | 33 ------- code/modules/point/point.dm | 107 +++++++++++++++++++++++ icons/effects/effects.dmi | Bin 901005 -> 901435 bytes shiptest.dme | 1 + 9 files changed, 120 insertions(+), 56 deletions(-) create mode 100644 code/modules/point/point.dm diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 6a07aec4084e..bda73339bff8 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -381,7 +381,8 @@ ///from base of mob/swap_hand(): (obj/item) #define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" #define COMPONENT_BLOCK_SWAP (1<<0) - +///from base of /mob/verb/pointed: (atom/A) +#define COMSIG_MOB_POINTED "mob_pointed" ///from base of mob/living/resist() (/mob/living) #define COMSIG_LIVING_RESIST "living_resist" ///from base of mob/living/look_up() (/mob/living) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 9753c6ae1556..10e7951462c2 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -9,6 +9,8 @@ /// Used in show_hud(); Please ensure this is the same as the maximum index. #define HUD_VERSIONS 3 +#define HOVER_OUTLINE_FILTER "hover_outline" + //1:1 HUD layout stuff #define UI_BOXCRAFT "EAST-4:22,SOUTH+1:6" #define UI_BOXAREA "EAST-4:6,SOUTH+1:6" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8dc9e5700733..38ee90a32674 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1516,6 +1516,11 @@ custom_material.on_applied(src, materials[custom_material] * multiplier * material_modifier, material_flags) custom_materials[custom_material] += materials[x] * multiplier +/// Returns the indice in filters of the given filter name. +/// If it is not found, returns null. +/atom/proc/get_filter_index(name) + return filter_data?.Find(name) + /** * Returns true if this atom has gravity for the passed in turf * diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index d8570a7bb490..5f84386668f2 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -1,18 +1,3 @@ -/obj/effect/temp_visual/point - name = "pointer" - icon = 'icons/hud/screen_gen.dmi' - icon_state = "arrow" - layer = POINT_LAYER - duration = 25 - -/obj/effect/temp_visual/point/Initialize(mapload, set_invis = 0) - . = ..() - var/atom/old_loc = loc - abstract_move(get_turf(src)) - pixel_x = old_loc.pixel_x - pixel_y = old_loc.pixel_y - invisibility = set_invis - //Used by spraybottles. /obj/effect/decal/chempuff name = "chemicals" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2153f2cd993d..df43d20fecdc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -882,15 +882,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb colour = COLOR_BLUE_GRAY else colour = COLOR_BLUE_GRAY - if(outline_filter) - filters -= outline_filter - outline_filter = filter(type="outline", size=1, color=colour) - filters += outline_filter + add_filter(HOVER_OUTLINE_FILTER, 1, list(type="outline", size=1, color=colour)) + /obj/item/proc/remove_outline() - if(outline_filter) - filters -= outline_filter - outline_filter = null + remove_filter(HOVER_OUTLINE_FILTER) /// Called when a mob tries to use the item as a tool.Handles most checks. /obj/item/proc/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 022e02a763a5..d5e26b6aef3f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -565,39 +565,6 @@ var/msg = "[src] makes eye contact with you." addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, examined_mob, msg), 3) -/** - * Point at an atom - * - * mob verbs are faster than object verbs. See - * [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716) - * for why this isn't atom/verb/pointed() - * - * note: ghosts can point, this is intended - * - * visible_message will handle invisibility properly - * - * overridden here and in /mob/dead/observer for different point span classes and sanity checks - */ -/mob/verb/pointed(atom/A as mob|obj|turf in view()) - set name = "Point To" - set category = "Object" - - if(!src || !isturf(src.loc)) - return FALSE - if(client && !(A in view(client.view, src))) - return FALSE - if(istype(A, /obj/effect/temp_visual/point)) - return FALSE - - var/turf/tile = get_turf(A) - if (!tile) - return FALSE - - var/turf/our_tile = get_turf(src) - var/obj/visual = new /obj/effect/temp_visual/point(our_tile, invisibility) - animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, time = 1.7, easing = EASE_OUT) - - return TRUE ///Can this mob resist (default FALSE) /mob/proc/can_resist() diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm new file mode 100644 index 000000000000..8e311c339fde --- /dev/null +++ b/code/modules/point/point.dm @@ -0,0 +1,107 @@ +#define POINT_TIME (2.5 SECONDS) + +/** + * Point at an atom + * + * Intended to enable and standardise the pointing animation for all atoms + * + * Not intended as a replacement for the mob verb + */ +/atom/movable/proc/point_at(atom/pointed_atom) + if(!isturf(loc)) + return + + if (pointed_atom in src) + create_point_bubble(pointed_atom) + return + + var/turf/tile = get_turf(pointed_atom) + if (!tile) + return + + var/turf/our_tile = get_turf(src) + var/obj/visual = new /obj/effect/temp_visual/point(our_tile, invisibility) + + animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) + +/atom/movable/proc/create_point_bubble(atom/pointed_atom) + var/obj/effect/thought_bubble_effect = new + + var/mutable_appearance/thought_bubble = mutable_appearance( + 'icons/effects/effects.dmi', + "thought_bubble", + layer = POINT_LAYER, + appearance_flags = KEEP_APART, + ) + + var/mutable_appearance/pointed_atom_appearance = new(pointed_atom.appearance) + pointed_atom_appearance.blend_mode = BLEND_INSET_OVERLAY + pointed_atom_appearance.plane = thought_bubble.plane + pointed_atom_appearance.layer = FLOAT_LAYER + pointed_atom_appearance.pixel_x = 0 + pointed_atom_appearance.pixel_y = 0 + thought_bubble.overlays += pointed_atom_appearance + + var/hover_outline_index = pointed_atom.get_filter_index(HOVER_OUTLINE_FILTER) + if (!isnull(hover_outline_index)) + pointed_atom_appearance.filters.Cut(hover_outline_index, hover_outline_index + 1) + + thought_bubble.pixel_x = 16 + thought_bubble.pixel_y = 32 + thought_bubble.alpha = 200 + thought_bubble.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + + var/mutable_appearance/point_visual = mutable_appearance( + 'icons/hud/screen_gen.dmi', + "arrow", + plane = thought_bubble.plane, + ) + + thought_bubble.overlays += point_visual + + // vis_contents is used to preserve mouse opacity + thought_bubble_effect.appearance = thought_bubble + vis_contents += thought_bubble_effect + + QDEL_IN(thought_bubble_effect, POINT_TIME) + +/obj/effect/temp_visual/point + name = "pointer" + icon = 'icons/hud/screen_gen.dmi' + icon_state = "arrow" + layer = POINT_LAYER + duration = POINT_TIME + +/obj/effect/temp_visual/point/Initialize(mapload, set_invis = 0) + . = ..() + var/atom/old_loc = loc + abstract_move(get_turf(src)) + pixel_x = old_loc.pixel_x + pixel_y = old_loc.pixel_y + invisibility = set_invis + +#undef POINT_TIME + +/** + * Point at an atom + * + * mob verbs are faster than object verbs. See + * [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716) + * for why this isn't atom/verb/pointed() + * + * note: ghosts can point, this is intended + * + * visible_message will handle invisibility properly + * + * overridden here and in /mob/dead/observer for different point span classes and sanity checks + */ +/mob/verb/pointed(atom/A as mob|obj|turf in view()) + set name = "Point To" + set category = "Object" + if(client && !(A in view(client.view, src))) + return FALSE + if(istype(A, /obj/effect/temp_visual/point)) + return FALSE + point_at(A) + SEND_SIGNAL(src, COMSIG_MOB_POINTED, A) + return TRUE diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 372a8c71aaf66f5aca34c719c5f6330660dc0abc..610c8768cd752866735cb2c59d435e7b976871d9 100644 GIT binary patch delta 13694 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

!Sj$Gf$`Ne44q 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 wE=LBv@ZIRrJvfd7e}Sc|=