08-04-2020, 09:35 PM
(06-04-2020, 07:39 PM)Meraxes a écrit : Tu peux utiliser la fonction make_interval() :Génial! J'ai repris toute mes fonctions ou j'utilisais mon concat avec ta solution :] Je suis content d'avoir un truc plus joli pour cette partie là qui me chagrinais depuis le début.
Code :SELECT NOW() - make_interval(mins := :hunt_speed) FROM ...
Code :SELECT NOW() + make_interval(0,0,0,0,0,:dev_duration, :index_{$index} * :offset) FROM ...
J'ai codé mes premières fonctions SQL pour le jeu aujourd'hui:
Une première pour généré un nombre aléatoire. Facile mais nécessaire pour la seconde qui génères un point aléatoirement dans une zone autour d'un autre point donnée en saisissant une distance max:
CREATE OR REPLACE FUNCTION public.random_between(low integer, high integer)
RETURNS integer
LANGUAGE plpgsql
STRICT
AS $function$
BEGIN
RETURN floor(random()* (high-low + 1) + low);
END;
$function$
;
CREATE OR REPLACE FUNCTION public.random_point_around(target_point geometry, expand_size integer)
RETURNS geometry
LANGUAGE plpgsql
AS $function$
DECLARE
point_x INTEGER := ST_X(target_point);
point_y INTEGER := ST_Y(target_point);
random_x INTEGER := random_between(point_x - expand_size, point_x + expand_size);
random_y INTEGER := random_between(point_y - expand_size, point_y + expand_size);
begin
RETURN ST_GeomFromText(CONCAT('POINT(', random_x, ' ', random_y, ')'), 4326);
END; $function$
;