La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 01/11/2024 11:42:39


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 19/04/2006 18:33:50 Sujet du message : Fonctions de positions d'objets par rapport à d'autre

ces fonctions permettent de vous faire gagner du temps en calcul en tous genre pour positionner par exemple, un objet par rapport à un autre, faire aller un PNJ à un endroit precis en rapport à tel objet, positionner deux placeables etc.
On peut aussi encore améliorer pour pouvoir jouer indépendamment sur l'un des deux axes x et y. Ainsi on pourrait placer une lampe sur un bureau etc via script n'importe ou sur une meme map.
Excusez moi par contre, il s'agit des versions non commentées.

1 - pour placer un objet en face d'un autre à une certaine distance
ex : je m'en sert pour placer la cible (waypoint) d'une arme de siege

On peut meme envisager de faire pivoter l'objet par rapport à l'autre (alpha).

Code :

location DirectVersObjet (object oObjet, float nDistance
, float nHauteur, float alpha)
{
vector v = GetPosition (oObjet);
float angle = GetFacing(oObjet);
float sinA = sin(angle);
float cosA = cos(angle);
if (nHauteur == 0.0 && v.z != 0.0)
nHauteur = v.z+0.1;
vector v0 = Vector(v.x*cosA,v.y*sinA, nHauteur);
v0 = VectorNormalize(v0);
vector v1 = Vector(v0.x+v.x, v0.y+v.y,nHauteur);
vector vF = Vector(nDistance*cosA+v1.x,nDistance*sinA+v1.y,nHauteur);
float beta = angle + alpha;
if (beta>360.0) beta-360.0;
location lLocObjet = Location(GetArea(oObjet), vF, beta);
return lLocObjet;
}


Remarque : veuillez noter lla ligne :
Code :
 if (nHauteur == 0.0 && v.z != 0.0)
nHauteur = v.z+0.1;

ce passage est un debug pour les tilsets qui ont une hauteur de plus de zero au sol^^.
ça marche très bien et ça permet de faire apparaitre un placeable sur un rempart.

2 - meme chose mais par rapport à un lieu (peut servir lorsqu'on se sert d'un item qui pointe un endroit precis et pas un objet)

Code :

//////////////////////////////////////////////////////
location DirectVersLieu (location lTarget, float nDistance
, float nHauteur, float alpha)
{
vector v = GetPositionFromLocation(lTarget);
float angle = GetFacingFromLocation(lTarget);
float sinA = sin(angle);
float cosA = cos(angle);
if (nHauteur == 0.0 && v.z != 0.0)
nHauteur = v.z+0.1;
vector v0 = Vector(v.x*cosA,v.y*sinA, nHauteur);
v0 = VectorNormalize(v0);
vector v1 = Vector(v0.x+v.x, v0.y+v.y,nHauteur);
vector vF = Vector(nDistance*cosA+v1.x,nDistance*sinA+v1.y,nHauteur);
float beta = angle + alpha;
if (beta>360.0) beta-360.0;
location lLocObjet = Location(GetAreaFromLocation(lTarget), vF, beta);
return lLocObjet;
}


3 - là c'est lorsque l'on veut amener un objet à se deplacer vers un autre
(PJ et PNJ)
Parfois il faut faire objetA, objetB parfois le contraire pour que ça marche
Mais après test ça marche très bien^^

Code :

////////////////////////////////////////////////////////
location ObjetaVersObjetb (object ObjetA, object ObjetB, float nDistance)
{
    vector vObjetA = GetPosition(ObjetA);
    vector vObjetB = GetPosition(ObjetB);
    vector vDelta = (vObjetA - vObjetB);
    float Delta = VectorToAngle(vDelta);

    if(Delta > 360.0) Delta -= 360.0;
    if(Delta <   0.0) Delta += 360.0;

vector vPos = GetPosition(ObjetA);
vPos.x =vPos.x + nDistance * cos(Delta);
vPos.y =vPos.y + nDistance * sin(Delta);
location lLocA = Location(GetArea(ObjetA), vPos,GetFacing(ObjetB));
return lLocA;
}



voilà à noter que j'ai été fortement inspiré par des choses que j'ai vu dans les trajectoires d'armes de siège (me rappelle plus qui l'a fait mais je vous promet de regarder et d'editer)
ainsi que par Azmathiel (c peut etre lui aussi d'ailleurs lol)

voir aussi ce topic sur JOL :

[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 21/04/2006 10:16:00 Sujet du message :

Salut !
Ces scripts sont très intéressants !

Je me permets juste une suggestion :
Il y a un message de L'érudit qui s'appelle : " Fonctions utiles"
Il serait peut-être bien de regrouper celles-ci avec celles-là !
Ainsi, on pourrait faciliter la recherche ^^

Mais bon, si j'ai un peu de temps, je vais essayer de faire un message en forme de sommaire, afin d'avoir une liste de "scripts types" de façon organisées.


A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 21/04/2006 15:54:41 Sujet du message :

je sais mais bon c'est un peu le souk ce regroupement je trouve pour s'y retrouver, alors qu'un post par script ou fonction comme ça se fait ailleurs c'est quand meme plus simple.
Il faudrait en fait un forum pour les scripts et fonctions à poster et un autre pour les questions. Là un seul topic de regroupage ça sature vite.

J'y ai fait un tour et g vite abandonné personnellement:oops:
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 40.701ms