/// <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;
        }
    }
Exemplo n.º 2
0
 /// <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();
         });
         //展现读条动作
         //--------------------------
     }
 }
Exemplo n.º 3
0
 /// <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);
            });
        }
    }