Exemple #1
0
        public Core.Chain BuildChain(HumanPart chain)
        {
            switch (chain)
            {
            case HumanPart.Head:
                Core.Chain head = new Core.Chain();
                head.Joints.Add(Head);
                return(head);

            case HumanPart.RightArm:
                return(RightArmChain());

            case HumanPart.LeftArm:
                return(LeftArmChain());

            case HumanPart.RightLeg:
                return(RightLegChain());

            case HumanPart.LeftLeg:
                return(LeftLegChain());

            case HumanPart.Root:
                Core.Chain root = new Core.Chain();
                root.Joints.Add(Root);
                return(root);
            }

            return(null);
        }
 /// <summary>
 /// Deactivate all of the human parts recursively
 /// </summary>
 /// <param name="gameObject">Root GameObject</param>
 /// <param name="humanPart">Root HumanPart</param>
 private static void DeactivateAll(GameObject gameObject, HumanPart humanPart)
 {
     if (gameObject == null)
     {
         return;
     }
     for (var i = 0; i < gameObject.transform.childCount; i++)
     {
         if (!humanPart.isLeaf)
         {
             DeactivateAll(gameObject.transform.GetChild(i).gameObject, humanPart.humanParts[i]);
         }
     }
     gameObject.SetActive(false);
 }
    /// <summary>
    /// Traverse recursively through the humanPart tree and check if all parts are their, used to make a win condition
    /// in case we added levels and tutorials in the game
    /// </summary>
    /// <param name="gameObject">Root GameObject</param>
    /// <param name="humanPart">Root HumanoidPart</param>
    /// <returns></returns>
    private static bool ActiveTree(GameObject gameObject, HumanPart humanPart)
    {
        if (gameObject == null)
        {
            return(true);
        }
        var res = true;

        for (var i = 0; i < gameObject.transform.childCount; i++)
        {
            if (!humanPart.isLeaf)
            {
                res &= ActiveTree(gameObject.transform.GetChild(i).gameObject, humanPart.humanParts[i]);
            }
        }

        return(res & gameObject.activeSelf);
    }
 /// <summary>
 /// This function fills the HumanParts recursively from the hierarchy
 /// </summary>
 /// <param name="gameObject">Root GameObject</param>
 /// <param name="humanPart">Root HumanPart</param>
 private static void FillHumanParts(GameObject gameObject, HumanPart humanPart)
 {
     if (gameObject == null)
     {
         return;
     }
     if (humanPart.name == "humanoid" || humanPart.name == "ufo")
     {
         return;
     }
     humanPart.name   = gameObject.name;
     humanPart.part   = gameObject;
     humanPart.isLeaf = TagDataModel.TagMap.ContainsKey(humanPart.name) && TagDataModel.TagMap[humanPart.name].IsLeaf;
     for (var i = 0; i < gameObject.transform.childCount; i++)
     {
         var hp = new HumanPart();
         humanPart.humanParts.Add(hp);
         FillHumanParts(gameObject.transform.GetChild(i).gameObject, hp);
     }
 }
    /// <summary>
    /// Search recursively for a specific tag in the tree and activate it
    /// </summary>
    /// <param name="partsName">Filtered list of tags</param>
    /// <param name="gameObject">Root GameObject</param>
    /// <param name="humanPart">Root HumanPart</param>
    private static void TreeSearchAndActivate(ICollection <string> partsName, GameObject gameObject, HumanPart humanPart)
    {
        if (gameObject == null)
        {
            return;
        }
        var enumerable     = partsName.ToList();
        var localPartsName = enumerable.Select(t => t.Split(';')[0]).ToList();

        if (localPartsName.Contains(humanPart.name) || humanPart.name.Contains("humanoid") || humanPart.name.Contains("ufo"))
        {
            if (partsName.Contains(humanPart.name + ";'"))
            {
                humanPart.part.transform.localScale = new Vector2(humanPart.part.transform.localScale.x,
                                                                  Mathf.Abs(humanPart.part.transform.localScale.y));
            }
            else if (partsName.Contains(humanPart.name + ";\""))
            {
                humanPart.part.transform.localScale = new Vector2(humanPart.part.transform.localScale.x,
                                                                  -Mathf.Abs(humanPart.part.transform.localScale.y));
            }
            humanPart.part.SetActive(true);
        }
        else
        {
            humanPart.part.SetActive(false);
        }
        for (var i = 0; i < gameObject.transform.childCount; i++)
        {
            if (!humanPart.isLeaf)
            {
                TreeSearchAndActivate(enumerable, gameObject.transform.GetChild(i).gameObject, humanPart.humanParts[i]);
            }
        }
    }
Exemple #6
0
        public Core.Chain BuildChain(HumanLeg.HumanLegs leg)
        {
            HumanPart part = (HumanPart)leg;

            return(BuildChain(part));
        }