//持续作用技能 private void HandleContinueSkillData(SkillCom skillCom, SkillDataJson dataJson) { skillCom.Line.AddTrack((float)dataJson.Time, (float)dataJson.ContinueTime).OnUpdate(() => { ECSLocate.ECSLog.LogR("持续作用技能>>>>>>> ", skillCom.SkillId, dataJson.Data); }); }
//技能数值 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; } } }
//作用一次技能 private void HandleOnceSkillData(SkillCom skillCom, SkillDataJson dataJson) { skillCom.Line.AddTrack((float)dataJson.Time, 0).OnStart(() => { ECSLocate.ECSLog.LogR("作用一次技能>>>>>>> ", skillCom.SkillId, dataJson.Data); }); }
public void LearnSkill(SkillCom target, string skillId, int level = 1) { if (SkillLocate.Model.GetSkillModel(skillId, out SkillModel model)) { target.LearnSkill(model, level); } }
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); } }
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); } }
//作用一次,时间结束还原技能 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); }); }
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; }
//音效 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); }
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); }
//间断作用技能 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); }); } }
//特效 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); }); }
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); } }
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); } }
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(); })); }
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; }
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); } }
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); }
public override void Execute(BuffObj buff, AddDamageInfo damageInfo, SkillCom attacker) { SkillLocate.Damage.AddDamage(buff.originer, damageInfo.attacker, damage); }
public bool ReleaseSkill(SkillCom target, string skillId) { return(target.ReleaseSkill(skillId)); }
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; }