Bonjour,
je vais essayer d'etre clair ...
Ca y est le
gravity raydium gun marche.
Plein de paramètres sont à affiner mais le principe est la.
Pour le moment c'est implanté comme suit:
sur activation création d'un ray
ode avec comme data
-1 et nom pas un pointeur sur l'élement.
la fonction raydium_ode_near_callback est un peu modifiée pour ne pas traiter les élement à
-1 et appelle une autre fonction qui rempli des variables globales avec l'élément touché, distance ect.
1) Ce n'est pas propre du tout. Je sais
2) Pour l'implanter proprement:
Peu de modifs
On crée un nouveau type d'element RAYDIUM_MOUSE_PICK
Cet element de génère pas de collision c'est juste un support pour un rayon.
Le callback ode met a jour position et orientation (du rayon)
le callback de collision rempli la structure ray de l'élément donc quasiment aucune modif du code.
3) Plus de modifs
On crée des fonction de picking spécifiques.
raydium_pick_create
-> crée le rayon en objet ode avec un magic number pour data (-1 ou 0)
raydium_pick_delete
-> détruit le rayon, plus de surchare dans le code de collision.
raydium_pick_get_name
-> retourne le nom de l'objet pointé
raydium_pick_get
-> retourne l'id de l'objet pointé
raydium_pick_origin
-> défini l'origine de ray de picking (camera par defaut) mais pourquoi pas un objet (joueur pour le gravity gun)
raydium_pick_aim
-> point de visé, curseur souris principalement, mais aussi valeur fixe
4) inconvénient que je vois:
encore des variables globales
dépendance avec ode accrue
modification du callback des des collisions
5) Qu'est ce qu'il te semble etre le plus viable a long terme?
Le plus facile à prendre en main ?
6) J'ai du mal a voir les problèmes pour s'adapter à l'objet du type player
Comment gérer les vues à la troisième personne ?
A+
Jacques
P.S.
7) J'ai un très gros doute:
ligne 3679 d'ode.c
Code:
contact[i].geom.g1=raydium_ode_element[e1->id].geom;
e1 contient deja un pointeur sur raydium_ode_element[id] non ?
du coup e1->geom devrais suffire
