//Add copy of self or techer to scene
 public void AddAvatar(bool self)
 {
     if (self)
     {
         GameObject      newAvatar     = Instantiate(avatarPrefab);
         AvatarContainer newAvatarCont = new AvatarContainer(newAvatar, mirroring);
         avatarListSelf.Add(newAvatarCont);
         newAvatar.SetActive(true);
         newAvatarCont.ChangeActiveType(avatarListSelf[0].activeType);
         newAvatarCont.MovePerson(SelfPoseInputGetter.CurrentPose);
         //newAvatar.transform.position = avatarListSelf[avatarListSelf.Count - 1].avatarContainer.transform.position;
         //newAvatar.transform.position = newAvatar.transform.position + new Vector3(1,0,0);
         //newAvatar.transform.position = new Vector3(1, 0, 0);
     }
     else
     {
         GameObject      newAvatar     = Instantiate(avatarTPrefab);
         AvatarContainer newAvatarCont = new AvatarContainer(newAvatar, mirroring);
         avatarListTeacher.Add(newAvatarCont);
         newAvatar.SetActive(true);
         newAvatarCont.ChangeActiveType(avatarListTeacher[0].activeType);
         if (TeacherPoseInputGetter.CurrentPose != null)
         {
             newAvatarCont.MovePerson(TeacherPoseInputGetter.CurrentPose);
         }
     }
 }
        // Do once on scene startup
        private void Start()
        {
            // Initialize the respective AvatarContainer classes
            avatarListSelf    = new List <AvatarContainer>();
            avatarListTeacher = new List <AvatarContainer>();
            avatarListSelf.Add(new AvatarContainer(avatarContainer));
            avatarListTeacher.Add(new AvatarContainer(avatarContainerT));


            // Instantiate objects for showing recordings
            GameObject newAvatar = Instantiate(avatarTPrefab);

            recordedAvatar = new AvatarContainer(newAvatar);
            newAvatar.SetActive(false);

            // Set teacher container to inactive at start
            avatarListTeacher[0].avatarContainer.gameObject.SetActive(false);

            SelfPoseInputGetter = new PoseInputGetter(SelfPoseInputSource)
            {
                ReadDataPath = fake_file
            };
            TeacherPoseInputGetter = new PoseInputGetter(PoseInputSource.FILE)
            {
                ReadDataPath = fake_file
            };
            SelfPoseInputGetter.loop    = true;
            TeacherPoseInputGetter.loop = true;
            RecordedPoseInputGetter     = new PoseInputGetter(PoseInputSource.FILE)
            {
                ReadDataPath = fake_file
            };

            //SelfPoseInputGetter.streamCanvas = streamCanvas;
            SelfPoseInputGetter.VideoCube = videoCube;

            // initialize similarity calculation instance and assign selected avatars
            avatarSimilarity = new AvatarSimilarity(avatarListSelf[similaritySelfNr], avatarListTeacher[similarityTeacherNr], similarityBodyNr, similarityPenalty, similarityActivateKalman, similarityKalmanQ, similarityKalmanR);
            avatarVisualisationSimilarity = new VisualisationSimilarity(avatarListSelf[similaritySelfNr]);
            graph = new Graph(GraphContainer, 0.0F);

            recordedAvatarSimilarity = new AvatarSimilarity(recordedAvatar, avatarListTeacher[similarityTeacherNr], similarityBodyNr, similarityPenalty, similarityActivateKalman, similarityKalmanQ, similarityKalmanR);
            recordedAvatarVisualisationSimilarity = new VisualisationSimilarity(recordedAvatar);

            // Find attached objects in scene
            scoreIndicator        = avatarContainer.transform.Find("ScoreIndicator").gameObject;
            pulseObject           = avatarContainer.transform.Find("PulsingCube").gameObject;
            progressIndicator     = avatarContainerT.transform.Find("ProgressIndicator").gameObject;
            trainHandMenuContent  = trainingElements.transform.Find("HandMenu_Training_HideOnHandDrop").Find("MenuContent").gameObject;
            choreoHandMenuContent = choreographyElements.transform.Find("HandMenu_Coreo_HideOnHandDrop").Find("MenuContent").gameObject;
            recordHandMenuContent = recordElements.transform.Find("HandMenu_Recording_HideOnHandDrop").Find("MenuContent").gameObject;

            // Default is to have a mirrored view
            do_mirror();
        }
        // constructor
        public AvatarSimilarity(AvatarContainer selfIn, AvatarContainer teacherIn, BodyWeightsType bodyNrIn, double penaltyIn, bool activateKalmanIn, double kalmanQIn, double kalmanRIn)
        {
            // assign
            ///////////////////////////////////////////////////////////////////////////////////
            self           = selfIn;
            teacher        = teacherIn;
            bodyNr         = bodyNrIn;
            penalty        = penaltyIn;
            kalmanQ        = kalmanQIn;
            kalmanR        = kalmanRIn;
            stickNumber    = 0;
            activateKalman = activateKalmanIn;

            // initialize
            ///////////////////////////////////////////////////////////////////////////////////

            // define all stick names (should be actually moved to a parameter file)
            //stickNames = SimilarityConst.StickNames;
            stickNumber = SimilarityConst.StickNumber;

            // Initialize adaptive weighting
            stickWeight = Enumerable.Repeat(1.0, stickNumber).ToList();

            // weight of each stick
            stickWeightBody = SimilarityConst.GetStickWeights(bodyNr);


            // correct each default stick weight
            stickWeightAdapt = Enumerable.Repeat(1.0, stickNumber).ToList();

            // calculate final stick weight
            stickWeightTotal = 0.0;
            for (int i = 0; i < stickNumber; i++)
            {
                stickWeightTotal += stickWeightBody[i] * stickWeightAdapt[i];
            }

            // set default similarity each stick
            similarityStick = Enumerable.Repeat(0.0, stickNumber).ToList();

            // generate kalman filters
            kalmanFilter = new List <KalmanFilter>(new KalmanFilter[stickNumber]);
            for (int i = 0; i < stickNumber; i++)
            {
                kalmanFilter[i] = new KalmanFilter(kalmanQ, kalmanR);
                kalmanFilter[i].Reset(1.0);
            }


            // total score
            totalScore = 0.0;
        }
 public void DeleteAvatar(bool self)
 {
     if (self && avatarListSelf.Count > 1)
     {
         AvatarContainer avatar = avatarListSelf[avatarListSelf.Count - 1];
         avatar.avatarContainer.SetActive(false);
         avatarListSelf.Remove(avatar);
         Destroy(avatar.avatarContainer.gameObject);
     }
     else if (!self && avatarListTeacher.Count > 1)
     {
         AvatarContainer avatar = avatarListTeacher[avatarListTeacher.Count - 1];
         avatar.avatarContainer.SetActive(false);
         avatarListTeacher.Remove(avatar);
         Destroy(avatar.avatarContainer.gameObject);
     }
 }
 public VisualisationSimilarity(AvatarContainer selfIn)
 {
     selfAvatarContainer = selfIn;
     stickparts          = selfAvatarContainer.stickContainer.StickList;
     SetColor();
 }