You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					83 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					83 lines
				
				2.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using HTC.UnityPlugin.Utility;
							 | 
						||
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace HTC.UnityPlugin.PoseTracker
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public abstract class BasePoseTracker : MonoBehaviour, IPoseTracker
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        public Vector3 posOffset;
							 | 
						||
| 
								 | 
							
								        public Vector3 rotOffset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        private OrderedIndexedSet<IPoseModifier> modifierSet;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public void AddModifier(IPoseModifier obj)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (obj == null) { return; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (modifierSet == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                modifierSet = new OrderedIndexedSet<IPoseModifier>();
							 | 
						||
| 
								 | 
							
								                modifierSet.Add(obj);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if (!modifierSet.Contains(obj))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                // insert obj with right priority order
							 | 
						||
| 
								 | 
							
								                if (obj.priority > modifierSet[modifierSet.Count - 1].priority)
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    modifierSet.Add(obj);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                else
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    for (int i = 0, imax = modifierSet.Count; i < imax; ++i)
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        if (obj.priority <= modifierSet[i].priority)
							 | 
						||
| 
								 | 
							
								                        {
							 | 
						||
| 
								 | 
							
								                            modifierSet.Insert(i, obj);
							 | 
						||
| 
								 | 
							
								                            break;
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public bool RemoveModifier(IPoseModifier obj)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return modifierSet == null ? false : modifierSet.Remove(obj);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        [Obsolete]
							 | 
						||
| 
								 | 
							
								        protected void TrackPose(Pose pose, Transform origin = null)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            TrackPose((RigidPose)pose, origin);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        protected void TrackPose(RigidPose pose, Transform origin = null)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            pose = pose * new RigidPose(posOffset, Quaternion.Euler(rotOffset));
							 | 
						||
| 
								 | 
							
								            ModifyPose(ref pose, origin);
							 | 
						||
| 
								 | 
							
								            RigidPose.SetPose(transform, pose, origin);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        [Obsolete]
							 | 
						||
| 
								 | 
							
								        protected void ModifyPose(ref Pose pose, Transform origin)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var rigidPose = (RigidPose)pose;
							 | 
						||
| 
								 | 
							
								            ModifyPose(ref rigidPose, origin);
							 | 
						||
| 
								 | 
							
								            pose = rigidPose;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        protected void ModifyPose(ref RigidPose pose, Transform origin)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (modifierSet == null) { return; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            for (int i = 0, imax = modifierSet.Count; i < imax; ++i)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if (!modifierSet[i].enabled) { continue; }
							 | 
						||
| 
								 | 
							
								                modifierSet[i].ModifyPose(ref pose, origin);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |