public override bool GetNewTarget() { ResetOfficerTargetValues(); Status status = Status.Incapacitated; Vector3 currentPos = Self.transform.position; while ((int)status <= 4) { if ((int)status == 3) { status++; continue; } ILookup <Status, CitizenBehaviour> AllCitizens = WorldObjects.People.ToLookup(o => o.stats.CurrentStatus); IEnumerable <CitizenBehaviour> priorities = AllCitizens[status]; GameObject tMin = null; float minDist = Mathf.Infinity; foreach (var priority in priorities) { if (priority.committedCrime) { float dist = Vector3.Distance(priority.transform.position, currentPos); if (dist < minDist) { tMin = priority.gameObject; minDist = dist; } } } if (tMin != null) { CurrentActionTarget = tMin; targetScript = tMin.GetComponent <CitizenBehaviour> (); targetPosition = tMin.transform.GetChild(0).GetChild(0); if (Self.inBuilding) { Building_PublicService_PoliceStation policeStation = Self.HomeBuilding as Building_PublicService_PoliceStation; ExitBuilding(policeStation); } //Debug.Log("more criminal targets "); return(true); } status++; } targetPosition = Self.HomeBuilding.transform; returningHome = true; // Debug.Log("no more criminal targets "); return(false); }
public override void ExecuteAction() { base.ExecuteAction(); if (actionPaused) { return; } if (!targetArrested && !Self.inBuilding) { // Debug.Log ("Attempting chase"); var dist = Vector2.Distance(CurrentActionTarget.transform.root.position, Self.transform.root.position); if (dist < personScript.ViewRange) { if (!startedChase) { StartChase(); } } else { //Should they stop running if getting out of view range? if (startedChase) { startedChase = false; StopRunning(); } } } if (attemptingArrest) { //Debug.Log("Attempting Arrest"); ArrestTarget(targetScript); return; } if (jailingTarget) { JailTarget(); return; } if (chasingCriminal) { // Debug.Log("Chasing"); ChaseTarget(); } //check if you have reached target location yet if (ReachedTarget(Self.gameObject, targetPosition.transform.position)) { //Debug.Log("Reached target"); if (!targetArrested) { //Debug.Log("At target position"); if (targetScript.inBuilding) { //Debug.Log("Target inside building"); enteredBuilding = targetScript.CurrentAction.CurrentActionTarget.GetComponent <Building> (); EnterBuilding(enteredBuilding); } StartArrestAttempt(targetScript); } else if (returningHome) { // Debug.Log("Going home"); EnterBuilding(Self.HomeBuilding); //if no more criminals Building_PublicService_PoliceStation policeStation = Self.HomeBuilding as Building_PublicService_PoliceStation; policeStation.InactiveOfficers.Add(Self.gameObject); //JailTarget (); jailingTarget = true; //else set target as new criminal } } else { //Debug.Log("Moving to target"); MoveToTarget(personScript.CurrentMoveSpeed); } }