Exemple #1
0
 //持续作用技能
 private void HandleContinueSkillData(SkillCom skillCom, SkillDataJson dataJson)
 {
     skillCom.Line.AddTrack((float)dataJson.Time, (float)dataJson.ContinueTime).OnUpdate(() =>
     {
         ECSLocate.ECSLog.LogR("持续作用技能>>>>>>> ", skillCom.SkillId, dataJson.Data);
     });
 }
Exemple #2
0
        //技能数值
        private void HandleSkillData(SkillCom skillCom, List <SkillDataJson> datas)
        {
            for (int i = 0; i < datas.Count; i++)
            {
                SkillDataJson dataJson = datas[i];
                switch (dataJson.Type)
                {
                case SkillType.Once:
                    HandleOnceSkillData(skillCom, dataJson);
                    break;

                case SkillType.Continue:
                    HandleContinueSkillData(skillCom, dataJson);
                    break;

                case SkillType.Gap:
                    HandleGapSkillData(skillCom, dataJson);
                    break;

                case SkillType.Buff:
                    HandleBuffSkillData(skillCom, dataJson);
                    break;

                default:
                    break;
                }
            }
        }
Exemple #3
0
 //作用一次技能
 private void HandleOnceSkillData(SkillCom skillCom, SkillDataJson dataJson)
 {
     skillCom.Line.AddTrack((float)dataJson.Time, 0).OnStart(() =>
     {
         ECSLocate.ECSLog.LogR("作用一次技能>>>>>>> ", skillCom.SkillId, dataJson.Data);
     });
 }
Exemple #4
0
 public void LearnSkill(SkillCom target, string skillId, int level = 1)
 {
     if (SkillLocate.Model.GetSkillModel(skillId, out SkillModel model))
     {
         target.LearnSkill(model, level);
     }
 }
Exemple #5
0
        public void CreateAoe(SkillCom ower, AddAoeModel addAoe)
        {
            if (SkillLocate.Model.GetAoeModel(addAoe.id, out AoeModel model))
            {
                AoeCom aoeCom = LCECS.ECSLocate.ECS.GetWorld().GetCom <AoeCom>();
                AoeObj aoeObj = new AoeObj();

                //配置
                aoeObj.model = model;

                //预制体
                if (model.asset != null && !string.IsNullOrEmpty(model.asset.ObjName))
                {
                    aoeObj.go = ToolkitLocate.GoPool.Take(model.asset.ObjName);
                }

                //拥有者
                aoeObj.ower = ower;

                //配置数据
                aoeObj.size     = addAoe.size;
                aoeObj.duration = addAoe.duration;
                aoeObj.follow   = addAoe.follow;

                //保存
                aoeCom.AddAoe(aoeObj);
            }
        }
Exemple #6
0
        public void CreateBullet(SkillCom ower, AddBulletModel addBullet)
        {
            if (SkillLocate.Model.GetBulletModel(addBullet.id, out BulletModel model))
            {
                BulletCom bulletCom = LCECS.ECSLocate.ECS.GetWorld().GetCom <BulletCom>();

                BulletObj bulletObj = new BulletObj();

                //配置
                bulletObj.model = model;

                //预制体
                if (model.asset != null && !string.IsNullOrEmpty(model.asset.ObjName))
                {
                    bulletObj.go = ToolkitLocate.GoPool.Take(model.asset.ObjName);
                }

                //拥有者
                bulletObj.ower = ower;

                //配置数据
                bulletObj.firePos            = addBullet.firePos;
                bulletObj.fireDir            = addBullet.fireDir;
                bulletObj.speed              = addBullet.speed;
                bulletObj.duration           = addBullet.duration;
                bulletObj.useFireDirForever  = addBullet.useFireDirForever;
                bulletObj.canHitAfterCreated = addBullet.canHitAfterCreated;

                //保存
                bulletCom.AddBullet(bulletObj);
            }
        }
Exemple #7
0
 //作用一次,时间结束还原技能
 private void HandleBuffSkillData(SkillCom skillCom, SkillDataJson dataJson)
 {
     skillCom.Line.AddTrack((float)dataJson.Time, 0).OnStart(() =>
     {
         ECSLocate.ECSLog.LogR("作用一次,时间结束还原技能>>>>>>> 附加 ", skillCom.SkillId, dataJson.Data);
     }).OnCompleted(() => {
         ECSLocate.ECSLog.LogR("作用一次,时间结束还原技能>>>>>>> 还原 ", skillCom.SkillId, dataJson.Data);
     });
 }
Exemple #8
0
        private void HandleSkill(SkillCom skillCom)
        {
            //没有技能释放请求
            if (skillCom.SkillId <= 0)
            {
                return;
            }

            //生成一个时间线
            if (skillCom.Line == null)
            {
                skillCom.Line = TimeLineHelp.CreateTimeLine();
            }
            else
            {
                skillCom.Line = TimeLineHelp.AddTimeLine(skillCom.Line);
            }

            //重置
            skillCom.Line.ReSet();

            SkillJson json = GameConfigHelp.GetSkillInfo(skillCom.SkillId);

            //播放动画
            for (int i = 0; i < json.AnimClips.Count; i++)
            {
                SkillAnimJson animJson = json.AnimClips[i];
                skillCom.Line.AddTrack((float)animJson.Time, 0).OnStart(() => {
                    PlayAnim(skillCom, animJson.AnimName);
                });
            }
            //播放特效
            for (int i = 0; i < json.Effects.Count; i++)
            {
                SkillEffectJson effectJson = json.Effects[i];
                skillCom.Line.AddTrack((float)effectJson.Time, 0).OnStart(() => {
                    PlayEffect(skillCom, effectJson);
                });
            }
            //播放音效
            for (int i = 0; i < json.Audios.Count; i++)
            {
                SkillAudioJson audioJson = json.Audios[i];
                skillCom.Line.AddTrack((float)audioJson.Time, 0).OnStart(() => {
                    PlayAudio(skillCom, audioJson.AudioId);
                });
            }
            //处理数据
            HandleSkillData(skillCom, json.Data);

            //开始播放技能
            skillCom.Line.Start();

            //重置
            skillCom.SkillId = 0;
        }
Exemple #9
0
        //音效
        private void PlayAudio(SkillCom skillCom, int audioId)
        {
            if (audioId <= 0)
            {
                ECSLocate.ECSLog.LogR("音效Id 为空>>>>>>> ", skillCom.SkillId, audioId);
                return;
            }

            ECSLocate.ECSLog.Log("播放音效Id ", skillCom.SkillId, audioId);
        }
Exemple #10
0
        public override void Execute(BuffObj buff, ref AddDamageInfo damageInfo, SkillCom attacker)
        {
            SkillCom skillCom = damageInfo.target;
            ActorObj actorObj = LCMap.MapLocate.Map.GetActor(skillCom.EntityId);

            GameObject displayGo = actorObj.GetDisplayGo();

            displayGo.transform.DOComplete(false);
            displayGo.transform.DOPunchPosition(new Vector3(-0.2f * actorObj.GetDirValue(), 0, 0), shakeTime, 1, 0);
        }
Exemple #11
0
        //间断作用技能
        private void HandleGapSkillData(SkillCom skillCom, SkillDataJson dataJson)
        {
            int gapCnt = (int)(dataJson.ContinueTime / dataJson.GapTime);

            for (int i = 0; i < gapCnt; i++)
            {
                float delayTime = (float)(dataJson.Time + i * dataJson.GapTime);
                skillCom.Line.AddTrack(delayTime, 0).OnStart(() =>
                {
                    ECSLocate.ECSLog.LogR("间断作用技能>>>>>>> ", skillCom.SkillId, dataJson.Data);
                });
            }
        }
Exemple #12
0
 //特效
 private void PlayEffect(SkillCom skillCom, SkillEffectJson effect)
 {
     if (effect.EffectId <= 0)
     {
         ECSLocate.ECSLog.LogR("特效Id 为空>>>>>>> ", skillCom.SkillId, effect.EffectId);
         return;
     }
     ECSLocate.ECSLog.LogR("播放特效>>>>>>>>>", effect.EffectId);
     ECSLocate.ECS.SetGlobalSingleComData((EffectCom com) =>
     {
         com.CurrShowEffectId = effect.EffectId;
         com.EntityId         = skillCom.EntityId;
         com.ShowPos          = (Vector3)LCConvert.StrChangeToObject(effect.Pos, typeof(Vector3).FullName);
     });
 }
Exemple #13
0
 public void CreateBuff(SkillCom ower, SkillCom target, AddBuffModel addBuff)
 {
     if (SkillLocate.Model.GetBuffModel(addBuff.id, out BuffModel model))
     {
         AddBuffInfo addBuffInfo = new AddBuffInfo();
         addBuffInfo.ower            = ower;
         addBuffInfo.target          = target;
         addBuffInfo.buffModel       = model;
         addBuffInfo.addStack        = addBuff.addStack;
         addBuffInfo.durationSetType = addBuff.durationSetType;
         addBuffInfo.duration        = addBuff.duration;
         addBuffInfo.isPermanent     = addBuff.isPermanent;
         target.AddBuff(addBuffInfo);
     }
 }
Exemple #14
0
 public override void Execute(BuffObj buff, ref AddDamageInfo damageInfo, SkillCom attacker)
 {
     if (damageSet)
     {
         damageInfo.model = DamageModel.Null;
     }
     if (damageSelf)
     {
         SkillLocate.Damage.AddDamage(buff.originer, damageInfo.target, damage);
     }
     else
     {
         SkillLocate.Damage.AddDamage(damageInfo.target, attacker, damage);
     }
 }
Exemple #15
0
        public override void Execute(BuffObj buff, ref AddDamageInfo damageInfo, SkillCom attacker)
        {
            Debug.LogWarning("受伤暂停决策>>>>>");

            SkillCom skillCom = damageInfo.target;
            Entity   entity   = LCECS.ECSLocate.ECS.GetEntity(skillCom.EntityId);

            entity.PauseEntityDec();
            float timeCount = pauseTime;

            DOTween.To(() => timeCount, a => timeCount = a, 0.1f, pauseTime).OnComplete(new TweenCallback(delegate
            {
                Debug.LogWarning("受伤开启决策>>>>>");
                entity.ResumeEntityDec();
            }));
        }
Exemple #16
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;
            //参数
            bool doAttack = workData.GetReqParam(EntityReqId.PlayerNormalAttack).GetBool();

            if (doAttack == false)
            {
                return;
            }

            //组件
            SkillCom skillCom = workData.MEntity.GetCom <SkillCom>();

            skillCom.SkillId  = 1001;
            skillCom.EntityId = workData.Id;
        }
Exemple #17
0
        private void PlayAnim(SkillCom skillCom, string animName)
        {
            if (animName == "")
            {
                ECSLocate.ECSLog.LogR("动画 为空>>>>>>> ", skillCom.SkillId, animName);
                return;
            }
            AnimatorClipInfo[] clipInfos = skillCom.Animator.GetCurrentAnimatorClipInfo(0);

            List <AnimatorClipInfo> showClips = new List <AnimatorClipInfo>();

            for (int i = 0; i < clipInfos.Length; i++)
            {
                if (clipInfos[i].clip.name == animName)
                {
                    showClips.Add(clipInfos[i]);
                }
            }
        }
        protected override int OnRunning(NodeData wData)
        {
            EntityWorkData    workData = wData as EntityWorkData;
            NodeActionContext context  = GetContext <NodeActionContext>(wData);
            PushSkillData     userData = context.GetUserData <PushSkillData>();

            SkillCom skillCom = workData.MEntity.GetCom <SkillCom>();

            if (userData.skillId == "-1" || skillCom.CheckSkillIsFinish(userData.skillId))
            {
                Debug.LogError("完成》》》》》" + userData.skillId);
                Debug.LogError("完成》》》》》" + skillCom.CheckSkillIsFinish(userData.skillId));
                return(NodeState.FINISHED);
            }
            else
            {
                return(NodeState.EXECUTING);
            }
        }
        protected override void OnExit(NodeData wData, int runningStatus)
        {
            EntityWorkData    workData = wData as EntityWorkData;
            NodeActionContext context  = GetContext <NodeActionContext>(wData);
            PushSkillData     userData = context.GetUserData <PushSkillData>();

            userData.skillId = "-1";

            //打断移动
            SkillCom skillCom = workData.MEntity.GetCom <SkillCom>();

            skillCom.StopSkill();
            AnimCom animCom = workData.MEntity.GetCom <AnimCom>();

            if (animCom != null)
            {
                animCom.SetReqAnim(AnimSystem.IdleState);
            }
        }
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;
            string         skillId  = workData.GetParam().GetString();

            //获取环境数据
            NodeActionContext context  = GetContext <NodeActionContext>(wData);
            PushSkillData     userData = context.GetUserData <PushSkillData>();

            userData.skillId = skillId;

            //打断移动
            TransformCom transformCom = workData.MEntity.GetCom <TransformCom>();

            if (transformCom != null)
            {
                transformCom.ReqMove = Vector3.zero;
                transformCom.ReqDir  = DirType.None;
            }
            PlayerMoveCom moveCom = workData.MEntity.GetCom <PlayerMoveCom>();

            if (moveCom != null)
            {
                moveCom.HasNoReqMove = true;
                moveCom.Rig.velocity = Vector2.zero;
            }

            //释放技能
            SkillCom skillCom = workData.MEntity.GetCom <SkillCom>();

            if (skillCom.ReleaseSkill(skillId))
            {
                userData.skillId = skillId;
                LCECS.ECSLocate.Log.Log("释放技能成功>>>>>", skillId);
            }
            else
            {
                userData.skillId = "-1";
                LCECS.ECSLocate.Log.LogError("释放技能失败>>>>>", skillId);
            }
        }
Exemple #21
0
        public void AddDamage(SkillCom attacker, SkillCom target, DamageModel damage, float angle = 0)
        {
            DamageCom damageCom = LCECS.ECSLocate.ECS.GetWorld().GetCom <DamageCom>();

            damageCom.AddDamageInfo(attacker, target, damage, angle);
        }
Exemple #22
0
 public override void Execute(BuffObj buff, AddDamageInfo damageInfo, SkillCom attacker)
 {
     SkillLocate.Damage.AddDamage(buff.originer, damageInfo.attacker, damage);
 }
Exemple #23
0
 public bool ReleaseSkill(SkillCom target, string skillId)
 {
     return(target.ReleaseSkill(skillId));
 }
Exemple #24
0
    BattleUnit SpawnOneUnit(int playerIdx, int carResID, string resPath, Transform hangNode, Vector2 pos, Vector2 speed, int unitType)
    {
        int        objID = 0;
        GameObject obj   = ResMgr.instance.CreateObject(resPath, out objID);

        if (obj == null)
        {
            Debug.LogError("ObjMgr SpawnOneUnit obj == null resPath:" + resPath);
        }
        BattleUnit unitObj = new BattleUnit(playerIdx, objID, resPath, obj, hangNode, pos, speed, unitType);
        // attr com
        AttrCom attrCom = unitObj.GetRenderObjTr().GetComponent <AttrCom>();

        if (attrCom == null)
        {
            attrCom = unitObj.GetRenderObjTr().gameObject.AddComponent <AttrCom>();
        }
        unitObj.AddCom(attrCom);
        attrCom.InitAttr(carResID, unitType);

        // move com
        MoveCom move = unitObj.GetRenderObjTr().GetComponent <MoveCom>();

        if (move == null)
        {
            move = unitObj.GetRenderObjTr().gameObject.AddComponent <MoveCom>();
        }
        unitObj.AddCom(move);
        move.Init(speed);

        // collider com
        ColliderCom collider = unitObj.GetRenderObjTr().GetComponent <ColliderCom>();

        if (collider == null)
        {
            collider = unitObj.GetRenderObjTr().gameObject.AddComponent <ColliderCom>();
        }
        unitObj.AddCom(collider);

        // Scale com
        ScaleCom scaleCom = unitObj.GetRenderObjTr().GetComponent <ScaleCom>();

        if (scaleCom == null)
        {
            scaleCom = unitObj.GetRenderObjTr().gameObject.AddComponent <ScaleCom>();
        }
        unitObj.AddCom(scaleCom);

        // NitrogenCom
        NitrogenCom nitrogenCom = unitObj.GetRenderObjTr().GetComponent <NitrogenCom>();

        if (nitrogenCom == null)
        {
            nitrogenCom = unitObj.GetRenderObjTr().gameObject.AddComponent <NitrogenCom>();
        }
        unitObj.AddCom(nitrogenCom);


        SkillCom skillCom = unitObj.GetRenderObjTr().GetComponent <SkillCom>();

        if (skillCom == null)
        {
            skillCom = unitObj.GetRenderObjTr().gameObject.AddComponent <SkillCom>();
        }
        unitObj.AddCom(skillCom);


        StatusCom statusCom = unitObj.GetRenderObjTr().GetComponent <StatusCom>();

        if (statusCom == null)
        {
            statusCom = unitObj.GetRenderObjTr().gameObject.AddComponent <StatusCom>();
        }
        unitObj.AddCom(statusCom);

        return(unitObj);
    }
    void OnTriggerEnter2D(Collider2D other)
    {
        if (skillCom == null)
        {
            skillCom = GetCom("SkillCom") as SkillCom;
        }

        if (skillCom == null)
        {
            return;
        }

        if (other.transform.tag == "SkillDrop" && this.transform.tag == "Player")
        {
            if (getRandomSkillCD <= 0.0f && !skillCom.HasSkill())
            {
                SkillBrushMgr.instance.ReleaseItemByID(other.transform.parent.gameObject.GetInstanceID());
                SendMsg((int)Const_Util.UNIT_MSG.GET_SKILL, null);
                getRandomSkillCD = 1.0f;
            }
        }
        else if (other.transform.tag == "Skill" && this.transform.tag == "Player")
        {
            if (skillEfxHitCD > Const_Util.FLT_EPSILON)
            {
                return;
            }
            SkillBaseInfoCom skillInfoCom = other.transform.parent.GetComponent <SkillBaseInfoCom>();
            if (!CheckSKillHitValid(this.transform, skillInfoCom))
            {
                return;
            }
            // disable skill efx obj
            if (other.transform.parent != null)
            {
                other.transform.parent.gameObject.SetActive(false);
            }
            int   skillID = skillInfoCom.mSkillID;
            SKILL skill   = DataCfgMgr.instance.GetSkill(skillID);
            // play hit efx
            SendMsg((int)Const_Util.UNIT_MSG.SKILL_HIT_EFX, skillID);

            BattleMsgDef.SkillHitInfo skillHitEfx = new BattleMsgDef.SkillHitInfo((int)skill.type, skill.speed_scale,
                                                                                  skill.chg_time, skill.continue_time, skill.reset_time);
            switch (skill.type)
            {
            case (uint)Const_Util.SKILL_TYPE.SPEED_DESC:
            {
                SendMsg((int)Const_Util.UNIT_MSG.SKILL_DESC, skillHitEfx);
                break;
            }

            case (uint)Const_Util.SKILL_TYPE.SPEED_STOP:
            {
                break;
            }

            case (uint)Const_Util.SKILL_TYPE.SCREEN_PIC:
            {
                break;
            }

            case (uint)Const_Util.SKILL_TYPE.SELF_BUFF:
            {
                break;
            }

            default:
            {
                Debug.LogError("ColliderCom OnTriggerEnter2D undefine (int)skill.type:" + skill.type.ToString());
                break;
            }
            }

            skillEfxHitCD = 1.0f;
        }

        if (collisionCD > Const_Util.FLT_EPSILON)
        {
            return;
        }
        if (other.transform.tag == "Player")
        {
            StatusCom             statusCom = other.gameObject.GetComponent <StatusCom>();
            Const_Util.UnitStatus status    = statusCom.GetStatus();
            if (status != Const_Util.UnitStatus.FLY)
            {
                if (this.transform.tag == "Enemy")
                {
                    DoOnDestroy();
                }
                else
                {
                    SendMsg((int)Const_Util.UNIT_MSG.COLLIDER_OCCUR, null);
                }
            }
            collisionCD = 1.0f;
        }
        else if (other.transform.tag == "Enemy")
        {
            SendMsg((int)Const_Util.UNIT_MSG.COLLIDER_OCCUR, null);
            collisionCD = 1.0f;
        }
    }
 public override void Release()
 {
     skillCom = null;
 }