Ejemplo n.º 1
0
    void FixedUpdate()
    {
        lineOfSight.enabled = _config.lightIsOn;
        lineOfSight.SetStatus(LineOfSight.Status.Idle);

        if (lineOfSight.enabled)
        {
            if (lineOfSight.SeeByTag("Player"))
            {
                List <GameObject> obs    = lineOfSight.getViewing();
                GameObject        obj    = obs[0];
                Player            player = obj.GetComponent <Player>();

                if (player != null)
                {
                    if (!player.disguised)
                    {
                        Collider[] colliders = Physics.OverlapSphere(gameObject.transform.position, alertRadious);

                        GameObject nearest     = null;
                        float      nearestDist = 0f;

                        foreach (Collider c in colliders)
                        {
                            if (c.tag.Equals("Soldier"))
                            {
                                float dist = Vector3.Distance(c.gameObject.transform.position, transform.position);
                                if (nearest == null || dist < nearestDist)
                                {
                                    nearestDist = dist;
                                    nearest     = c.gameObject;
                                }
                            }
                        }

                        if (nearest != null)
                        {
                            FSMManager      g    = nearest.GetComponent <FSMManager>();
                            BasicObjectAttr attr = nearest.GetComponent <BasicObjectAttr>();
                            // We arrive to destination
                            List <SearchConfig> searchConf = g.GetBasicState().GetSearchConfig();
                            foreach (SearchConfig sc in searchConf)
                            {
                                if (sc.doWhenAlert != null)
                                {
                                    IAState st = sc.doWhenAlert.Invoke(obj);
                                    g.setCurrentState(st);
                                }
                            }
                        }
                        lineOfSight.SetStatus(LineOfSight.Status.Alerted);
                    }
                    else
                    {
                        lineOfSight.SetStatus(LineOfSight.Status.Suspicious);
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
    void Start()
    {
        FSMManager manager = GetComponent <FSMManager>();

        RandomState search = new RandomState();
        FollowState follow = new FollowState();
        EatState    eat    = new EatState();

        /**
         *  Search for "food"
         *      when locate -> follow it
         *          When arrive -> eat it;
         */
        manager.GetBasicState()
        .configure("Food",
                   o => follow.whenArrive((e) => eat.setToEat(e).setAfterEat((s) => search), o), (o) => {
            Debug.LogError("GOTCHA");
            return(null);
        });

        /**
         *  Search for "player"
         *      when locate -> follow it
         *          When arrive -> attack it;
         */
        //        search.config("Player", o => follow.config((e) => attack.setTarget(e), o));

        manager.setCurrentState(search);
    }
Ejemplo n.º 3
0
    void Start()
    {
        fromAttr = GetComponent <BasicObjectAttr>();
        this.originalPos.transform.parent = null;
        FSMManager   manager = GetComponent <FSMManager>();
        NavMeshAgent agent   = GetComponent <NavMeshAgent>();

        RandomState search = new RandomState();
        FollowState follow = new FollowState();
        IdleState   idle   = new IdleState();

        idle.isInfinite = true;
        InvestigateState investigateState = new InvestigateState();

        manager.GetBasicState().configure("Player",
                                          (o) => {
            return(null);
        },
                                          (o) => {
            investigateState.setTargetPos(o.transform.position);
            investigateState.SetDoWhenArrive((s) => {
                Collider[] coll = Physics.OverlapSphere(gameObject.transform.position, fromAttr.dangerViewAreaRadius);
                Debug.Log("Clll" + coll.Length);
                foreach (Collider c in coll)
                {
                    if (c.tag.Equals("Player"))
                    {
                        var go            = Camera.main.GetComponent <GameOverCameraControl>();
                        go.showDeadEffect = true;
                        return(null);
                    }
                }

                idle.time       = fromAttr.investigateWaitTime;
                idle.isInfinite = false;
                idle.onComplete((s1) => {
                    investigateState.setTargetPos(this.originalPos.transform.position);
                    investigateState.SetDoWhenArrive((s2) => {
                        idle.isInfinite    = true;
                        transform.rotation = this.originalPos.transform.rotation;
                        agent.destination  = this.transform.position;
                        return(idle);
                    });
                    return(investigateState);
                });
                return(idle);
            });

            return(investigateState);
        });
        manager.setCurrentState(idle);
    }
Ejemplo n.º 4
0
    void Start()
    {
        fromAttr = GetComponent <BasicObjectAttr>();
        FSMManager manager = GetComponent <FSMManager>();

        RandomState      search           = new RandomState();
        FollowState      follow           = new FollowState();
        IdleState        idle             = new IdleState();
        PatrolState      patrol           = new PatrolState();
        InvestigateState investigateState = new InvestigateState();


        patrol.patrolRoute = patrolRoute;
        patrol.setAgent(GetComponent <NavMeshAgent>());
        manager.GetBasicState().configure("Player",
                                          (o) => {
            investigateState.setTargetPos(o.transform.position).SetDoWhenArrive(null);
            return(investigateState);
        },
                                          (o) => {
            investigateState.setTargetPos(o.transform.position);
            investigateState.SetDoWhenArrive((s) => {
                Collider[] coll = Physics.OverlapSphere(gameObject.transform.position, fromAttr.dangerViewAreaRadius);
                foreach (Collider c in coll)
                {
                    if (c.tag.Equals("Player"))
                    {
                        var go            = Camera.main.GetComponent <GameOverCameraControl>();
                        go.showDeadEffect = true;
                        return(null);
                    }
                }

                return(patrol);
            });

            return(investigateState);
        });
        manager.setCurrentState(patrol);
    }