Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }