/// <summary> /// 设置物理技能攻击 /// </summary> /// <param name="playerObj">玩家操纵状态对象</param> /// <param name="physicsSkillStateStruct">本技能释放时的数据状态</param> /// <param name="skillType">技能类型</param> /// <param name="weaponTypeByPlayerState">武器类型</param> public void SetPhysicSkillAttack(IPlayerState iPlayerState, PhysicsSkillStateStruct physicsSkillStateStruct, EnumSkillType skillType, EnumWeaponTypeByPlayerState weaponTypeByPlayerState) { if (iPlayerState == null || physicsSkillStateStruct == null) { return; } IPlayerState _iPlayerState = iPlayerState; PhysicsSkillStateStruct _physicsSkillStateStruct = physicsSkillStateStruct; EnumSkillType _SKillType = skillType; EnumWeaponTypeByPlayerState _WeaponTypeByPlayerState = weaponTypeByPlayerState; PhysicSkillInjuryDetection physicSkillInjuryDetection = _iPlayerState.PhysicSkillInjuryDetection; if (physicSkillInjuryDetection != null) { physicSkillInjuryDetection.CheckAttack(_SKillType, _WeaponTypeByPlayerState, 1, null, (innerOrder, target) => { return(CalculatePhysicSkillHurt(_SKillType, _WeaponTypeByPlayerState, _physicsSkillStateStruct, innerOrder, target)); }); } //如果这是冲锋则开启任务(移动对象) switch (skillType) { case EnumSkillType.ZS03: float zs03Time = 0; runTaskStruct_Charge.StartTask(0, () => { zs03Time += Time.deltaTime; float speedRate = 0; if (zs03Time < 0.3f) { speedRate = 0; } else { speedRate = 1; } _iPlayerState.ForceMoveStruct = new ForceMoveStruct() { MoveSpeed = _physicsSkillStateStruct.AttributeState.MoveSpeed * speedRate }; if (zs03Time > 1f) { runTaskStruct_Charge.StopTask(); IAnimatorState iAnimatorState = GameState.Instance.GetEntity <IAnimatorState>(); iAnimatorState.SkillSustainable = false; } }, 0, false); break; } }
/// <summary> /// 处理组合技能(开始),此时开始读条 /// </summary> /// <param name="skillBaseStructs">技能数组</param> public void BeginCombineSkill(SkillBaseStruct[] skillBaseStructs) { if (skillBaseStructs == null) { this.skillBaseStructs = skillBaseStructs; this.readTheArticleOver = false; this.loosenTheReleaseKey = false; float readTheArticleTime = 2;//计算读条时间 runTaskStruct.StartTask(readTheArticleTime, () => { readTheArticleOver = true; ReleaseCombineSkill(); }); //展现读条动作 //-------------------------- } }
/// <summary> /// 游戏状态发生变化 /// </summary> /// <param name="iGameState"></param> /// <param name="fieldName"></param> private void IGameStateChanged_In_IMonsterCollection(IGameState iGameState, string fieldName) { if (string.Equals(fieldName, GameState.Instance.GetFieldName <IGameState, string>(temp => temp.SceneName)))//场景名发生变化说明切换了场景 { if (allMonsterObjDic != null) { foreach (KeyValuePair <MonsterDataInfo, List <GameObject> > item in allMonsterObjDic) { if (item.Value != null) { foreach (GameObject obj in item.Value) { try { GameObject.Destroy(obj); } catch { } } } } } allMonsterObjDic = new Dictionary <MonsterDataInfo, List <GameObject> >(); thisSceneCanCheckMonsterObjDic = new Dictionary <MonsterDataInfo, List <GameObject> >(); thisSceneCanCheckMonsterObjList = new List <GameObject>(); //加载该场景的怪物配置 MonsterData monsterData = DataCenter.Instance.GetMetaData <MonsterData>(); monsterDataInfos = monsterData.GetMonsterDataInfos(iGameState.SceneName); //创建检测 if (monsterDataInfos != null) { runTaskStruct_CheckMonster.InitTask(); runTaskStruct_CheckMonster.SetSpeed(1); runTaskStruct_CheckMonster.StartTask(UpdateTime, CheckMonsterDataInfoState, 0, true); } } }
/// <summary> /// 设置普通攻击 /// </summary> /// <param name="iPlayerState">玩家状态对象</param> /// <param name="attackOrder">攻击的编号</param> /// <param name="nowIAttributeState">本技能释放时的数据状态</param> /// <param name="weaponTypeByPlayerState">武器类型</param> public void SetNormalAttack(IPlayerState iPlayerState, int attackOrder, IAttributeState nowIAttributeState, EnumWeaponTypeByPlayerState weaponTypeByPlayerState) { if (iPlayerState == null || nowIAttributeState == null) { return; } IPlayerState _iPlayerState = iPlayerState; IAttributeState _NowIAttributeState = nowIAttributeState; EnumWeaponTypeByPlayerState _WeaponTypeByPlayerState = weaponTypeByPlayerState; IAnimatorState iAnimatorState = GameState.Instance.GetEntity <IAnimatorState>(); int _attackOrder = attackOrder; PhysicSkillInjuryDetection physicSkillInjuryDetection = _iPlayerState.PhysicSkillInjuryDetection; float runTime = 0;//检测超时时间 if (physicSkillInjuryDetection != null) { Action BeginCheckAttack = () => { runTaskStruct_NormalAttack.StopTask();//停止任务 physicSkillInjuryDetection.CheckAttack(EnumSkillType.PhysicAttack, _WeaponTypeByPlayerState, 1, null, (innerOrder, target) => { return(CalculateNormalActionHurt(_WeaponTypeByPlayerState, _NowIAttributeState, innerOrder, target)); }, attackOrder ); }; //该任务用于检测是否可以进入该普通攻击的检测 runTaskStruct_NormalAttack.StartTask(0, () => { switch (attackOrder) { case 1: if (iAnimatorState.AnimationClipTypeState != null && iAnimatorState.AnimationClipTypeState.AnimationClipType == EnumAnimationClipType.Attack1 && iAnimatorState.AnimationClipTypeState.TimeType == EnumAnimationClipTimeType.In) { BeginCheckAttack(); } break; case 2: if (iAnimatorState.AnimationClipTypeState != null && iAnimatorState.AnimationClipTypeState.AnimationClipType == EnumAnimationClipType.Attack2 && iAnimatorState.AnimationClipTypeState.TimeType == EnumAnimationClipTimeType.In) { BeginCheckAttack(); } break; case 3: if (iAnimatorState.AnimationClipTypeState != null && iAnimatorState.AnimationClipTypeState.AnimationClipType == EnumAnimationClipType.Attack3 && iAnimatorState.AnimationClipTypeState.TimeType == EnumAnimationClipTimeType.In) { BeginCheckAttack(); } break; default: runTaskStruct_NormalAttack.StopTask(); //停止任务 break; } }, 0, true, () => { runTime += Time.deltaTime; if (runTime > 1) { return(false); } return(true); }); } }