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]); } } }
public Core.Chain BuildChain(HumanLeg.HumanLegs leg) { HumanPart part = (HumanPart)leg; return(BuildChain(part)); }