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); }
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); }
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); }
public virtual void SetInteraction(NavAgentController playerAgent) { Debug.Log("started intraction!"); hasInteracted = false; this.playerAgent = playerAgent; SetAgentMovement(GetInteractablePosition()); }
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); }
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); }
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>(); }
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); }
public abstract Vector3 CalculateMove(NavAgentController controller);
public void EndInteraction() { playerAgent = null; hasInteracted = false; }
private void Start() { agentController = GetComponent <NavAgentController>(); }