Exemplo n.º 1
0
        private int PerformHipnotize(int currentState, object o)
        {
            TextBoxStreamWriter.DefaultLog.WriteLine("HAL9000-> PerformHypnotize state reached.");

            t_SPGENHypnoSpeech   = new Thread(new ThreadStart(SPGENHypnoSpeech));
            t_ARMSHypnoMovements = new Thread(new ThreadStart(ARMSHypnoMovements));
            t_HEADHypnoMovements = new Thread(new ThreadStart(HEADHypnoMovements));

            //to allow threads execution
            hypnoSpeechFinished = false;

            //introduction to hypno show
            cmdMan.SPG_GEN_shutup(1000);
            this.brain.SayAsync("I will try to hipnotize you.");
            Thread.Sleep(1000);
            this.brain.SayAsync("Look straight to my pendulum.");
            Thread.Sleep(1000);

            //move both arms to navigation
            moveActiveArms(SMConfiguration.ARMS_navigation, 10000);
            //move left arm to hypno
            moveOneArm(SMConfiguration.ARMS_hypnoc, 1, 10000);

            //Launch the thread to move asynchronous the robot's arms (hypno left and right)
            t_ARMSHypnoMovements.Start();
            while (!t_ARMSHypnoMovements.IsAlive)
            {
                ;
            }
            //Launch the threads to move asynchronous the robot's head ("circular" movement)
            t_HEADHypnoMovements.Start();
            while (!t_HEADHypnoMovements.IsAlive)
            {
                ;
            }
            //Launch the thread to asynchronously play the speech
            t_SPGENHypnoSpeech.Start();
            while (!t_SPGENHypnoSpeech.IsAlive)
            {
                ;
            }

            if (t_SPGENHypnoSpeech.IsAlive)
            {
                t_SPGENHypnoSpeech.Join();
            }
            if (t_HEADHypnoMovements.IsAlive)
            {
                t_HEADHypnoMovements.Join();
            }
            if (t_ARMSHypnoMovements.IsAlive)
            {
                t_ARMSHypnoMovements.Join();
            }

            //send the arms back to navigation and home
            moveActiveArms(SMConfiguration.ARMS_navigation, 10000);
            moveActiveArms(SMConfiguration.ARMS_home, 10000);

            //look at the human face
            cmdMan.HEAD_lookat(SMConfiguration.HEAD_lookToFace.pan, SMConfiguration.HEAD_lookToFace.tilt, 2000);

            this.brain.SayAsync("now you are under my control!!!");
            Thread.Sleep(1000);
            this.brain.SayAsync("I command you to give me a token!");
            Thread.Sleep(2000);

            return((int)States.InitialState);
        }