Les Voltigeurs d'URU LIVE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Cartes Pokémon 151 : où trouver le ...
Voir le deal

Déplacer sur soi ou sur un objet un autre objet déplaçable

Aller en bas

Déplacer sur soi ou sur un objet un autre objet déplaçable Empty Déplacer sur soi ou sur un objet un autre objet déplaçable

Message  V@-Michel Jeu 12 Juil - 10:07

Nous avons vu dans le sujet "placer d'Arche de Kerath dans son Relto", comment il était possible de placer à un endroit précis un objet d'un fichier prp, de modifier sa taille et sa direction.
Dans le même ordre d'idée voici comment placer à l'emplacement occupé par un avatar (ou à côté de lui) ou à l'emplacement d'un autre objet, un objet appartenant à une prp chargée.
J'insiste bien sur le fait que le fichier prp auquel l'objet du décor(sceneobject) appartient doit être, au préalable chargé par la commande Insere() ci-dessous.
D'autre part, je vous rappelle que tous les objets ne sont pas déplaçables (voir article consacré à l'Arche dans le Relto)

Voici donc le module utilisé.

Code:
 
from Plasma import *
 
def Insere(morceauage='',vrai=True):
    """Insère ou retire un morceau d'âge prp dans l'âge courant"""
    if vrai==True:
        PtConsoleNet('Nav.PageInNode '+ morceauage ,1)
    else:
        PtConsoleNet('Nav.PageOutNode '+ morceauage ,1)


def ObjetSur (nomobj='', ageobj='', nomrecept='moi', agerecept=PtGetAgeName(), tx=0.0,ty=0.0,tz=3.0) :
    """Deplace un objet nomobj sur un autre nomrecept avec un décallage de coordonnées tx,ty,tz"""
    if nomrecept == 'moi':
      Robj = PtGetLocalAvatar()
    else :
      Robj = PtFindSceneobject (nomrecept, agerecept)
    obj = PtFindSceneobject (nomobj, ageobj)
    CentreRobj = Robj.getLocalToWorld()
    vect = ptVector3 (tx,ty,tz)
    CentreRobj.translate (vect)
    obj.draw.netForce(1)
    obj.draw.enable(1)
    obj.physics.netForce(1)
    obj.physics.warp (CentreRobj)
    obj.physics.enable(1)

Explications.
Prenons un exemple concret.
Je souhaite obtenir, dans mon Relto, le ballon de plage qui se trouve dans le quartier.

L'objet se trouvre dans l'âge Neighborhood, dans le fichier prp nb01 et son nom est BeachBall. Je m'assure qu'il est bien déplaçable en regardant la fenêtre des coordonnées.

Ce ballon, je vais le placer dans la hutte de mon Relto. Il faut que le point où il va se placer possède des coordonnées. Le point où l'avatar arrive lorsqu'il utilise son livre de liaison ou lorsqu'il chute dans une zone de panique fera l'affaire. En effet, il faut savoir que tous ces points de téléportation, qu'on appelle en anglais Spawnpoints, possèdent des coordonnées, sinon notre avatar ne pourrait jamais s'y rendre Razz . Le point de téléportation dans la hutte s'appelle LinkInPointCloset. Il existe deux autres points de téléportation dans le Relto : celui où l'on arrive quand on charge le jeu près du ponton : LinkInPointDefault et celui près des piliers où l'on peut voir la faille se former : LinkInPointBahroPoles.

Donc, le ballon de plage va se positionner dans l'âge Personal, au point LinkInPointCloset.

Il nous suffit de taper l'instruction :
ObjetSur ("BeachBall", "Neighborhood", "LinkInPointCloset", "Personal", 0, 0, 0) et nous aurons le ballon dans la hutte du Relto cheers
Nous pouvons même jouer avec lui car dans ma fonction, en toute dernière ligne j'ai placé l'instruction obj.physics.enable (1) qui attribue à l'objet ses qualités physiques qu'il possède habituellement. S'il n'a pas de qualités physiques, il ne bougera pas et vous pourrez même passer au travers de lui (comme l'Arche de Kerath par exemple).
Si vous souhaitez que l'objet placé ne bouge pas, il suffit d'enlever cette ligne d'instruction.

Quels autres objets du quartier est-il possible de déplacer ? Tous ceux que vous pouvez déplacer habituellement dans le quartier Laughing :

Le ballon de plage : BeachBall
Certains cônes oranges : OrangeCone01 (et 04,05,11,12,15,16,17)
les boules de couleurs : 'MarblePhy01 (et 02,03,04,06,07,08)
Les citrouilles : Pumpkin01, Pumpkin02

deux objets sans caractère physique:
le support de l'horloge : nbClockBase
la pierre de liaison vers la ville privée : BahroRockBook

A quoi servent les coordonnées tx,ty,tz ?
Elles permettent de décaller le point de déplacement de l'objet téléporté à une certaine distance x,y,z du point de chute choisi.
Par exemple, si j'avais tapé ObjetSur ("BeachBall", "Neighborhood", "LinkInPointCloset", "Personal", 0, 0, 5), le ballon serait apparu à 5 unités au-dessus du spawnpoint.
tx pour un décallage gauche-droite, ty pour un décallage avant-arrière et tz pour un décallage haut-bas

Comment faire pour que l'objet soit téléporté sur moi ?
C'est très simple. Au lieu de taper le nom de l'endroit où il doit arriver, vous tapez "moi". Comme pour dire qu'il doit venir sur moi.Very Happy
Vous pouvez également utiliser les coordonnées de décallage. Si vous les laissez à 0, l'objet va se positionner au centre de l'avatar et si cet objet a un caratère physique, il va rebondir contre l'avatar et continuer sa course comme si vous lui aviez donné un coup de pied !
Remarquez que j'ai fais en sorte que si vous ne mettez pas l'endroit où l'objet doit se positionner, il viendra automatiquement sur vous. Ainsi, il suffit juste de taper :ObjetSur ("BeachBall", "Neighborhood") pour que le ballon soit téléporté là où votre avatar se trouve Wink

En résumé, vous pouvez déplacer un objet de tout âge vers un autre objet de tout âge pour autant que :
les deux objets soient déplaçables (voir coordonnées des sceneobjects ) et que les prp qui les contiennent soient chargés.
L'avatar est considéré comme un sceneobject et possède les coordonnées qu'il occupe par rapport au centre de l'âge dans lequel il s'est téléporté.
Etant donné que lorsque l'avatar se téléporte vers un autre âge, il garde avec lui les prp chargés, les objets qui ont été déplacés le seront aussi dans ce nouvel âge.

Particularité.
Reprenons notre exemple du ballon de plage. Si vous le touchez, il va rouler et rebondir contre les objets "en dur" du Relto. Et s'il passe par-dessus le ponton, il va aller en zone panique. Il va réapparaître au-dessus de l'endroit où il a disparu, c'est-à-dire dans le vide. Que faut-il faire ? Tout simplement rappeler la fonction qui l'a placé sur le sol:) .

Déplacer sur soi ou sur un objet un autre objet déplaçable Kiimag53
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Déplacer sur soi ou sur un objet un autre objet déplaçable Empty Re: Déplacer sur soi ou sur un objet un autre objet déplaçable

Message  V@-Michel Jeu 12 Juil - 16:32

Petite mais importante modification à la fonction ObjetSur()

J'ai un peu amélioré la fonction de façon à modifier la taille de l'objet que l'on importe. Voici son code :

Code:
 
def ObjetSur(nomobj='',ageobj='',nomrecept='moi',agerecept=PtGetAgeName(), [b]taille=1[/b], tx=0.0,ty=0.0,tz=3.0):
"""Deplace un objet nomobj sur un autre nomrecept avec un décallage de coordonnées tx,ty,tz et dont la taille est multipliée par taille"""

if nomrecept=='moi':
Robj = PtGetLocalAvatar()
else :
Robj = PtFindSceneobject (nomrecept,agerecept)
obj = PtFindSceneobject(nomobj,ageobj)
CentreRobj = Robj.getLocalToWorld()
vect = ptVector3(tx,ty,tz)
CentreRobj.translate(vect)
scale=ptMatrix44()
scale.makeScaleMat(ptVector3(taille,taille,taille))
obj.draw.netForce(1)
obj.draw.enable(1)
obj.physics.netForce(1)
obj.physics.warp(CentreRobj * scaleù)
obj.physics.enable(1)

Vous voyez qu'il y a une valeur en plus dans les paramètres de cette commande, c'est le paramètre taille qui a, par défaut la valeur 1 (taille normale).
Si vous voulez que l'objet téléporté soit 10 fois plus grand que l'original, mettez 10 comme valeur taille et si vous voulez qu'il aie 10% de sa taille normale, mettez 0.10.
Regardez ici, la photo, l'Urwin a 5 % de sa taille normale (valeur 0.05):

Déplacer sur soi ou sur un objet un autre objet déplaçable Kiimag54

Et celle-ci vous montre qu'ainsi, il a la même taille que mon avatar Very Happy

Déplacer sur soi ou sur un objet un autre objet déplaçable Kiimag55

Age : Negilahn
Prp : Jungle
Objet : Urwin_Root

Commandes :
Insere('Jungle')
puis :
ObjetSur('Urwin_Root','Negilahn','moi','Personal',0.05,0,0,0)

Une dernière, avec cette fois, en plus, le singe grandeur nature:
Déplacer sur soi ou sur un objet un autre objet déplaçable Kiimag56

Age : Negilahn
Prp : Jungle

Objet : TempMonkeyHandle

Commande :
ObjetSur('TempMonkeyHandle','Negilahn','moi','Personal',1,0,0,0)
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum