private void RegistState(AbstractNode node) { if (typeof(SkillPhaseState).IsAssignableFrom(node.GetType())) { SkillPhaseState skillPhaseState = (SkillPhaseState)node; skillPhaseState.SetSkill(_skill); AbstractNode parentNode = _hsmStateMachine.GetNode(node.ParentId); int configIndex = (null != parentNode) ? ((SubMachineSkill)parentNode).SkillConfigIndex : -1; int nodeUid = NodeUid(configIndex, skillPhaseState.PhaseType); _stateDic[nodeUid] = skillPhaseState; } else if (typeof(SkillHoldSkillState).IsAssignableFrom(node.GetType())) { SkillHoldSkillState skillHoldSkillState = (SkillHoldSkillState)node; skillHoldSkillState.SetSkill(_skill); } else if (typeof(SkillHoldFishState).IsAssignableFrom(node.GetType())) { SkillHoldFishState skillHoldFishState = (SkillHoldFishState)node; skillHoldFishState.SetSkill(_skill); } else if (typeof(SkillNextStage).IsAssignableFrom(node.GetType())) { SkillNextStage skillNextStage = (SkillNextStage)node; skillNextStage.SetEnterCallBack(EnterNextStage); } else if (typeof(SkillExitState).IsAssignableFrom(node.GetType())) { SkillExitState skillExitState = (SkillExitState)node; skillExitState.SetEnterCallBack(EixtSkill); } }
private SkillPhaseState GetPhaseState(int configInde, SkillConfigSkillPhaseType phaseType) { SkillPhaseState state = null; int nodeUid = NodeUid(configInde, phaseType); if (_stateDic.TryGetValue(nodeUid, out state)) { return(state); } return(state); }
private void ChangeState(int configIndex, SkillPhaseType phaseType) { if (phaseType < SkillPhaseType.INITIAL_PHASE || phaseType > SkillPhaseType.NONE) { return; } if (_lastConfigIndex != configIndex) { _lastConfigIndex = configIndex; NextAct(false); } int intValue = (int)phaseType; UpdateEnvironment(); SkillPhaseState state = GetPhaseState(configIndex, (SkillConfigSkillPhaseType)intValue); bool result = _hsmStateMachine.StateMachineTransition.ChangeDestinationNode(state); //Debug("++++++++++++++++ ChangeNode:" + _skill.weaponId + " configIndex:" + configIndex + " phaseType:" + phaseType + " nodeId:" + state.NodeId + " " + result + " time:" + Extend.GameUtils.GetMillisecond()); }