Forum du serveur Computercraft FR
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

[Précisions] Yaw (lacet), orientation

Aller en bas

[Précisions] Yaw (lacet), orientation Empty [Précisions] Yaw (lacet), orientation

Message par skypop Lun 26 Sep - 2:41

"Yaw" ou "lacet" en français, est l'angle qui permet de déterminer l'orientation Nord-Est-Sud-Ouest (du moins, dans le contexte de Minecraft)

à priori, c'est une propriété que plusieurs entités peuvent avoir (mob par exemple), bien que je ne l'ai expérimenté que pour déterminer l'orientation d'un joueur, par l’intermédiaire de l'EntityDetector et sa fonction getPlayerDetail() (mod: Life is Peripheral)

Or il y a un petit piège bien fourbe si l'on compte employer cette donnée, et on passe facilement à côté.
La valeur de yaw varie entre -360 et +360, mais si on fait le test simplement, on pourrait facilement croire que cette valeur ne varie que de 0 à +360, sinon de 0 à -360.

Peut être est-ce lié à l'orientation de départ (ou à la connexion)
Si vous tournez dans le sens des aiguilles d'une montre, la valeur sera positive, et bouclera de 360 à 0, 360, 0 etc.
Si vous tournez dans le sens inverse, la valeur sera négative et bouclera de -360 à 0, -360, 0 etc.

Si par exemple, vous faites 4 tours dans le sens des aiguilles d'une montre, puis deux tours en sens inverse, la valeur reste positive. Si vous faites 3 tours de plus dans le sens inverse des aiguilles d'une montre, la valeur bascule dans le négatif...

Pour ne pas se faire avoir :
N'exploitez pas directement la valeur de Yaw. Utilisez son modulo de 360, ainsi la valeur sera toujours positive.
Code:
ed = peripheral.find("EntityDetector")
player = ed.getPlayerDetail("skypop")
angle = player.skypop.yaw%360  -- Yaw modulo 360

if angle >= 45 and angle < 135 then
  print("facing West")
elseif angle >= 135 and angle < 225 then
  print("Facing North")
elseif angle >= 225 and angle < 315 then
  print("Facing East")
else
  print("Facing South")
end

Pour info et grosso-modo : "modulo" est une opération qui consiste à retourner le reste d'une division. Sa valeur est toujours positive. On l'écrit avec le caractère "%", et c'est très pratique pour des tas de trucs.
Code:
print( 61 % 60 ) -- 1
print( 72 % 60 ) -- 12
print( 6025 % 60 ) -- 25

print( 15 % 60 ) -- 15
print( -15 % 60 ) -- 45
skypop
skypop

Messages : 95
Date d'inscription : 25/07/2016

Revenir en haut Aller en bas

Revenir en haut


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