From 387b4b236c31a864e49989b7440fdddcfa7b6c41 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 7 Jan 2024 00:37:16 -0300 Subject: [PATCH] push --- code/__DEFINES/hud.dm | 3 + code/game/atoms.dm | 5 ++ code/game/objects/effects/decals/misc.dm | 15 ---- code/game/objects/items.dm | 6 +- code/modules/mob/mob.dm | 21 ----- code/modules/point/point.dm | 110 +++++++++++++++++++++++ icons/effects/effects.dmi | Bin 911008 -> 911521 bytes tgstation.dme | 1 + 8 files changed, 122 insertions(+), 39 deletions(-) create mode 100644 code/modules/point/point.dm diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 88cba1c449..9c161c0a5f 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -7,3 +7,6 @@ #define ui_borg_pda_send "CENTER+5:21,SOUTH:5" // To the right of the alert panel #define ui_borg_pda_log "CENTER+6:21,SOUTH:5" + +/// The filter name for the hover outline +#define HOVER_OUTLINE_FILTER "hover_outline" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c72b4f7b60..eac9f75a94 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1356,6 +1356,11 @@ if(filter_data && filter_data[name]) return filters[filter_data.Find(name)] +/// 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) + /atom/proc/remove_filter(name_or_names) if(!filter_data) return diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 752a5dff2c..fe216c0623 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/mob/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 - loc = get_turf(src) // We don't want to actualy trigger anything when it moves - 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 4440b3f91a..a43b893b6f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -922,13 +922,13 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) . = ..() - remove_filter("hover_outline") //get rid of the hover effect in case the mouse exit isn't called if someone drags and drops an item and somthing goes wrong + remove_filter(HOVER_OUTLINE_FILTER) //get rid of the hover effect in case the mouse exit isn't called if someone drags and drops an item and somthing goes wrong /obj/item/MouseExited(location, control, params) SEND_SIGNAL(src, COMSIG_ITEM_MOUSE_EXIT, location, control, params) deltimer(usr.client.tip_timer) //delete any in-progress timer if the mouse is moved off the item before it finishes closeToolTip(usr) - remove_filter("hover_outline") + remove_filter(HOVER_OUTLINE_FILTER) /obj/item/proc/apply_outline(outline_color = null) if(get(src, /mob) != usr || QDELETED(src) || isobserver(usr)) //cancel if the item isn't in an inventory, is being deleted, or if the person hovering is a ghost (so that people spectating you don't randomly make your items glow) @@ -955,7 +955,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(color) outline_color = COLOR_WHITE //if the item is recolored then the outline will be too, let's make the outline white so it becomes the same color instead of some ugly mix of the theme and the tint - add_filter("hover_outline", 1, list("type" = "outline", "size" = 1, "color" = outline_color)) + add_filter(HOVER_OUTLINE_FILTER, 1, list("type" = "outline", "size" = 1, "color" = outline_color)) // Called when a mob tries to use the item as a tool. // Handles most checks. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f80866d97e..0399b2bacb 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -369,27 +369,6 @@ var/msg = "[src] makes eye contact with you." addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, examined_mob, msg), 3) -//same as above -//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 fov_view()) - set name = "Point To" - set category = "Object" - - if(!src || !isturf(src.loc) || !(A in view(src.loc))) - return FALSE - if(istype(A, /obj/effect/temp_visual/point)) - return FALSE - - var/tile = get_turf(A) - if (!tile) - return FALSE - - new /obj/effect/temp_visual/point(A,invisibility) - SEND_SIGNAL(src, COMSIG_MOB_POINTED, A) - return TRUE - /mob/proc/can_resist() return FALSE //overridden in living.dm diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm new file mode 100644 index 0000000000..cfadf391c5 --- /dev/null +++ b/code/modules/point/point.dm @@ -0,0 +1,110 @@ +#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/mob/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/mob/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/target as mob|obj|turf in fov_view()) + set name = "Point To" + set category = "Object" + + if(client && !(target in view(client.view, src))) + return FALSE + if(istype(target, /obj/effect/temp_visual/point)) + return FALSE + + point_at(target) + + SEND_SIGNAL(src, COMSIG_MOB_POINTED, target) + return TRUE diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index be99d57a3d70c72e31761b10e343635da616871a..8334c83224bcb26878283ffe6b6fdeba73349c80 100644 GIT binary patch delta 11734 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 diff --git a/tgstation.dme b/tgstation.dme index 50ff9eba35..61929f6089 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3175,6 +3175,7 @@ #include "code\modules\plumbing\plumbers\reaction_chamber.dm" #include "code\modules\plumbing\plumbers\splitters.dm" #include "code\modules\plumbing\plumbers\synthesizer.dm" +#include "code\modules\point\point.dm" #include "code\modules\pool\pool_controller.dm" #include "code\modules\pool\pool_drain.dm" #include "code\modules\pool\pool_effects.dm"