Example #1
0
        public void UpdateScale(PartModel part)
        {
            if (part.scaleRepresentations)
            {
                if (part.root.point)
                {
                    foreach (KeyValuePair <string, ReprModel> entry in part.root.point.reprs)
                    {
                        Transform tsf = entry.Value.transformRef;
                        if (tsf)
                        {
                            tsf.localScale = Vector3.one * part.totalScale;
                        }
                    }
                }
                else
                {
                    Debug.LogError("Part " + part.name + " cannot be scaled as its root, " + part.root.name + ", does not have any point");
                }
            }
            else
            {
                if (part.root.transformRef)
                {
                    part.root.transformRef.localScale = Vector3.one * part.totalScale;
                }
            }

            if (part is HandModel)
            {
                (part as HandModel).fingers.ForEach(f => f.length = GetFingerLength(f));
            }
        }
Example #2
0
        void UpdatePart(PartModel part)
        {
            if (part is HandModel)
            {
                UpdateHand(part as HandModel);
            }
            if (part is FingerModel)
            {
                UpdateFinger(part as FingerModel);
            }

            part.bones.ForEach(b => { if (b.gameObject.activeSelf)
                                      {
                                          UpdateBone(b);
                                      }
                               });

            // Update registered controllers

            if (HPTK.core.controlsUpdateCalls)
            {
                part.registry.ForEach((c) => { if (c.gameObject.activeSelf)
                                               {
                                                   c.ControllerUpdate();
                                               }
                                      });
            }
        }
Example #3
0
        public override sealed void Awake()
        {
            base.Awake();

            GetView();

            if (!parent)
            {
                parent = transform.parent.GetComponent <PartModel>();
            }
            if (!body)
            {
                body = transform.parent.GetComponent <BodyModel>();
            }

            parts.RemoveAll(p => p == null);
            bones.RemoveAll(b => b == null);

            if (parent)
            {
                if (!parent.parts.Contains(this))
                {
                    parent.parts.Add(this);
                }
            }
            else
            {
                if (!body)
                {
                    Debug.LogError("Part without parent is interpreted as root part and it requires a body. Move " + transform.name + " as child of a BodyModel in hierarchy");
                }
                else if (body.root != null && body.root != this)
                {
                    Debug.LogWarning("Multiple body roots were found. Preserving original root");
                }
                else
                {
                    body.root = this;
                }
            }

            _registry = registry;

            PartAwake();
        }
Example #4
0
        public override sealed void Awake()
        {
            base.Awake();

            children.RemoveAll(c => c == null);
            points.RemoveAll(p => p == null);

            if (!part)
            {
                part = GetComponent <PartModel>();
            }
            if (!part)
            {
                part = transform.parent.GetComponent <PartModel>();
            }

            if (!parent)
            {
                int siblingIndex = transform.GetSiblingIndex();
                if (siblingIndex > 0)
                {
                    parent = transform.parent.GetChild(siblingIndex - 1).GetComponent <BoneModel>();
                    if (parent != null && !parent.children.Contains(this))
                    {
                        parent.children.Add(this);
                    }
                }
                else if (!part.root)
                {
                    part.root = this;
                }
                else if (part.root != this)
                {
                    Debug.LogWarning("Multiple roots found for part " + part.name + ": bones " + transform.name + " and " + part.root.name);
                }
            }

            if (!part.bones.Contains(this))
            {
                part.bones.Add(this);
            }

            BoneAwake();
        }
Example #5
0
        public void SetPartVisuals(PartModel part, string key, bool enabled)
        {
            if (!part.root.reprs.ContainsKey(key))
            {
                Debug.LogWarning("Part " + part.name + " root does not have a " + key + " representation");
                return;
            }

            SkinnedMeshRenderer smr = part.root.reprs[key].skinnedMeshRenderer;

            if (smr)
            {
                smr.enabled = enabled;
            }
            else
            {
                Debug.LogWarning("Part " + part.name + " root does not have a SkinnedMeshRenderer referenced on its " + key + " representation");
            }
        }
Example #6
0
 public override sealed void Awake()
 {
     base.Awake();
     model = GetComponent <PartModel>();
 }
Example #7
0
        void StartPart(PartModel part)
        {
            if (part.body.parts.Contains(part))
            {
                return;
            }

            part.body.parts.Add(part);

            if (part == part.body.root && part.root.parent)
            {
                // Main root bone should have no parents
                part.root.parent.children.Remove(part.root);
                part.root.parent = null;

                Debug.LogWarning("Root bone of root part should have no parent. Parent removed for bone " + part.root.name);
            }
            else if (part.parent != null)
            {
                // Move to the upper element in hierarchy until you reach a bone or body.root
                BoneModel upperBone = null;
                PartModel upperPart = null;
                Transform tsf       = part.transform;
                int       siblingIndex;

                for (int i = 0; i < 50; i++)
                {
                    if (upperBone != null || upperPart == part.body.root)
                    {
                        break;
                    }

                    siblingIndex = tsf.GetSiblingIndex();

                    if (siblingIndex > 0)
                    {
                        tsf = tsf.parent.GetChild(siblingIndex - 1);
                    }
                    else
                    {
                        tsf = tsf.parent;
                    }

                    upperBone = tsf.GetComponent <BoneModel>();
                    upperPart = tsf.GetComponent <PartModel>();
                }

                // Connect part.root.parent with some part.parent.bones
                if (upperBone)
                {
                    part.root.parent = upperBone;
                    if (!upperBone.children.Contains(part.root))
                    {
                        upperBone.children.Add(part.root);
                    }
                }
                else
                {
                    Debug.LogWarning("Part " + part.name + " has a parent but any upper bone was found to which connect its root bone " + part.root.name);
                }
            }
            else if (part != part.body.root)
            {
                Debug.LogWarning(part.name + " has no parent but it's not the root part of " + part.body.name + ". The root part of that body is " + part.body.root.name);
            }

            // Recursive
            part.parts.ForEach(p =>
            {
                if (p.gameObject.activeSelf)
                {
                    p.body = part.body;
                    StartPart(p);
                }
            });

            if (part is HandModel)
            {
                HandStart(part as HandModel);
            }
            if (part is FingerModel)
            {
                FingerStart(part as FingerModel);
            }

            part.registry.ForEach((c) => { if (c.gameObject.activeSelf)
                                           {
                                               c.ControllerStart();
                                           }
                                  });

            // Scaling
            UpdateScale(part);
        }