コード例 #1
0
    // Use this for initialization
    void Start()
    {
        m_FSM              = new FSMSystem(m_Data);
        m_Data.m_Go        = this.gameObject;
        m_Data.m_FSMSystem = m_FSM;


        FSMIdleState   idlestate   = new FSMIdleState();
        FSMMoveToState mtstate     = new FSMMoveToState();
        FSMChaseState  chasestate  = new FSMChaseState();
        FSMAttackState attackstate = new FSMAttackState();

        idlestate.AddTransition(eFSMTransition.Go_MoveTo, mtstate);
        idlestate.AddTransition(eFSMTransition.Go_Chase, chasestate);
        idlestate.AddTransition(eFSMTransition.Go_Attack, attackstate);

        mtstate.AddTransition(eFSMTransition.Go_Idle, idlestate);
        mtstate.AddTransition(eFSMTransition.Go_Chase, chasestate);
        mtstate.AddTransition(eFSMTransition.Go_Attack, attackstate);

        chasestate.AddTransition(eFSMTransition.Go_Idle, idlestate);
        chasestate.AddTransition(eFSMTransition.Go_Attack, attackstate);

        attackstate.AddTransition(eFSMTransition.Go_Idle, idlestate);
        attackstate.AddTransition(eFSMTransition.Go_Chase, chasestate);

        FSMDeadState dstate = new FSMDeadState();

        m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, dstate);
        Debug.Log("add state");
        m_FSM.AddState(idlestate);
        m_FSM.AddState(mtstate);
        m_FSM.AddState(chasestate);
        m_FSM.AddState(attackstate);
        m_FSM.AddState(dstate);
    }
コード例 #2
0
ファイル: Citizen.cs プロジェクト: MaxLykoS/WuHanSandbox
    public void Init(int id, CitizenType citizenType)
    {
        #region 初始化参数
        timeAlive           = 0;
        ID                  = id;
        CitizenType         = citizenType;
        bWearingMask        = false;
        bRecalculatePathKey = false;
        bCheckAmbulanceKey  = false;

        CureTimeTotal   = CitizenMgr.GenerateCureTime();
        LatentTimeTotal = CitizenMgr.GenerateLatentTime();
        ToHospTimeTotal = CitizenMgr.GenerateToHospitalTime();
        AliveTimeTotal  = CitizenMgr.GenerateAliveTime();
        InfectRate      = CitizenMgr.GenerateInfectRate();
        #endregion

        #region 初始化组件
        spriteRenderer = GetComponent <SpriteRenderer>();
        navAgent       = GetComponent <NavMeshAgent>();
        animator       = GetComponent <Animator>();
        citizenStatus  = GetComponent <CitizenStatus>();
        boxCollider    = GetComponent <BoxCollider>();

        navAgent.updateRotation = false;
        citizenStatus.Init(transform);
        #endregion

        #region 初始化状态机
        fsmSystem = new FSMSystem();

        FSMHealthyState healthyState = new FSMHealthyState(fsmSystem);
        healthyState.AddTransition(FSMTransition.Infected, FSMStateID.LatentFSMStateID);

        FSMLatentState latentState = new FSMLatentState(fsmSystem);
        latentState.AddTransition(FSMTransition.AfterLatent, FSMStateID.IllFSMStateID);
        latentState.AddTransition(FSMTransition.TookByAmbulance, FSMStateID.ToHospitalFSMStateID);
        latentState.AddTransition(FSMTransition.CantTakeAmbulance, FSMStateID.WaitToHospFSMStateID);

        FSMIllState illState = new FSMIllState(fsmSystem);
        illState.AddTransition(FSMTransition.WantHealing, FSMStateID.WaitToHospFSMStateID);
        illState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID);
        illState.AddTransition(FSMTransition.TookByAmbulance, FSMStateID.ToHospitalFSMStateID);
        illState.AddTransition(FSMTransition.CantTakeAmbulance, FSMStateID.WaitToHospFSMStateID);

        FSMWaitHospState waitToHospitalState = new FSMWaitHospState(fsmSystem);
        waitToHospitalState.AddTransition(FSMTransition.BedsAvailable, FSMStateID.ToHospitalFSMStateID);
        waitToHospitalState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID);

        FSMToHospitalState toHospitalState = new FSMToHospitalState(fsmSystem);
        toHospitalState.AddTransition(FSMTransition.ReachHospital, FSMStateID.InHospitalFSMStateID);
        toHospitalState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID);

        FSMInHospitalState inHospitalState = new FSMInHospitalState(fsmSystem);
        inHospitalState.AddTransition(FSMTransition.Healed, FSMStateID.CuredFSMStateID);
        inHospitalState.AddTransition(FSMTransition.HealingFailed, FSMStateID.DeadFSMStateID);
        inHospitalState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID);

        FSMCuredState curedState = new FSMCuredState(fsmSystem);
        FSMDeadState  deadState  = new FSMDeadState(fsmSystem);

        List <FSMBaseState> statesList = new List <FSMBaseState> {
            healthyState, latentState, illState, waitToHospitalState,
            toHospitalState, inHospitalState, curedState, deadState
        };
        foreach (FSMBaseState state in statesList)
        {
            state.Init(this, animator);
        }
        switch (citizenType)
        {
        case CitizenType.Healthy: fsmSystem.AddFSMSate(healthyState); CitizenType = CitizenType.Healthy; break;

        case CitizenType.Latent: fsmSystem.AddFSMSate(latentState); CitizenType = CitizenType.Latent; break;

        case CitizenType.Ill: fsmSystem.AddFSMSate(illState); CitizenType = CitizenType.Ill; break;

        case CitizenType.InHospital: fsmSystem.AddFSMSate(inHospitalState); CitizenType = CitizenType.InHospital; break;

        case CitizenType.Cured: fsmSystem.AddFSMSate(curedState); CitizenType = CitizenType.Cured; break;

        case CitizenType.Dead: fsmSystem.AddFSMSate(deadState); CitizenType = CitizenType.Dead; break;
        }
        foreach (FSMBaseState state in statesList)
        {
            fsmSystem.AddFSMSate(state);
        }
        #endregion

        #region 初始化动画
        int controllerIndex = Random.Range(0, 4);
        AnimatorOverrideController controller = new AnimatorOverrideController();
        switch (controllerIndex)
        {
        case 0:
            controller.runtimeAnimatorController = CitizenMgr.Instance.F1;
            break;

        case 1:
            controller.runtimeAnimatorController = CitizenMgr.Instance.F2;
            break;

        case 2:
            controller.runtimeAnimatorController = CitizenMgr.Instance.M1;
            break;

        case 3:
            controller.runtimeAnimatorController = CitizenMgr.Instance.M2;
            break;

        default:
            controller.runtimeAnimatorController = CitizenMgr.Instance.F1;
            break;
        }
        animator.runtimeAnimatorController = controller;
        #endregion
    }
コード例 #3
0
ファイル: PatrolAI.cs プロジェクト: woody8876/HELLDIVERS_Like
    protected override void Start()
    {
        m_AIData = new MobInfo();
        GameData.Instance.MobInfoTable[3200].CopyTo(m_AIData);

        m_MaxHp = m_AIData.m_fHp;
        base.Start();

        m_MobAnimator                  = this.GetComponent <MobAnimationsController>();
        m_BobyCollider                 = this.GetComponent <BoxCollider>();
        m_DamageCollider               = GetComponentInChildren <CapsuleCollider>();
        m_MobAimLine                   = this.GetComponent <MobAimLine>();
        m_FSM                          = new FSMSystem(m_AIData);
        m_AIData.m_Go                  = this.gameObject;
        m_AIData.m_FSMSystem           = m_FSM;
        m_AIData.m_AnimationController = this.GetComponent <MobAnimationsController>();
        m_AIData.navMeshAgent          = this.GetComponent <NavMeshAgent>();
        m_AIData.navMeshAgent.enabled  = false;
        m_AIData.m_MobAimLine          = m_MobAimLine;
        m_AIData.m_SoundManager        = m_SoundManager;

        #region FSMMap

        #region Phase1

        m_WanderIdleState.AddTransition(eFSMTransition.Go_Wander, m_WanderState);
        m_WanderIdleState.AddTransition(eFSMTransition.Go_Flee, m_FleeState);
        m_WanderIdleState.AddTransition(eFSMTransition.Go_Idle, m_IdleState);

        m_WanderState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);
        m_WanderState.AddTransition(eFSMTransition.Go_Flee, m_FleeState);

        m_FleeState.AddTransition(eFSMTransition.Go_CallArmy, m_CallArmyState);
        #endregion

        #region Phase2

        m_CallArmyState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_CallArmyState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState);

        m_Chasestate.AddTransition(eFSMTransition.Go_Attack, m_PatrolAttackstate);

        m_DodgeState.AddTransition(eFSMTransition.Go_Attack, m_PatrolAttackstate);

        m_PatrolAttackstate.AddTransition(eFSMTransition.Go_Idle, m_IdleState);
        m_PatrolAttackstate.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);

        m_IdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_IdleState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState);
        m_IdleState.AddTransition(eFSMTransition.Go_Attack, m_PatrolAttackstate);

        m_FSMNoPlayerWanderIdleState.AddTransition(eFSMTransition.Go_NoPlayerWander, m_FSMNoPlayerWander);
        m_FSMNoPlayerWanderIdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_FSMNoPlayerWanderIdleState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState);


        m_FSMNoPlayerWander.AddTransition(eFSMTransition.Go_NoPlayerWanderIdle, m_FSMNoPlayerWanderIdleState);
        m_FSMNoPlayerWander.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_FSMNoPlayerWander.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState);
        #endregion

        FSMPatrolGetHurtState m_GetHurtState = new FSMPatrolGetHurtState();
        FSMDeadState          m_DeadState    = new FSMDeadState();

        m_GetHurtState.AddTransition(eFSMTransition.Go_Flee, m_FleeState);
        m_GetHurtState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_GetHurtState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState);
        m_DeadState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);

        m_FSM.AddGlobalTransition(eFSMTransition.Go_NoPlayerWanderIdle, m_FSMNoPlayerWanderIdleState);
        m_FSM.AddGlobalTransition(eFSMTransition.Go_PatrolGetHurt, m_GetHurtState);
        m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, m_DeadState);

        m_FSM.AddState(m_WanderIdleState);
        m_FSM.AddState(m_WanderState);
        m_FSM.AddState(m_FleeState);
        m_FSM.AddState(m_CallArmyState);
        m_FSM.AddState(m_Chasestate);
        m_FSM.AddState(m_DodgeState);
        m_FSM.AddState(m_PatrolAttackstate);
        m_FSM.AddState(m_IdleState);
        m_FSM.AddState(m_FSMNoPlayerWanderIdleState);
        m_FSM.AddState(m_FSMNoPlayerWander);
        m_FSM.AddState(m_GetHurtState);
        m_FSM.AddState(m_DeadState);
        #endregion
    }
コード例 #4
0
ファイル: FishAI.cs プロジェクト: woody8876/HELLDIVERS_Like
    protected override void Start()
    {
        m_AIData = new MobInfo();
        GameData.Instance.MobInfoTable[3100].CopyTo(m_AIData);

        m_MaxHp = m_AIData.m_fHp;
        base.Start();

        m_MobAnimator                  = this.GetComponent <MobAnimationsController>();
        m_BodyCollider                 = this.GetComponent <BoxCollider>();
        m_DamageCollider               = this.GetComponentInChildren <CapsuleCollider>();
        m_FSM                          = new FSMSystem(m_AIData);
        m_AIData.m_Go                  = this.gameObject;
        m_AIData.m_FSMSystem           = m_FSM;
        m_AIData.m_AnimationController = this.GetComponent <MobAnimationsController>();
        m_AIData.navMeshAgent          = this.GetComponent <NavMeshAgent>();
        m_AIData.navMeshAgent.speed    = Random.Range(6.5f, 7.0f);
        m_AIData.navMeshAgent.enabled  = false;
        m_AIData.m_SoundManager        = m_SoundManager;

        #region FSMMap
        FSMRespawnState    m_RespawnState    = new FSMRespawnState();
        FSMChaseState      m_Chasestate      = new FSMChaseState();
        FSMAttackState     m_Attackstate     = new FSMAttackState();
        FSMIdleState       m_IdleState       = new FSMIdleState();
        FSMWanderIdleState m_WanderIdleState = new FSMWanderIdleState();
        FSMWanderState     m_WanderState     = new FSMWanderState();

        m_RespawnState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);

        m_Chasestate.AddTransition(eFSMTransition.Go_Attack, m_Attackstate);

        m_Attackstate.AddTransition(eFSMTransition.Go_Idle, m_IdleState);
        m_Attackstate.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);

        m_IdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_IdleState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate);

        m_WanderIdleState.AddTransition(eFSMTransition.Go_Wander, m_WanderState);
        m_WanderIdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);

        m_WanderState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);
        m_WanderState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);

        FSMFishGetHurtState m_GetHurtState = new FSMFishGetHurtState();
        FSMDeadState        m_DeadState    = new FSMDeadState();

        m_GetHurtState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate);
        m_GetHurtState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate);

        m_DeadState.AddTransition(eFSMTransition.Go_Respawn, m_RespawnState);

        m_FSM.AddGlobalTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);
        m_FSM.AddGlobalTransition(eFSMTransition.Go_FishGetHurt, m_GetHurtState);
        m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, m_DeadState);

        m_FSM.AddState(m_RespawnState);
        m_FSM.AddState(m_WanderIdleState);
        m_FSM.AddState(m_IdleState);
        m_FSM.AddState(m_Chasestate);
        m_FSM.AddState(m_Attackstate);
        m_FSM.AddState(m_GetHurtState);
        m_FSM.AddState(m_DeadState);
        m_FSM.AddState(m_WanderState);
        #endregion
    }
コード例 #5
0
ファイル: TankAI.cs プロジェクト: woody8876/HELLDIVERS_Like
    protected override void Start()
    {
        m_AIData = new MobInfo();
        GameData.Instance.MobInfoTable[3400].CopyTo(m_AIData);
        m_SoundManager = this.GetComponent <SoundManager>();
        SoundDataSetting Soundsetting = ResourceManager.m_Instance.LoadData(typeof(SoundDataSetting), "Sounds/Mobs/Tank", "SoundDataSetting") as SoundDataSetting;

        m_SoundManager.SetAudioClips(Soundsetting.SoundDatas);

        m_MaxHp = m_AIData.m_fHp;
        base.Start();

        m_MobAnimator                  = this.GetComponent <MobAnimationsController>();
        m_BodyCollider                 = this.GetComponent <BoxCollider>();
        m_DamageCollider               = GetComponentInChildren <CapsuleCollider>();
        m_FSM                          = new FSMSystem(m_AIData);
        m_AIData.m_Go                  = this.gameObject;
        m_AIData.m_FSMSystem           = m_FSM;
        m_AIData.m_AnimationController = this.GetComponent <MobAnimationsController>();
        m_AIData.navMeshAgent          = this.GetComponent <NavMeshAgent>();
        m_AIData.navMeshAgent.speed    = Random.Range(4.5f, 5.0f);
        m_AIData.navMeshAgent.enabled  = false;
        m_AIData.m_SoundManager        = m_SoundManager;

        FSMRespawnState             m_RespawnState             = new FSMRespawnState();
        FSMChaseToRemoteAttackState m_ChaseToRemoteAttackState = new FSMChaseToRemoteAttackState();
        FSMChaseToMeleeAttackState  m_ChaseToMeleeAttackState  = new FSMChaseToMeleeAttackState();
        FSMAttackState       m_Attackstate       = new FSMAttackState();
        FSMRemoteAttackState m_RemoteAttackstate = new FSMRemoteAttackState();
        FSMTankIdleState     m_TankIdleState     = new FSMTankIdleState();
        FSMWanderIdleState   m_WanderIdleState   = new FSMWanderIdleState();
        FSMWanderState       m_WanderState       = new FSMWanderState();

        m_RespawnState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);

        m_ChaseToRemoteAttackState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate);

        m_RemoteAttackstate.AddTransition(eFSMTransition.Go_TankIdle, m_TankIdleState);

        m_TankIdleState.AddTransition(eFSMTransition.Go_ChaseToRemoteAttack, m_ChaseToRemoteAttackState);
        m_TankIdleState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate);
        m_TankIdleState.AddTransition(eFSMTransition.Go_ChaseToMeleeAttack, m_ChaseToMeleeAttackState);
        m_TankIdleState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate);

        m_ChaseToMeleeAttackState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate);
        m_ChaseToMeleeAttackState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate);

        m_Attackstate.AddTransition(eFSMTransition.Go_TankIdle, m_TankIdleState);

        m_WanderIdleState.AddTransition(eFSMTransition.Go_ChaseToRemoteAttack, m_ChaseToRemoteAttackState);
        m_WanderIdleState.AddTransition(eFSMTransition.Go_Wander, m_WanderState);

        m_WanderState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);

        FSMTankGetHurtState m_GetHurtState = new FSMTankGetHurtState();
        FSMDeadState        m_DeadState    = new FSMDeadState();

        m_GetHurtState.AddTransition(eFSMTransition.Go_ChaseToRemoteAttack, m_ChaseToRemoteAttackState);
        m_GetHurtState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate);

        m_DeadState.AddTransition(eFSMTransition.Go_Respawn, m_RespawnState);

        m_FSM.AddGlobalTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState);
        m_FSM.AddGlobalTransition(eFSMTransition.Go_TankGetHurt, m_GetHurtState);
        m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, m_DeadState);


        m_FSM.AddState(m_RespawnState);
        m_FSM.AddState(m_ChaseToRemoteAttackState);
        m_FSM.AddState(m_ChaseToMeleeAttackState);
        m_FSM.AddState(m_Attackstate);
        m_FSM.AddState(m_RemoteAttackstate);
        m_FSM.AddState(m_TankIdleState);
        m_FSM.AddState(m_WanderIdleState);
        m_FSM.AddState(m_WanderState);
        m_FSM.AddState(m_GetHurtState);
        m_FSM.AddState(m_DeadState);
    }