Je ne sais pas vraiment ou devrais-je poster ce topic, c'est plutôt adapté à une parti du genre "calcules", mais je n'ai rien trouvé du genre
Je programme sur un jeu un 2D qui est libre de source (donc le jeu n'est pas le miens) et quelque par dans ces codes... il y'a une formule pour calculer la position d'un projectile, certains projectile ont des courbures.
J'ai créé des bots dans le serveur que j'ai programmé moi même, les bots (pour ceux qui ne le savent pas) ont une intelligence artificielle écrite par le programmeur (donc dans ce cas, par moi). Ils ne font qu'exécuter ce qui est écrit dans les codes, donc ils ne peuvent pas faire ce qui n'est pas écrit.
Mon problème : ces bots aussi utilise des armes, si la courbure est de 0 pour l'arme en question, il n'y a aucun problème car c'est une ligne droite, donc la position cible du bot sera la position du joueur (puisque c'est une ligne droite).
Mais quand il y'a une courbure... ça se complique. Si il y'a une courbure et que je donne en paramètre au bot la position du joueur le plus proche, il va tirer, mais le projectile ne va pas aller tout droit, de ce fait le bot ne touche pas le joueur !
Pour ceux qui maîtrisent un peu la programmation, il existe des objets "vec2" pour définir une position (donc un vec2 contient un float en x et un float en y).
Si la courbure est de 0, la direction du projectile sera la position du joueur. Par exemple :
- Code: Tout sélectionner
vec2 Direction = pChar->m_Pos;
Pour ce qui est des courbures, les programmeurs du jeu ont déjà écrit la formule pour "faire bouger" la projectile, voici le code :
- Code: Tout sélectionner
vec2 CalcPos(vec2 Pos, vec2 Velocity, float Curvature, float Speed, float Time)
{
vec2 n;
Time *= Speed;
n.x = Pos.x + Velocity.x*Time;
n.y = Pos.y + Velocity.y*Time + Curvature/10000*(Time*Time);
return n;
}
Ce qui se traduit par :
On déclare un objet de type vec2 (position) appelé n.
On multiplie le temps donné en argument de la fonction par la vitesse
La position x de n sera "la position x de Pos qui est donné en argument de la fonction + la vélocité donné en argument de la fonction * le temps donné en argument de la fonction". (Les règles de mathématiques sont respectées dans les codes, donc les multiplications sont effectués avant les additions, tout comme les divisions.)
La position y de n sera "la position y de Pos + la vélocité * le temps + la courbure / 10 000 * le temps au carré.
Ce que j'ai besoin d'obtenir, c'est ce fameux temps. Je peux obtenir facilement la position (c'est la position du projectile), la vélocité et la vitesse, mais pas le temps. Donc il me faudrait (je ne sais absolument pas comment, c'est d'ailleurs pour ça que je viens poster ici...) un calcule, un moyen d'obtenir ce fameux temps.
Le temps qui est donné en argument de cette fonction, c'est la différence entre le moment actuel et le moment le projectile a été tiré.
Petite information : j'ai bel et bien essayé de résoudre ce problème avant de poster ici, mais c'est un peu... un peu trop compliqué
Merci d'avance !!
