@benev/nubs
Version:
user-input system for web games
23 lines (16 loc) • 696 B
text/typescript
import {V2} from "../../../tools/v2.js"
import {within_radius} from "./within_radius.js"
import {Basis} from "../../stick-graphic/types/basis.js"
import {find_closest_point_on_circle} from "./find_closest_point_on_circle.js"
export function calculate_new_vector_from_pointer_position(
{radius, rect: {left, top, width, height}}: Basis,
[client_x, client_y]: V2,
): V2 {
const middle_x = left + (width / 2)
const middle_y = top + (height / 2)
let new_vector: V2 = [(client_x - middle_x), (client_y - middle_y)]
if (!within_radius(radius, new_vector))
new_vector = find_closest_point_on_circle(radius, new_vector)
const [x, y] = new_vector
return [(x / radius), -(y / radius)]
}