//Manage hands and feet void OnPair(Pairable p) { switch (p.type) { case HAND: if (rightHand == null) { rightHand = p; } else if (leftHand == null) { leftHand = p; } break; case FOOT: if (rightFoot == null) { rightFoot = p; } else if (leftFoot == null) { leftFoot = p; } break; } }
void Awake() { if (!Holojam.Utility.IsMasterPC()) { Destroy(this); } p = GetComponent <Holojam.Tools.Pairable> (); }
public void Process(float headLength, Transform torso, Vector3 head, Transform neck, Transform groundPlane, Pairable leftHand, Pairable rightHand, Vector3 headForward) { this.leftHand = leftHand; this.rightHand = rightHand; this.headForward = headForward; base.Process(headLength, torso, head, neck, groundPlane); }
public void Process(float headLength, Transform torso, Vector3 head, Transform neck, Transform groundPlane, Transform partialTorso, Pairable leftFoot, Pairable rightFoot) { this.partialTorso = partialTorso; this.leftFoot = leftFoot; this.rightFoot = rightFoot; base.Process(headLength, torso, head, neck, groundPlane); }
void OnTriggerExit(Collider c) { Pairable p = c.GetComponent <Pairable>(); if (p != null) { buffer.Remove(p); p.DeregisterTarget(this); } }
void OnTriggerEnter(Collider c) { Pairable p = c.GetComponent <Pairable>(); if (p != null) { buffer.Add(p, Time.time); p.RegisterTarget(this); } }
public bool ValidatePair(Pairable p) { bool valid = Array.Exists(mask, s => s == p.type) == (maskType == MaskType.WHITELIST) && (p.pairedTo == this || UnderCap(p.type)) && //Cap, but not if unpairing p.CanTarget(this); //Reset timer if invalid if (!valid) { buffer[p] = Time.time; } return(valid); }
public void Process(float headLength, Vector3 hip, Pairable foot, Transform upperRenderLeg, Transform lowerRenderLeg, Transform renderKnee) { this.headLength = headLength; this.hip = hip; this.foot = foot; this.lowerRenderLeg = lowerRenderLeg; this.upperRenderLeg = upperRenderLeg; this.renderKnee = renderKnee; Calculate(); Render(); }
void OnUnpair(Pairable p) { if (p == leftHand) { leftHand = null; } else if (p == rightHand) { rightHand = null; } else if (p == leftFoot) { leftFoot = null; } else if (p == rightFoot) { rightFoot = null; } }
protected override void Calculate() { lowestFoot = Vector3.Distance(leftFoot.center, head) < Vector3.Distance(rightFoot.center, head)?rightFoot:leftFoot; //Median point between feet, at lowest foot height Vector3 foundation = (leftFoot.center + rightFoot.center) * 0.5f; foundation = Vector3.Project(lowestFoot.center - head, foundation - head) + head; Vector3 planedLeftFoot = ProjectToGround(leftFoot.transform.forward).normalized; Vector3 planedRightFoot = ProjectToGround(rightFoot.transform.forward).normalized; //Calculate facing direction rawForward = ((planedRightFoot + planedLeftFoot) * 0.5f).normalized; up = (head - foundation).normalized; //Calculate leaning direction leanedForward = Vector3.Cross( Vector3.Cross(groundPlane.up, rawForward), up ).normalized; }
public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(type, new GUIContent("Pairable Type")); EditorGUILayout.PropertyField(trackingTag); EditorGUILayout.PropertyField(localSpace); EditorGUILayout.PropertyField(centerOffset, new GUIContent("Center Offset")); EditorGUILayout.Space(); EditorGUILayout.PropertyField(pairTime); EditorGUILayout.PropertyField(unpairTime); EditorGUILayout.PropertyField(cooldown); if (!serializedObject.isEditingMultipleObjects) { EditorGUILayout.Space(); Pairable p = (Pairable)serializedObject.targetObject; GUIStyle style = new GUIStyle(EditorStyles.boldLabel); EditorGUIUtility.labelWidth = 72; if (p.paired && !p.unpairing) { style.normal.textColor = new Color(0.5f, 1, 1); } EditorGUILayout.LabelField("Status", (p.paired && !p.unpairing)?"Paired with \"" + p.pairedTo.pivot.gameObject.name + "\"": (!p.paired && !p.pairing)?"Unpaired": p.pairing?"Pairing...":"Unpairing...", style ); } EditorUtility.SetDirty(serializedObject.targetObject); serializedObject.ApplyModifiedProperties(); }
void OnUnpair(Pairable p) { buffer[p] = Time.time; paired.Remove(p); }
//Update paired list and reset timers void OnPair(Pairable p) { buffer[p] = Time.time; paired.Add(p); }
//How long has the pairable been in the pairing zone? float Lifetime(Pairable p) { return(Time.time - buffer[p]); }
void Awake() { pairable = GetComponent <Holojam.Tools.Pairable>(); }