Example #1
0
        void zombieTargetUpdate(RaycastHit hit)
        {
            GameObject[] zombies          = GameObject.FindGameObjectsWithTag("Zombie");
            GameObject   commandCandidate = null;
            bool         acceptedTaskFlag = false;

            for (uint i = 0; i < 2; ++i)
            {
                float minSqrDistance = -1.0f;
                foreach (GameObject zombie in zombies)
                {
                    ZombieBehavior              zb = zombie.GetComponent <ZombieBehavior>();
                    HealthComponent             hc = zombie.GetComponent <HealthComponent>();
                    UnityEngine.AI.NavMeshAgent na = zombie.GetComponent <UnityEngine.AI.NavMeshAgent>();
                    if (zb != null && zb.enabled && zb.hasPlayerTask() == acceptedTaskFlag &&
                        hc != null && hc.enabled && !hc.isDead() && na != null && na.enabled)
                    {
                        float sqrDistance = (hit.point - zb.transform.position).sqrMagnitude;
                        if (minSqrDistance == -1.0f || sqrDistance < minSqrDistance)
                        {
                            commandCandidate = zombie;
                            minSqrDistance   = sqrDistance;
                        }
                    }
                }

                if (commandCandidate != null)
                {
                    // add dummy destination marker:
                    UnityEngine.AI.NavMeshPath path = new UnityEngine.AI.NavMeshPath();
                    Vector3 hitPoint = CrosshairBehaviour.getRecentlyFocusedHuman() != null?CrosshairBehaviour.getRecentlyFocusedHuman().transform.position : hit.point;

                    UnityEngine.AI.NavMesh.CalculatePath(commandCandidate.transform.position, hitPoint, UnityEngine.AI.NavMesh.AllAreas, path);
                    if (path.corners.Length > 0)
                    {
                        Vector3    destinationPosition = path.corners[path.corners.Length - 1];
                        GameObject destinationMarker   = (GameObject)Instantiate(MainGameManager.instance.destinationMarker);
                        destinationMarker.transform.position    = new Vector3(destinationPosition.x, destinationPosition.y + 0.01f, destinationPosition.z);
                        destinationMarker.transform.eulerAngles = new Vector3(90.0f, 0.0f, 0.0f);
                        commandCandidate.GetComponent <ZombieBehavior>().setTargetFromRaycastHit(hit);
                    }
                    break;
                }
                else
                {
                    acceptedTaskFlag = !acceptedTaskFlag;
                }
            }
        }
Example #2
0
    public void setTargetFromRaycastHit( RaycastHit hit )
	{
        // getChildRootObject for Humans/Zombies contained in the HumanParent/ZombieParent
        //GameObject colliderRootObject = getChildRootObject(hit.collider.gameObject.transform.parent.gameObject);
		GameObject colliderRootObject = CrosshairBehaviour.getRecentlyFocusedHuman() != null ? CrosshairBehaviour.getRecentlyFocusedHuman() : getRootObject(hit.collider.gameObject.transform.parent.gameObject);
        if (colliderRootObject.tag == getOpposingFactionTag ()) {
			setObjectOfInterest (colliderRootObject);
			m_positionOfInterest = m_objectOfInterest.GetComponent< Transform > ().position;
		} else {
			setObjectOfInterest (null);
			m_positionOfInterest = hit.point;
		}
        	
		m_state = State.ApproachTarget;
		m_hasPlayerTask = true;
	}