// Update is called once per frame void FixedUpdate() { age += Time.deltaTime; // get more hungry/thirsty hunger += Time.deltaTime * 0.01f; thirst += Time.deltaTime * 0.01f; float percentGrown = age / genome["ageToReproduce"].value(); if (percentGrown <= 1) { size = percentGrown * genome["size"].value(); } else { size = genome["size"].value(); } this.gameObject.transform.localScale = new Vector3(size, size, size); // die if you ded if (hunger >= 1 || thirst >= 1 || age > maxAge) { Die(); } // mode changing logic if (thirst > 0.4) // these threshold should be part of the genome! { mode = "thirsty"; } else if (hunger > 0.6) { mode = "hungry"; } else { if (recoveryTime > 0) { recoveryTime -= Time.deltaTime; mode = "hungry"; } else if (size < genome["size"].value()) { mode = "hungry"; } else { mode = "frisky"; } } // do actions, according to mode bool didFindSomething = false; switch (mode) { case "hungry": didFindSomething = FixedUpdateHungry(); break; case "thirsty": didFindSomething = FixedUpdateThirsty(); break; case "frisky": didFindSomething = FixedUpdateFrisky(); break; } if (didFindSomething) { wanderLocation = nullVector; } else { FixedUpdateWander(); } // Update our status to the text overs TextTag myTextTag = gameObject.GetComponent <TextTag>(); myTextTag.SetText("Hunger: " + hunger.ToString("0.00")); }