コード例 #1
0
    public AgentDecisionTree(SIO_AttackListener attackListener)
    {
        isLoaded = false;
        xmlPath  = Application.persistentDataPath + @"/Xml/AgentDecisionTree.config";

        FriendSys          = Singleton.Instance <FriendSys>();
        TreeLoader         = Singleton.Instance <DecisionTreeLoader>();
        NavAgentController = Singleton.Instance <NavAgentController>();
        SIO_AttackListener = attackListener;

        DecisionTreeLoader.TreeInfo info = new DecisionTreeLoader.TreeInfo()
        {
            XmlLocalPath    = xmlPath,
            MethodContainer = this,
            ResultHanlder   = LoadTreeComplete
        };
        TreeLoader.AsyncCreateNode(info);

        //root = TreeLoader.CreateNode(xmlPath, this);
        //isLoaded = true;

        ////TODO:[for test]

        //ManualLoadTree();
        //root = Root(xmlPath);
    }
コード例 #2
0
    public override Vector3 CalculateMove(NavAgentController controller)
    {
        // if no neighbors, maintain current alignment
        if (controller.rays.Count == 0)
        {
            return(controller.transform.forward);
        }

        // add all points together and average
        Vector3 alignmentMove = Vector3.zero;
        int     nEnemy        = 0;

        foreach (NavAgentController.rayDot item in controller.rays)
        {
            if (item.hitInfo.collider != null)
            {
                if (item.hitInfo.collider.gameObject.CompareTag("Enemy"))
                {
                    nEnemy++;
                    alignmentMove += item.hitInfo.collider.transform.forward;
                }
            }
        }

        if (nEnemy > 0)
        {
            alignmentMove /= nEnemy;
        }

        return(alignmentMove);
    }
コード例 #3
0
    public override Vector3 CalculateMove(NavAgentController controller)
    {
        // if no neighbors, return no adjustment
        if (controller.rays.Count == 0)
        {
            return(Vector3.zero);
        }

        // add all points together and average
        Vector3 cohesionMove = Vector3.zero;

        foreach (NavAgentController.rayDot item in controller.rays)
        {
            cohesionMove += item.hitInfo.point;
        }
        cohesionMove /= controller.rays.Count;

        // create offset from agent position
        cohesionMove -= controller.transform.position;

        // Smooth
        cohesionMove = Vector3.SmoothDamp(controller.transform.forward, cohesionMove, ref currentVelocity, agentSmoothTime);

        return(cohesionMove);
    }
コード例 #4
0
 public virtual void SetInteraction(NavAgentController playerAgent)
 {
     Debug.Log("started intraction!");
     hasInteracted    = false;
     this.playerAgent = playerAgent;
     SetAgentMovement(GetInteractablePosition());
 }
コード例 #5
0
    public override Vector3 CalculateMove(NavAgentController controller)
    {
        if (controller.rays.Count == 0)
        {
            return(Vector3.zero);
        }

        Vector3 avoidanceMove = Vector3.zero;
        int     nAvoid        = 0;

        foreach (NavAgentController.rayDot r in controller.rays)
        {
            if (Vector3.SqrMagnitude(r.hitInfo.point - controller.transform.position) < controller.SquareAvoidanceRadius &&
                r.hitInfo.collider != null)
            {
                nAvoid++;
                avoidanceMove += controller.transform.position - r.hitInfo.point;
            }
        }

        if (nAvoid > 0)
        {
            avoidanceMove /= nAvoid;
        }

        return(avoidanceMove);
    }
コード例 #6
0
    public override Vector3 CalculateMove(NavAgentController controller)
    {
        Vector3 centerOffset = PlayerController.Instance.transform.position - controller.transform.position;
        float   t            = centerOffset.magnitude / radius;

        if (t < 0.9f)
        {
            return(Vector3.zero);
        }

        return(centerOffset * t * t);
    }
コード例 #7
0
    public override void Start()
    {
        spriteRend = GetComponentInChildren <SpriteRenderer>();
        baseMat    = spriteRend.material;
        rb         = GetComponent <Rigidbody>();
        navAgent   = GetComponent <NavAgentController>();

        base.Start();

        utilityAI = GetComponent <UtilityAIHandler>();
        vfx       = GetComponentInChildren <ParticleSystem>();
        if (vfx != null)
        {
            vfx.Stop();
        }

        audioSource = GetComponentInChildren <AudioSource>();
    }
コード例 #8
0
    public override Vector3 CalculateMove(NavAgentController controller)
    {
        // set up move
        Vector3 move = Vector3.zero;

        // Iterate through behaviors
        foreach (aiMoveBehavCol item in behaviors)
        {
            Vector3 partialMove = item.behavior.CalculateMove(controller) * item.Weight;

            if (partialMove != Vector3.zero)
            {
                if (partialMove.sqrMagnitude > item.Weight * item.Weight)
                {
                    partialMove.Normalize();
                    partialMove *= item.Weight;
                }

                move += partialMove;
            }
        }

        return(move);
    }
コード例 #9
0
 public abstract Vector3 CalculateMove(NavAgentController controller);
コード例 #10
0
 public void EndInteraction()
 {
     playerAgent   = null;
     hasInteracted = false;
 }
コード例 #11
0
 private void Start()
 {
     agentController = GetComponent <NavAgentController>();
 }