//建造状态机 private void MakeFSM() { InspectionState inspection = new InspectionState(); inspection.AddTransition(Transition.SawPlayer, StateID.ChasingPlayer); inspection.AddTransition(Transition.LostPlayer, StateID.FollowingPath); PatrolState follow = new PatrolState(transform.position, scope); follow.AddTransition(Transition.SawPlayer, StateID.ChasingPlayer); follow.AddTransition(Transition.ArrivePath, StateID.Inspection); ChasePlayerState chase = new ChasePlayerState(); chase.AddTransition(Transition.LostPlayer, StateID.FollowingPath); chase.AddTransition(Transition.NearPlayer, StateID.AttackPlayer); AttackPlayerState attack = new AttackPlayerState(); attack.AddTransition(Transition.LostPlayer, StateID.FollowingPath); fsm = new FsmSystem(); fsm.AddState(inspection);//添加状态到状态机,第一个添加的状态将作为初始状态 fsm.AddState(follow); fsm.AddState(chase); fsm.AddState(attack); }
public AttackTarget(PersonBase myself, FsmSystem fsmSystem, Animator _anim) { myPerson = myself; stateID = StateID.Attack; Fsm = fsmSystem; anim = _anim; }
private void InitSystems() { _systemsManager = new SystemsManager(); _systemsManager.Push(new PlayerInputHandlingSystem(IntentProvider, _configurationService)); _systemsManager.Push(new CommandHandlingSystem()); _systemsManager.Push(new SpriteDrawingSystem(ContentManager, SpriteBatch)); _systemsManager.Push(new AnimationSystem(_configurationService.GetFps())); _systemsManager.Push(new MoveToScreenPositionSystem()); _systemsManager.Push(new TileEventsSystem()); var fsmSystem = new FsmSystem(); fsmSystem.RegisterHandler(new PlayerIdleHandler(ContentManager, InputMapProvider)); fsmSystem.RegisterHandler(new PlayerMovingHandler(InputMapProvider)); fsmSystem.RegisterHandler(new PlayerDeadHandler()); fsmSystem.RegisterHandler(new TileDestroyedHandler()); fsmSystem.RegisterHandler(new TileTouchedHandler()); fsmSystem.RegisterHandler(new EndOpenHandler()); _systemsManager.Push(fsmSystem); _systemsManager.Peek <PlayerInputHandlingSystem>().SetActive(true); _systemsManager.Peek <CommandHandlingSystem>().SetActive(true); _systemsManager.Peek <SpriteDrawingSystem>().SetActive(true); _systemsManager.Peek <AnimationSystem>().SetActive(true); _systemsManager.Peek <MoveToScreenPositionSystem>().SetActive(true); _systemsManager.Peek <FsmSystem>().SetActive(true); _systemsManager.Peek <TileEventsSystem>().SetActive(true); }
public override void Reason() { if (!PlayerInAttackRange()) // 超出攻击范围 { FsmSystem.ChangeStateTo <NPCChasePlayerState>(); } }
public MoveToTarget(PersonBase mySelf, FsmSystem fsmSystem, Animator _anim) { myPerson = mySelf; stateID = StateID.MoveToTarget; Fsm = fsmSystem; anim = _anim; }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { Player player = gameObject.GetComponent <Player>(); if (Input.GetKeyDown(KeyCode.Space)) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_JUMP); } if (Mathf.Abs(player.h) == 0 && Mathf.Abs(player.v) == 0) { fsmSystem.IsCanChange = true; if (player.IsInBattle) { fsmSystem.ChangeState(StateType.FSM_ATTACKIDLE); } else { fsmSystem.ChangeState(StateType.FSM_IDLE); } } if (Input.GetMouseButton(0)) { if (player.IsInBattle) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_ATTACK); } } }
// Use this for initialization void Start() { hearts = new GameObject[3]; bulletDisplay = new GameObject[3]; fsm = new FsmSystem(); fsm.AddState(new FsmState(FsmStateId.Player) .WithUpdateAction(PlayerUpdate) .WithTransition(FsmTransitionId.Complete, FsmStateId.Bullets) ); fsm.AddState(new FsmState(FsmStateId.Bullets) .WithBeforeEnteringAction(BulletProcess) .WithTransition(FsmTransitionId.Complete, FsmStateId.Monster) ); fsm.AddState(new FsmState(FsmStateId.Monster) .WithBeforeEnteringAction(MonsterProcess) .WithTransition(FsmTransitionId.Complete, FsmStateId.Player) ); GenLevel(); // add the health display for (int i = 0; i < 3; i++) { bulletDisplay [i] = (GameObject)Instantiate(spriteHolder, new Vector3(i + 3, map.sy, 0), Quaternion.identity); bulletDisplay [i].GetComponent <SpriteRenderer> ().sprite = bulletV; bulletDisplay [i].GetComponent <SpriteRenderer> ().color = Color.grey; hearts [i] = (GameObject)Instantiate(spriteHolder, new Vector3(i, map.sy, 0), Quaternion.identity); hearts [i].GetComponent <SpriteRenderer> ().sprite = heart; hearts [i].GetComponent <SpriteRenderer> ().color = Color.red; } // center the camera on the game Camera.main.transform.position = new Vector3(map.sx / 2, map.sy / 2, -10); }
public override void Reason() { if (PlayerInView()) //npc看到玩家, 开始追逐玩家 { FsmSystem.ChangeStateTo <NPCChasePlayerState>(); } }
public static void AddState <T>(BaseEntity entity, FsmSystem system, E_StateId stateId) where T : FsmState, new() { T t = new T(); t.entity = entity; system.AddState(t); }
//在构造函数内初始化这两个游戏物体 public EnemyState(Transform Player, Transform Npc, FsmSystem Fsm) { player = Player; npc = Npc; fsm = Fsm; SetStateName(); InitDic(); }
public void Initialize(FsmSystem fsmSystem, OperateStateBase[] states) { if (fsmSystem == null) { throw new Exception("FsmSystem为null"); } this.fsmSystem = fsmSystem; fsm = this.fsmSystem.CreatFsm(this, states); }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { //现在的动画状态 AnimatorStateInfo currentBaseState = gameObject.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0); if (currentBaseState.normalizedTime > 1 && currentBaseState.IsName("Jump")) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_IDLE); } }
public override void Reason() { if (!PlayerInView()) //npc视野失去玩家, 开始巡逻 { FsmSystem.ChangeStateTo <NPCPatrollingState>(); } else if (PlayerInAttackRange()) // 玩家进入npc攻击范围 { FsmSystem.ChangeStateTo <NPCAttackPlayerState>(); } }
// Use this for initialization void Start() { enemyFsm = new FsmSystem(); FsmStateBase patrol = new PatrolState(player, transform, enemyFsm); FsmStateBase trace = new TraceState(player, transform, enemyFsm); FsmStateBase attack = new AttackState(player, transform, enemyFsm); enemyFsm.AddState(patrol); enemyFsm.AddState(trace); enemyFsm.AddState(attack); }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { Player player = gameObject.GetComponent <Player>(); // AnimatorStateInfo currentBaseState = gameObject.GetComponent <Animator>().GetCurrentAnimatorStateInfo(1); if (currentBaseState.normalizedTime > 1 && (currentBaseState.IsName("Jab") || currentBaseState.IsName("Jab 0"))) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_ATTACKIDLE); } }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { GameObject player = GameObject.FindGameObjectWithTag("Player"); float distance = (player.transform.position - gameObject.transform.position).magnitude; if (distance > 5) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.EnemyPatrol); } }
public override void OnInitalization() { GameProcess = new FsmSystem(); GameProcess.RegisterFsmState <StateGameEnd>(); GameProcess.RegisterFsmState <StateGamePlaying>(); GameProcess.RegisterFsmState <StateGameReady>(); GameProcess.RegisterFsmState <StateGamePlayback>(); GameProcess.RegisterFsmState <StateGameInfoInit>(); GameProcess.RegisterFsmState <StateGameContinue>(); GameProcess.RegisterFsmState <StateGameReconnect>(); GameProcess.RegisterFsmState <StateGameSceneInit>(); }
void Start() { _fsm = FsmSystem <MenuStates> .Initialize(this); foreach (var obj in _menus) { _fsm.AddState(obj, obj.State); } _fsm.Push(MenuStates.Main); PlayerSettings.Instance.OnNameChange = UpdateName; UpdateName(); }
private void MakeFSM() { fsm = new FsmSystem <StateID>(); NormalMove crawl = new NormalMove(this); fsm.addState(StateID.CRAWL, crawl); StealMode steal = new StealMode(this); fsm.addState(StateID.STEAL, steal); fsm.init(StateID.CRAWL); }
/// <summary> /// 这里的状态不是指的AI,而是不同的状态下,播放不同的动作,接受不同的输入,有不同的行为 /// </summary> /// <returns></returns> public static FsmSystem CreateFsmSystem(BaseEntity entity) { FsmSystem fsmSystem = new FsmSystem(entity); AddState <EntityIdleState>(entity, fsmSystem, E_StateId.idle); AddState <EntityAttackState>(entity, fsmSystem, E_StateId.attack); AddState <EntitySleepState>(entity, fsmSystem, E_StateId.sleep); AddState <EntityMoveState>(entity, fsmSystem, E_StateId.move); AddState <EntityDieState>(entity, fsmSystem, E_StateId.die); AddState <EntitySkillState>(entity, fsmSystem, E_StateId.skill); AddState <EntityHurtState>(entity, fsmSystem, E_StateId.hurt); fsmSystem.Start(); return(fsmSystem); }
private void Start() { EnemyFollowState followState = new EnemyFollowState(); followState.onFixedUpdateMethod += onUpdateFollowState; EnemyPatrolState patrolState = new EnemyPatrolState(); patrolState.onFixedUpdateMethod += onUpdatePatrolState; fsmSystem = new FsmSystem(); fsmSystem.AddState(followState); fsmSystem.AddState(patrolState); fsmSystem.ChangeState(StateType.EnemyPatrol); enemy = this.gameObject.GetComponent <EnemyCharacter>(); player = GameObject.FindGameObjectWithTag("Player"); }
public void InitialState() { Prototype prototype = new Prototype(); Alpha alpha = new Alpha(); Release release = new Release(); FsmSystem <State> fsm = new FsmSystem <State>(); fsm.AddTransition(prototype, Transitions.Fix, alpha); fsm.AddTransition(alpha, Transitions.Optimize, release); fsm.SetInitialState(prototype); fsm.PerformTransition(Transitions.Fix); fsm.PerformTransition(Transitions.Optimize); Assert.AreEqual(fsm.GetCurrentState(), release); }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { Player player = gameObject.GetComponent <Player>(); if (Mathf.Abs(player.h) < 0.1f && Mathf.Abs(player.v) < 0.1f) { fsmSystem.IsCanChange = true; if (player.IsInBattle) { fsmSystem.ChangeState(StateType.FSM_ATTACKIDLE); } else { fsmSystem.ChangeState(StateType.FSM_IDLE); } } }
// Use this for initialization void Start() { player = FindObjectOfType <Player>(); IdleState idleState = new IdleState(); idleState.onEnterMethod += OnEnterIdleState; idleState.onUpdateMethod += OnUpDateIdleState; idleState.onFixedUpdateMethod += OnFixedUpDateIdleState; RunState runState = new RunState(); runState.onFixedUpdateMethod += OnFixedUpDateRunState; runState.onUpdateMethod += OnUpDateRunState; runState.onEnterMethod += OnEnterRunState; JumpState jumpState = new JumpState(); jumpState.onEnterMethod += OnEnterJumpState; AttackIdleState AttackIdleState = new AttackIdleState(); AttackIdleState.onEnterMethod += OnEnterAttackIdleState; AttackIdleState.onUpdateMethod += OnUpdateAttackIdleState; AttackWalkState attackWalkState = new AttackWalkState(); attackWalkState.onFixedUpdateMethod += OnFixedUpDateAttackWalkState; attackWalkState.onUpdateMethod += OnUpDateAttackWalkState; attackWalkState.onEnterMethod += OnEnterAttackWalkState; AttackDoState attackDoState = new AttackDoState(); //attackDoState.onFixedUpdateMethod += OnFixedUpDateAttackWalkState; attackDoState.onUpdateMethod += OnUpDateAttackDoState; attackDoState.onEnterMethod += OnEnterAttackDoState; fsmSystem = new FsmSystem(); fsmSystem.AddState(idleState); fsmSystem.AddState(runState); fsmSystem.AddState(jumpState); fsmSystem.AddState(AttackIdleState); fsmSystem.AddState(attackWalkState); fsmSystem.AddState(attackDoState); fsmSystem.ChangeState(StateType.FSM_IDLE); }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { Player player = gameObject.GetComponent <Player>(); AnimatorStateInfo currentBaseState = gameObject.GetComponent <Animator>().GetCurrentAnimatorStateInfo(1); if (player.IsInBattle && Mathf.Abs(player.h) > 0.1f || Mathf.Abs(player.v) > 0.1f) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_ATTACKWALK); } if (!player.IsInBattle && Mathf.Abs(player.h) > 0.1f || Mathf.Abs(player.v) > 0.1f) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_RUN); } if (Mathf.Abs(player.h) < 0.1f && Mathf.Abs(player.v) < 0.1f) { //如果离敌人距离过远 if (true) { if (!stateChanging) { player.StartCoroutine(DelayToInvokeDo(() => { fsmSystem.IsCanChange = true; player.IsInBattle = false; stateChanging = false; Debug.Log("进入攻击准备状态"); fsmSystem.ChangeState(StateType.FSM_IDLE); }, 5.0f)); stateChanging = true; } } } if (Input.GetMouseButton(0)) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_ATTACK); } }
private void InitFSMSystem() { fsm = new FsmSystem(); SeekTarget seekTarget = new SeekTarget(this, fsm, anim); seekTarget.AddTransition(Transition.MoveToTarget, StateID.MoveToTarget); seekTarget.AddTransition(Transition.Attack, StateID.Attack); MoveToTarget moveToTarget = new MoveToTarget(this, fsm, anim); moveToTarget.AddTransition(Transition.SeekTarget, StateID.SeekTarget); moveToTarget.AddTransition(Transition.Attack, StateID.Attack); AttackTarget attackTarget = new AttackTarget(this, fsm, anim); attackTarget.AddTransition(Transition.SeekTarget, StateID.SeekTarget); attackTarget.AddTransition(Transition.MoveToTarget, StateID.MoveToTarget); fsm.AddState(seekTarget); fsm.AddState(moveToTarget); fsm.AddState(attackTarget); }
public override void TriggerEvent(FsmSystem fsmSystem, GameObject gameObject) { Player player = gameObject.GetComponent <Player>(); if (Mathf.Abs(player.h) > 0.1f || Mathf.Abs(player.v) > 0.1f) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_RUN); } if (Input.GetKeyDown(KeyCode.Space)) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_JUMP); } if (Input.GetKeyDown(KeyCode.Z)) { fsmSystem.IsCanChange = true; fsmSystem.ChangeState(StateType.FSM_ATTACKIDLE); } }
public void SetOwner(FsmSystem _fsm) { machine = _fsm; }
/* * private void OnAddLabelToAutoLocaList(UILabel label, string locaCode) * { * * log.DebugMS("OnAddLabelToAutoLocaList - locaCode: " + locaCode); * // translate directly, no language switching supported anyway * label.text = Loca.Get(locaCode); * } */ public void ChangeState(string stateName, object onEnterParams = null) { FsmSystem.ChangeState(stateName, onEnterParams); }
// Use this for initialization void Start() { hearts = new GameObject[3]; bulletDisplay = new GameObject[3]; fsm = new FsmSystem (); fsm.AddState (new FsmState (FsmStateId.Player) .WithUpdateAction (PlayerUpdate) .WithTransition (FsmTransitionId.Complete, FsmStateId.Bullets) ); fsm.AddState (new FsmState (FsmStateId.Bullets) .WithBeforeEnteringAction (BulletProcess) .WithTransition (FsmTransitionId.Complete, FsmStateId.Monster) ); fsm.AddState (new FsmState (FsmStateId.Monster) .WithBeforeEnteringAction (MonsterProcess) .WithTransition (FsmTransitionId.Complete, FsmStateId.Player) ); GenLevel (); // add the health display for (int i = 0; i < 3; i++) { bulletDisplay [i] = (GameObject)Instantiate (spriteHolder, new Vector3 (i+3, map.sy, 0), Quaternion.identity); bulletDisplay [i].GetComponent<SpriteRenderer> ().sprite = bulletV; bulletDisplay [i].GetComponent<SpriteRenderer> ().color = Color.grey; hearts [i] = (GameObject)Instantiate (spriteHolder, new Vector3 (i, map.sy, 0), Quaternion.identity); hearts [i].GetComponent<SpriteRenderer> ().sprite = heart; hearts [i].GetComponent<SpriteRenderer> ().color = Color.red; } // center the camera on the game Camera.main.transform.position = new Vector3 (map.sx / 2, map.sy / 2, -10); }
public AttackState(Transform Player, Transform Npc, FsmSystem Fsm) : base(Player, Npc, Fsm) { }