public override void Execute(Bird owner) { if (owner.Information.Count == 0 || !owner.Hungry) { owner.ChangeState(owner.StateExplore); } feedStateTimer += Time.deltaTime; // delete information if it is wrong if (Vector3.Distance(owner.transform.position, owner.targetPoint) <= Bird.settings.feed_discreditInfoDistance || feedStateTimer >= Bird.settings.feed_discreditInfoAfterTimeInState) { if (owner.Hungry) { owner.DiscreditFoodAt(owner.targetPoint); if (owner.Information.Count > 0) { owner.targetPoint = ChooseFoodSource(owner); } else { owner.ChangeState(owner.StateExplore); } } else { owner.ChangeState(owner.StateExplore); } } }
public override void Execute(Bird owner) { cohesionToggleTimer += Time.deltaTime; if (cohesionToggleTimer > Bird.settings.explore_changeCohesionAfter) { moveSettings.cohesionMultiplier = moveSettings.cohesionMultiplier == 2.0f ? -5.0f : 2.0f; cohesionToggleTimer = 0; } // state change if (owner.Hungry && owner.Information.Count > 0) { owner.ChangeState(owner.StateFeed); } changeDirectionTimer += Time.deltaTime; if (changeDirectionTimer >= Bird.settings.explore_changeDirectionAfter) { owner.StateGlobal.ChangeDirection(); changeDirectionTimer = 0; } }
public void FoundFood(Bird owner) { // hungry -> feed if (owner.Hungry) { owner.ChangeState(owner.StateFeed); } }