示例#1
0
    /// <summary>
    /// Gets all the food things that are alive, edible, attackable, not a wolf and not self
    /// </summary>
    /// <param name="hits"></param>
    /// <returns></returns>
    private AttackableTrait[] GetAllAliveAttackableFoodTraits(RaycastHit[] hits)
    {
        List <AttackableTrait> attackingTraits = new List <AttackableTrait>();

        foreach (RaycastHit hit in hits)
        {
            if (ReferenceEquals(hit.transform.gameObject, this.gameObject))
            {
                continue;
            }
            //Is the thing edible?
            EdibleTrait edibleTrait = hit.transform.GetComponent <EdibleTrait>();
            if (edibleTrait)
            {
                // wolves won't eat wolves
                WolfController wolfController = hit.transform.GetComponent <WolfController>();
                if (!wolfController)
                {
                    // They aren't vegetarien
                    MeatTrait meatTrait = hit.transform.GetComponent <MeatTrait>();
                    if (meatTrait)
                    {
                        AttackableTrait attackableTrait = hit.transform.GetComponent <AttackableTrait>();
                        if (attackableTrait)
                        {
                            attackingTraits.Add(attackableTrait);
                        }
                    }
                }
            }
        }
        return(attackingTraits.ToArray());
    }
示例#2
0
    private void SetStateToAttacking(AttackableTrait thingToAttack)
    {
        currentState = eWolfStates.Attacking;

        //GetComponentInChildren<MeshRenderer>().materials[0].color = Color.red;

        attackStateVars.target = thingToAttack.transform;
    }
示例#3
0
 private bool FindFood(RaycastHit[] hits)
 {
     EdibleTrait[] edibleTraits = GetEdibleTraits(hits);
     if (edibleTraits.Length > 0)
     {
         SetStateToEating(edibleTraits[UnityEngine.Random.Range(0, edibleTraits.Length)]);
         return(true);
     }
     else
     {
         AttackableTrait[] attackableTraits = GetAllAliveAttackableFoodTraits(hits);
         if (attackableTraits.Length > 0)
         {
             //TODO: Make this choice more intelligent (Closer, weaker, more food worty)
             AttackableTrait attackableTrait = attackableTraits[UnityEngine.Random.Range(0, attackableTraits.Length)];
             SetStateToAttacking(attackableTrait);
             return(true);
         }
     }
     return(false);
 }