コード例 #1
0
ファイル: UrbThinker.cs プロジェクト: nighzmarquls/Urbaeum
    public float EvaluateBehaviour(UrbBehaviour Input)
    {
        Assert.IsNotNull(Input);
        float Evaluation = Input.BehaviourEvaluation;

        if (Evaluation <= 0)
        {
            return(0);
        }

        if ((Input.UrgeSatisfied & UrbUrgeCategory.Breed) > 0)
        {
            Evaluation *= BreedUrge;
        }
        if ((Input.UrgeSatisfied & UrbUrgeCategory.Hunger) > 0)
        {
            Evaluation *= HungerUrge;
        }
        if ((Input.UrgeSatisfied & UrbUrgeCategory.Rest) > 0)
        {
            Evaluation *= RestUrge;
        }

        if ((Input.UrgeSatisfied & UrbUrgeCategory.Safety) > 0)
        {
            Evaluation *= SafetyUrge;
        }
        else
        {
            Evaluation *= 1 - SafetyUrge;
        }
        return(Evaluation);
    }
コード例 #2
0
ファイル: UrbAgent.cs プロジェクト: nighzmarquls/Urbaeum
    public virtual void AddDeathBehaviour(UrbBehaviour Behaviour)
    {
        if (DeathBehaviours == null)
        {
            DeathBehaviours = new[] { Behaviour };
            return;
        }

        UrbBehaviour[] newBehaviours = new UrbBehaviour[DeathBehaviours.Length + 1];
        DeathBehaviours.CopyTo(newBehaviours, 1);
        newBehaviours[0] = Behaviour;
    }
コード例 #3
0
ファイル: UrbAgent.cs プロジェクト: nighzmarquls/Urbaeum
    public virtual void RemoveDeathBehaviour(UrbBehaviour Behaviour)
    {
        if (DeathBehaviours == null || DeathBehaviours.Length == 0)
        {
            return;
        }

        List <UrbBehaviour> TempList = new List <UrbBehaviour>(DeathBehaviours);

        if (TempList.Contains(Behaviour))
        {
            TempList.Remove(Behaviour);
            DeathBehaviours = TempList.ToArray();
        }
    }
コード例 #4
0
ファイル: UrbThinker.cs プロジェクト: nighzmarquls/Urbaeum
    public void ChooseBehaviour()
    {
        s_ChooseBehaviour_p.Begin(this);

        if (!perceptionExists || mPerception.ContactBehaviours == null)
        {
            s_ChooseBehaviour_p.End();
            return;
        }

        bool         behaviorChosen   = false;
        UrbBehaviour ChosenBehaviour  = null;
        float        BestEvaluation   = 0;
        UrbBehaviour currentBehaviour = null;

        for (int i = 0; i < mPerception.ContactBehaviours.Length; i++)
        {
            currentBehaviour = mPerception.ContactBehaviours[i];
            Assert.IsNotNull(currentBehaviour);

            float Evaluation = EvaluateBehaviour(currentBehaviour);
            if (BestEvaluation < Evaluation)
            {
                behaviorChosen  = true;
                ChosenBehaviour = currentBehaviour;
                BestEvaluation  = Evaluation;
            }
        }

        if (!behaviorChosen || ChosenBehaviour.WasDestroyed)
        {
            if (mMovement && mMovement.Movement == null)
            {
                mMovement.ExecuteMove();
            }
        }
        else
        {
            LastTimeSuccessful = Time.time;
            ChosenBehaviour.ExecuteTileBehaviour();
        }

        s_ChooseBehaviour_p.End();
    }