Beispiel #1
0
    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);
            }
        }
    }
Beispiel #2
0
    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;
        }
    }
Beispiel #3
0
 public void FoundFood(Bird owner)
 {
     // hungry -> feed
     if (owner.Hungry)
     {
         owner.ChangeState(owner.StateFeed);
     }
 }