Adds pixel-precise pointing (#22250)

* precise pointing yes

* smh
This commit is contained in:
AMyriad
2024-07-01 06:40:09 +02:00
committed by GitHub
parent 2ccd715299
commit 0c6dd4b327
2 changed files with 28 additions and 7 deletions

View File

@@ -83,7 +83,7 @@
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["middle"])
ShiftMiddleClickOn(A)
ShiftMiddleClickOn(A, params)
return
if(modifiers["shift"] && modifiers["ctrl"])
CtrlShiftClickOn(A)
@@ -385,8 +385,8 @@
A.CtrlShiftClick(src)
return
/mob/proc/ShiftMiddleClickOn(atom/A)
src.pointed(A)
/mob/proc/ShiftMiddleClickOn(atom/A, params)
src.pointed(A, params)
return
/atom/proc/CtrlShiftClick(mob/user)

View File

@@ -7,7 +7,7 @@
*
* Not intended as a replacement for the mob verb
*/
/atom/movable/proc/point_at(atom/pointed_atom)
/atom/movable/proc/point_at(atom/pointed_atom, params = "" as text, mob/M)
if(!isturf(loc))
return
@@ -22,7 +22,28 @@
var/turf/our_tile = get_turf(src)
var/obj/visual = new /obj/effect/temp_visual/point(our_tile, invisibility)
/// Set position
var/final_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x
var/final_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y
var/list/click_params = params2list(params)
if(!length(click_params) || !click_params["screen-loc"])
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 = 0.17 SECONDS, easing = EASE_OUT)
return
else
var/list/actual_view = getviewsize(M.client ? M.client.view : world.view)
var/list/split_coords = splittext(click_params["screen-loc"], ",")
final_x = (text2num(splittext(split_coords[1], ":")[1]) - actual_view[1] / 2) * world.icon_size + (text2num(splittext(split_coords[1], ":")[2]) - world.icon_size)
final_y = (text2num(splittext(split_coords[2], ":")[1]) - actual_view[2] / 2) * world.icon_size + (text2num(splittext(split_coords[2], ":")[2]) - world.icon_size)
//
/// Set rotation
var/matrix/rotated_matrix = new()
var/matrix/old_visual = visual.transform
rotated_matrix.TurnTo(0, get_pixel_angle(-final_y, -final_x))
visual.transform = rotated_matrix
//
animate(visual, pixel_x = final_x, pixel_y = final_y, time = 1.7, easing = EASE_OUT, transform = old_visual)
/atom/movable/proc/create_point_bubble(atom/pointed_atom)
var/mutable_appearance/thought_bubble = mutable_appearance(
@@ -96,7 +117,7 @@
*
* 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())
/mob/verb/pointed(atom/A as mob|obj|turf in view(), params = "" as text)
set name = "Point To"
set category = "Object"
@@ -105,7 +126,7 @@
if(istype(A, /obj/effect/temp_visual/point))
return FALSE
point_at(A)
point_at(A, params, usr)
SEND_SIGNAL(src, COMSIG_MOB_POINTED, A)
return TRUE