
//  version of the RGB Test example in the EAI spec


import java.awt.*;
import java.applet.*;
import vrml.external.field.*;
import vrml.external.Node;
import vrml.external.Browser;
import vrml.external.exception.*;

public class changepointdevue extends Applet {

  Browser browser = null;

   //######## Node material = null;
  Node vue = null;

   //######## EventInSFColor diffuseColor = null;
  EventInSFVec3f nouvellePosition = null;
  EventInSFRotation nouvelleOrientation = null;

  EventOutSFVec3f position = null;
  EventOutSFRotation orientation = null;


   //######## float[] color = new float[3];
  float[] dansquelleposition = new float[3];
  float[] dansquelledirection = new float[4];

  float[] dansquelleNouvelleposition = new float[3];
  float[] dansquelleNouvelledirection = new float[4];


/////////////////////////////////////////////////////////////////

  public void init() {
    // paint 2 simple Java buttons
    add(new Button("tourner à droite"));
    add(new Button("tourner à gauche"));

    // Add the output pane and the button to the Java Panel
    output = new TextArea(5, 40);
    add(output);
    add (getInfoButton = new Button("Where Am I ?"))

    // Get the handle to the VRML Browser.
    browser = Browser.getBrowser(this);

    // Initialize some VRML stuff
    initScene();
                       }

  /** Get reference to stuff in the VRML scene */
  public void initScene() {

    //######## // Get the material node...
    //######## material = browser.getNode("MAT");
    // Get the POINTDEVUE node...
    vue = browser.getNode("POINTDEVUE");
    System.out.println("ViewPoint Node " + vue + " found.");

   //########  // Get the diffuseColor EventIn
   //######## diffuseColor = (EventInSFColor) material.getEventIn("set_diffuseColor");
     // Get the nouvellePosition EventIn
    nouvellePosition  = (EventInSFVec3f) vue.getEventIn("set_position");
    // Get the nouvelleOrientation EventIn
    nouvelleOrientation = (EventInSFRotation) vue.getEventIn("set_orientation");

   //pour connaitre la position actuelle
    // Get the position EventOut
   position  = (EventInSFVec3f) vue.getEventOut("position_changed");

    // Get the orientation EventOut
   orientation = (EventInSFRotation) vue.getEventOut("orientation_changed");


  }
  
 
  public boolean action(Event event, Object what) {
  
   dansquelleposition = position.getValue();
   dansquelledirection = orientation.getValue();

    // handle Java user actions
    if (event.target instanceof Button)
      {
        Button b = (Button) event.target;

        //############# if (b.getLabel() == "Red")
        //#############    // user pressed on the red button
        if (b.getLabel() == "tourner à droite")
	// user pressed on the tourner à droite button
	  {
        //############# 	    color[0] = 0.8f; color[1] = 0.2f; color[2] = 0.2f;
                     // si la vue actuelle est vers le nord, on tourne à droite vers l'est
                     if (dansquelleposition[0] == 0 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 12)
                        {dansquelleNouvelleposition[0] = -2;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 10;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 1;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 4.7;
                        }
                     // si la vue actuelle est vers l'est, on tourne à droite vers le sud
                     else if (dansquelleposition[0] == -2 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 10)
                        {dansquelleNouvelleposition[0] = 0;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 8;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 1;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 3.14;
                        }
                     // si la vue actuelle est vers le sud, on tourne à droite vers l'ouest
                     else if (dansquelleposition[0] == 0 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 8)
                        {dansquelleNouvelleposition[0] = 2;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 10;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 1;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 1.56;
                        }
                     // si la vue actuelle est vers l'ouest, on tourne à droite vers le nord
                     else if (dansquelleposition[0] == 2 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 10)
                        {dansquelleNouvelleposition[0] = 0;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 12;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 0;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 0;

                        }
         //############# 	diffuseColor.setValue(color);
                     nouvellePosition.setValue(dansquelleNouvelleposition);    
                     nouvelleOrientation .setValue(dansquelleNouvelledirection);              
	  }

       //#############  else if (b.getLabel() == "Green")
        else if (b.getLabel() == "tourner à gauche")
	  {
      //############# color[0] = 0.2f; color[1] = 0.8f; color[2] = 0.2f;
                     // si la vue actuelle est vers le nord, on tourne à gauche vers l'ouest
                     if (dansquelleposition[0] == 0 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 12)
                        {dansquelleNouvelleposition[0] = 2;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 10;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 1;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 1.56;
                        }
                     // si la vue actuelle est vers l'ouest, on tourne à gauche vers le sud
                     else if (dansquelleposition[0] == 2 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 10)
                        {dansquelleNouvelleposition[0] = 0;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 8;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 1;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 3.14;
                        }
                     // si la vue actuelle est vers le sud, on tourne à gauche vers l'est
                     else if (dansquelleposition[0] == 0 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 10)
                        {dansquelleNouvelleposition[0] = -2;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 10;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 1;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 4.7;
                        }
                     // si la vue actuelle est vers l'est, on tourne à gauche vers le nord
                     else if (dansquelleposition[0] == -2 & dansquelleposition[1] == 2.3 & dansquelleposition[2] == 10)
                        {dansquelleNouvelleposition[0] = 0;
                         dansquelleNouvelleposition[1] = 2.3;
                         dansquelleNouvelleposition[2] = 12;
                         dansquelleNouvelledirection[0] = 0;
                         dansquelleNouvelledirection[1] = 0;
                         dansquelleNouvelledirection[2] = 0;
                         dansquelleNouvelledirection[3] = 0;
                        }

      //############# diffuseColor.setValue(color);
                     nouvellePosition.setValue(dansquelleNouvelleposition);   
                     nouvelleOrientation.setValue(dansquelleNouvelledirection);                              
	  }
            }
    return true;
  }
}
