Example #1
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);
    }
Example #2
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);
    }