private void ParseGene(ref GeneData newGene, string[] geneSubstrings) { // node,[Node type],[Bone Type],[Base depth],[Depth tolerance],[Grow Time] if (geneSubstrings.Length != 6) { newGene.IsValid = false; return; } try { newGene.IsMultyApplicable = geneSubstrings[0] == "stats"; newGene.GeneType = geneSubstrings[0]; newGene.Subtype = Convert.ToUInt16(geneSubstrings[1],16); newGene.ApplicantSubtype = Convert.ToUInt16(geneSubstrings[2],16); newGene.BaseDepth = Convert.ToUInt16(geneSubstrings[3],16); newGene.DepthTolerance = Convert.ToUInt16(geneSubstrings[4],16); newGene.GrowTime = Convert.ToUInt32(geneSubstrings[5],16) * 0.01f; } catch (Exception ex) { Debug.LogError(ex.Message); newGene.IsValid = false; return; } newGene.IsValid = true; }
bool GetIsApplicable(GeneData gene) { // Part Type check if (gene.GeneType != "node" && gene.GeneType != "stats") { return false; } // Subtype check if (gene.ApplicantSubtype != 0 && gene.ApplicantSubtype != Subtype) { return false; } // Generation check var gen = Generation; if (gen != gene.BaseDepth) { var actDistance = Mathf.Abs(gen - gene.BaseDepth); if (UnityEngine.Random.Range(0f, 1f) < actDistance / (gene.DepthTolerance + 1)) { return false; } } return true; }
private void AddNode(GeneData gene) { var slot = Slots.FirstOrDefault(s => !s.IsOccupied); if (slot == null) return; slot.IsOccupied = true; var nodePrefab = PrefabsManager.Instance.LoadPrefab(string.Format("{0}{1}", gene.GeneType, gene.Subtype)); var newBody = (GameObject)Instantiate(nodePrefab, gameObject.transform.position, Quaternion.FromToRotation(Vector3.right, Vector3.up) * //Quaternion.AngleAxis(Random.Range(-slot.Angle, slot.Angle), Vector3.forward)); Quaternion.AngleAxis(slot.Angle, Vector3.forward)); newBody.transform.parent = gameObject.transform; newBody.SetActive(true); var hinge = newBody.AddComponent<HingeJoint2D>(); hinge.connectedBody = gameObject.GetComponent<Rigidbody2D>(); hinge.connectedAnchor = new Vector2(slot.X, slot.Y); hinge.limits = new JointAngleLimits2D { min = -1.0f, max = 1.0f }; hinge.useLimits = true; newBody.AddComponent<HingeSmoothPos>(); gameObject.SendMessage("OnChildAdded", newBody, SendMessageOptions.DontRequireReceiver); }
private void AddBone(GeneData gene) { var slot = Slots.FirstOrDefault(s => !s.IsOccupied); if (slot == null) { return; } slot.IsOccupied = true; var bonePrefab = PrefabsManager.Instance.LoadPrefab(string.Format("{0}{1}", gene.GeneType, gene.Subtype)); var newBody = (GameObject)Instantiate(bonePrefab, gameObject.transform.position, gameObject.transform.rotation * Quaternion.AngleAxis(slot.Angle, Vector3.forward)); newBody.transform.parent = gameObject.transform; newBody.SetActive(true); //var slide = newBody.AddComponent<SliderJoint2D>(); var slide = newBody.AddComponent<HingeJoint2D>(); slide.connectedBody = gameObject.GetComponent<Rigidbody2D>(); slide.connectedAnchor = new Vector2(slot.X, slot.Y); //slide.limits = new JointTranslationLimits2D { min = -0.1f, max = 0.1f }; slide.limits = new JointAngleLimits2D { min = -1.0f, max = 1.0f }; slide.useLimits = true; gameObject.SendMessage("OnChildAdded", newBody, SendMessageOptions.DontRequireReceiver); }
private void ParseGene(ref GeneData newGene, string[] geneSubstrings) { // node,[Node type],[Bone Type],[Base depth],[Depth tolerance],[Grow Time] if (geneSubstrings.Length != 6) { newGene.IsValid = false; return; } try { newGene.IsMultyApplicable = geneSubstrings[0] == "stats"; newGene.GeneType = geneSubstrings[0]; newGene.Subtype = Convert.ToUInt16(geneSubstrings[1], 16); newGene.ApplicantSubtype = Convert.ToUInt16(geneSubstrings[2], 16); newGene.BaseDepth = Convert.ToUInt16(geneSubstrings[3], 16); newGene.DepthTolerance = Convert.ToUInt16(geneSubstrings[4], 16); newGene.GrowTime = Convert.ToUInt32(geneSubstrings[5], 16) * 0.01f; } catch (Exception ex) { Debug.LogError(ex.Message); newGene.IsValid = false; return; } newGene.IsValid = true; }
public GeneData ParseGene(string geneString) { var geneSubstrings = geneString.Split(GENE_VALUES_SEPARATORS, StringSplitOptions.RemoveEmptyEntries); var newGene = new GeneData(); ParseGene(ref newGene, geneSubstrings); return newGene; }
public GeneData ParseGene(string geneString) { var geneSubstrings = geneString.Split(GENE_VALUES_SEPARATORS, StringSplitOptions.RemoveEmptyEntries); var newGene = new GeneData(); ParseGene(ref newGene, geneSubstrings); return(newGene); }
private void AddJoint(GeneData gene) { // float x, y; // gene.FloatModifiers.TryGetValue("X", out x); // gene.FloatModifiers.TryGetValue("Y", out y); // // var slot = new ChildSlot { X = x, Y = y }; // // var newBody = (GameObject)Instantiate(BonePrefab, // gameObject.transform.position + new Vector3(slot.X, slot.Y), // gameObject.transform.rotation); // newBody.transform.parent = gameObject.transform; // newBody.SetActive(true); // // var spring = newBody.AddComponent<SpringJoint2D>(); // spring.connectedBody = gameObject.GetComponent<Rigidbody2D>(); // spring.distance = 0.1f; // spring.dampingRatio = 0.01f; // spring.frequency = 10.0f; // // gameObject.SendMessage("OnChildAdded", newBody, SendMessageOptions.DontRequireReceiver); }
private void AddStats(GeneData gene) { throw new System.NotImplementedException(); }
void OnApplyGene(GeneData gene) { if (!GetIsApplicable(gene)) return; switch (gene.GeneType.ToLower()) { case "node": AddNode(gene); break; case "stats": AddStats(gene); break; default: break; } }