Exemplo n.º 1
0
    public override StatusValue Tick(Blackboard blackboard)
    {
        AIPerceptor senses = (AIPerceptor)blackboard.GetValue("senses");

        Enemy   target = senses.GetCurrentTarget();
        Vector3 targetPos;

        if (target == null)
        {
            List <GameObject> attackers = (List <GameObject>)blackboard.GetValue("attackingEnemies");
            if (attackers.Count > 0)
            {
                targetPos = attackers[0].transform.position;
            }
            else
            {
                Debug.Log("targetting failed");
                return(StatusValue.FAILED);
            }
        }
        else
        {
            targetPos = target.transform.position;
        }
        Debug.Log("getting target enemy to attack");
        blackboard.SetValue("moveToPos", targetPos);
        blackboard.SetValue("distanceToArrival", 2.0f);

        return(StatusValue.SUCCESS);
    }
    // Use this for initialization
    void Awake()
    {
        //create a tree with just the attack node
        senses = GetComponentInChildren <AIPerceptor>();
        tree   = new BTTree
                 (
            new BTSelector(new List <BTTask>()
        {
            new BTSequence(new List <BTTask>()
            {
                new CheckIfPlayerUnderAttack(),
                new RLFightOrFlight()
            }),
            new FollowPlayerSequence(),
            new Idle()
        }
                           ));

        //setup the blackboard values
        tree.Blackboard = new Blackboard();
        senses          = GetComponentInChildren <AIPerceptor>();
        senses.SetBlackboard(tree.Blackboard);
        tree.Blackboard.SetValue("owner", this.gameObject);
        tree.Blackboard.SetValue("senses", senses);
        if (player)
        {
            tree.Blackboard.SetValue("player", player);
        }
        tree.BeginTree();
    }
Exemplo n.º 3
0
    // Use this for initialization
    void Awake()
    {
        tree.Blackboard = new Blackboard();
        senses          = GetComponentInChildren <AIPerceptor>();

        //create the behaviour tree
        tree = new BTTree(
            new BTSelector(new List <BTTask>()
        {
            new Timer(
                new BTSequence(
                    new List <BTTask>()
            {
                new MoveTo(),
                new SelectNextLocation()
            }),
                5f),

            new RLAttack(
                new List <BTTask>()
            {
                new FireballAttack(),
                new WaterAttack(),
                new AirAttack(),
                new EarthAttack()
            })
        }));

        tree.Blackboard.SetValue("owner", this.gameObject);
        tree.Blackboard.SetValue("patrolPoints", GetComponent <Patrol>().GetPatrolPoints());
        tree.Blackboard.SetValue("moveToPos", GetComponent <Patrol>().GetPatrolPoints()[0].transform.position);
        tree.Blackboard.SetValue("distanceToArrival", 0.5f);
        tree.Blackboard.SetValue("senses", senses);
        tree.BeginTree();
    }
 public override void FirstTimeInit(Blackboard blackboard)
 {
     //initialise values for future runs
     if (owner == null)
     {
         owner = (GameObject)blackboard.GetValue("owner");
     }
     if (senses == null)
     {
         senses = (AIPerceptor)blackboard.GetValue("senses");
     }
 }
    public virtual float LaunchAttack(Blackboard blackboard)
    {
        AIPerceptor senses = (AIPerceptor)blackboard.GetValue("senses");

        //first time setup for this attack's caster
        if (caster == null)
        {
            caster = (GameObject)blackboard.GetValue("owner");
        }
        //calculate damage based on base damage and the target's resistances (in some games this would also involve the caster's stats)
        target = senses.GetCurrentTarget();
        if (target == null)
        {
            Debug.Log("No target to attack");
            return(0);
        }
        float damage = baseDamage * target.GetResistance(damageType);

        //deal the damage to the enemy
        target.TakeDamage(damage);

        //the damage value returned is used as the reward value
        return(damage);
    }
Exemplo n.º 6
0
 public override void FirstTimeInit(Blackboard blackboard)
 {
     senses = (AIPerceptor)blackboard.GetValue("senses");
 }