//灼烧标记 public void buildingBurnTag(EffectParameter effectInfo) { effectParameterList.Add(effectInfo); UnitCtl unit = gameObject.GetComponent <UnitCtl>(); Prop[] props = new Prop[] { Prop.CreateInstance(PropId.StateBurn, 1) }; AttachPropData attachPropData = new AttachPropData(props); if (effectInfo.effect.buffAnimPath != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectInfo.effect.buffAnimPath); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); effectAnim.transform.position = unit.transform.position; DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectInfo.effect.time; } effectInfo.effectAnim = effectAnim; Debug.Log("=======destoryTimer.DelayTime: " + effectInfo.effect.time); } unit.unitData.AppProps(attachPropData, true); if (effectInfo.effect.time > 0) { effectInfo.waitTime = effectInfo.effect.time; StartCoroutine(burnTagTimer(attachPropData, effectInfo)); } }
protected override void OnStart() { base.OnStart(); if (delayDestory == null) { delayDestory = GetComponent <DelayDestory>(); } }
//定时伤害 IEnumerator autoHurtBuildAllTimer(EffectParameter effectInfo) { UnitCtl unit = gameObject.GetComponent <UnitCtl>(); effectInfo.waitTime = effectInfo.effect.time; DelayDestory destoryTimer = effectInfo.effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectInfo.waitTime; } int timerCount = 0; //SkillWarConf skillWarConf = War.model.GetSkillWarConf(skillParameter.skillId); while (true) { yield return(new WaitForSeconds(1.0f)); try { DamageVO damageVo = War.skillWarManager.GetDamageParameter(effectInfo.value, false, DamageType.ATTACK, unit, effectInfo.caster); unit.Damage(damageVo); Debug.Log(string.Format("<color=yellow> autoHurtBuildAllTimer all= effectid:{0} </color>", effectInfo.effect.id)); timerCount++; if (timerCount >= effectInfo.waitTime) { break; } } catch (Exception e) { if (Application.isEditor) { Debug.LogError(e); } break; } } effectInfo.waitTime = 0; CleanList(); Debug.Log(string.Format("<color=white> autoHurtBuildAllTimer done=</color>")); }
public void OnSteeringRequestSucceeded() { if (unitPath && unitPath.state == UnitPathState.Die) { return; } RelationType relation = unitData.GetRelation(unitData.to.legionId); if (relation == RelationType.Enemy) { if (unitPath.needAround) { if (unitPath.state == UnitPathState.Ining) { unitPath.HitFly(); } } else { unitData.to.unit.GetComponent <BBuildShake>().Play(); Die(); } } else { delayDestory = GetComponent <DelayDestory>(); if (unitData != null && unitData.to != null) { // War.textEffect.PlayHP(unitData.hp, unitData.to.unit); unitData.to.hp += unitData.hp; } SoliderPoolItem soliderPoolItem = GetComponent <SoliderPoolItem>(); if (soliderPoolItem != null) { soliderPoolItem.Release(); } else { delayDestory.delayTime = 0F; delayDestory.enabled = true; } } }
IEnumerator delShieldWhenHurt(Dictionary <int, GameObject> animDic, List <UnitCtl> unitCtlList, int timerAll) { int timer = 0; while (true) { timer++; if (timer >= timerAll) { break; } yield return(new WaitForSeconds(1)); //Debug.LogFormat("=======delShieldWhenHurt======="); if (animDic.Count == 0) { break; } for (int i = 0; i < unitCtlList.Count; i++) { UnitCtl unit = unitCtlList[i]; if (unit.unitData.shield <= 0.1f) { GameObject effectAnim; if (!animDic.TryGetValue(unit.unitData.id, out effectAnim)) { continue; } DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = 0; } animDic.Remove(unit.unitData.id); } } } }
public void buildChangeAttri(EffectParameter effectParameter) { effectParameterList.Add(effectParameter); float value = effectParameter.value; if (effectParameter.effect.type == (int)eSKillWarEffectType.eEffectReduceAttri) { value = 0 - value; } UnitCtl unit = gameObject.GetComponent <UnitCtl>(); effectParameter.waitTime = effectParameter.effect.time; Prop[] props = new Prop[] { Prop.CreateInstance(effectParameter.effect.changePropertyId, value) }; AttachPropData attachPropData = new AttachPropData(props); //Debug.Log("=================" + effectParameter.unitCtlList.Count + "prop: " + effectParameter.effect.changePropertyId + "value: " + vaue); Debug.Log("===============buffAnimPath: " + effectParameter.effect.buffAnimPath); unit.unitData.soliderPropContainer.Add(attachPropData); if (effectParameter.effect.buffAnimPath != "temp") { GameObject effectPrefabSelf = WarRes.GetPrefab(effectParameter.effect.buffAnimPath); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefabSelf); //effectAnim.transform.position = unit.transform.position; effectAnim.transform.SetParent(unit.transform, false); effectParameter.effectAnim = effectAnim; DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectParameter.effect.time; } updateBuffPos(); } if (effectParameter.effect.time > 0) { StartCoroutine(changeAttributeTimer(effectParameter, attachPropData)); } }
IEnumerator effectBuildCantSendSoldierEnd(EffectParameter effectParameter) { yield return(new WaitForSeconds(effectParameter.waitTime)); Prop[] props = new Prop[] { Prop.CreateInstance(PropId.StateFreezedSendArm, 1) }; AttachPropData attachPropData = new AttachPropData(props); Debug.Log("=======" + effectParameter.effect.buffAnimPath); effectParameter.waitTime = effectParameter.effect.time; UnitCtl unit = gameObject.GetComponent <UnitCtl>(); if (effectParameter.effect.buffAnimPath != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectParameter.effect.buffAnimPath); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); //effectAnim.transform.position = unit.transform.position; effectAnim.transform.SetParent(unit.transform, false); DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectParameter.value; } effectParameter.effectAnim = effectAnim; updateBuffPos(); } //todo 设置不能出兵 if (effectParameter.effect.type == (int)eSKillWarEffectType.eEffectReduceSpeedTo)//修改材质 { unit.unitAgent.SetMaterial(WarMaterialsType.stateFreeze); } unit.unitData.AppProps(attachPropData, true); if (effectParameter.effect.time > 0) { StartCoroutine(effectBuildCantSendTimer(effectParameter, attachPropData, unit)); } Debug.Log(string.Format("<color=yellow> effectBuildCantSend to {0} </color>", unit.unitData.id)); }
IEnumerator autoHurtBuildSingleEnd(SkillParameter skillParameter, EffectParameter effectInfo, UnitCtl unit, bool needDealSkill2) { yield return(new WaitForSeconds(effectInfo.waitTime)); SkillWarConf skillWarConf = War.model.GetSkillWarConf(skillParameter.skillId); Debug.Log("++++++animPathEnd: " + effectInfo.effect.animPathEnd); if (effectInfo.effect.animPathEnd != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectInfo.effect.animPathEnd); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); effectAnim.transform.position = unit.transform.position; DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null && effectInfo.effect.time > 0) { destoryTimer.DelayTime = effectInfo.effect.time; effectInfo.effectAnim = effectAnim; } // effectInfo.waitTime = 0.2f; } War.skillWarManager.StartCoroutine(autoHurtBuildAllHurtSingle(skillParameter, effectInfo, unit, needDealSkill2)); }
public int addShieldStart(SkillParameter skillParameter, EffectParameter effectParameter) { Debug.Log("=========" + effectParameter.effect.animPathStart + "++++++" + effectParameter.effect.animPathEnd); Dictionary <int, GameObject> animDic = new Dictionary <int, GameObject>(); //播放技能特效 foreach (UnitCtl unit in effectParameter.unitCtlList)//获取城市 { if (effectParameter.effect.animPathStart != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectParameter.effect.animPathStart); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); effectAnim.transform.position = unit.transform.position; DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectParameter.effect.time; } animDic.Add(unit.unitData.id, effectAnim); unit.unitCtl.BeforeDamage += OnBeforeDamage; unit.unitData.shield = effectParameter.value; War.skillWarManager.StartCoroutine(addShieldTimer(skillParameter, effectParameter)); Debug.Log("==============effect.time: " + effectParameter.effect.time); } } //处理特效,城市血没后要删除特效 War.skillWarManager.StartCoroutine(delShieldWhenHurt(animDic, effectParameter.unitCtlList, effectParameter.effect.time)); //处理技能2 if (skillParameter.curDealSkillIdx == 1) { War.skillWarManager.dealSkill2Effect(skillParameter); } Debug.Log(string.Format("<color=yellow> addShield addvalue:{0} </color>", effectParameter.value)); return(0); }
//清楚技能效果 void CleanList() { for (int i = 0; i < effectParameterList.Count;) { Debug.LogFormat("===BuildSkillDots clean==={0} {1} waitTime:{2}", i, effectParameterList.Count, effectParameterList[i].waitTime); if (effectParameterList[i].waitTime < 1) { if (effectParameterList[i].effectAnim != null) { DelayDestory destoryTimer = effectParameterList[i].effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = 0; } } effectParameterList.RemoveAt(i); } else { i++; } } updateBuffPos(); }
IEnumerator stopSoldierEnd(SkillParameter skillParameter, EffectParameter effectParameter) { yield return(new WaitForSeconds(effectParameter.waitTime)); //所有士兵显示被击效果 //int unitType = 0; //unitType = unitType.USolider(true); //int relation = 0; //relation = relation.REnemy(true); //List<UnitCtl> unitSoldierList = War.scene.SearchUnit(unitType, effectParameter.caster.unitData.legionId, relation); foreach (UnitCtl unit in effectParameter.unitCtlList) { if (unit == null) { continue; } if (unit.unitData == null) { continue; } if (effectParameter.effect.animPathEnd != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectParameter.effect.animPathEnd.ToLower()); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); effectAnim.transform.position = unit.transform.position; } } Prop[] props = new Prop[] { Prop.CreateInstance(PropId.StateFreezedMoveSpeed, 1) }; AttachPropData attachPropData = new AttachPropData(props); Debug.LogFormat("=====stop soldier count:{0}", effectParameter.unitCtlList.Count); foreach (UnitCtl unit in effectParameter.unitCtlList) { if (unit == null) { continue; } if (unit.unitData == null) { continue; } if (unit.unitData.unitType == UnitType.Build) { BuildSkillDots skillDots = unit.GetComponent <BuildSkillDots>(); if (skillDots != null) { skillDots.buildStopSendsoldier(effectParameter); } } else { if (effectParameter.effect.buffAnimPath != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectParameter.effect.buffAnimPath.ToLower()); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); effectAnim.transform.position = unit.transform.position; DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectParameter.value; } } unit.unitData.AppProps(attachPropData, true); } } if (effectParameter.value > 0) { War.skillWarManager.StartCoroutine(stopSoldierTimer(effectParameter, attachPropData)); } Debug.Log(string.Format("<color=yellow> stopSoldier all skill id={0} effid={1} {2}</color>", skillParameter.skillId, effectParameter.effect.id, effectParameter.value)); }
IEnumerator autoAddBuildAllEnd(SkillParameter skillParameter, EffectParameter effectInfo) { yield return(new WaitForSeconds(effectInfo.waitTime)); SkillWarConf skillWarConf = War.model.GetSkillWarConf(skillParameter.skillId); float addSoild = effectInfo.value; foreach (UnitCtl unit in effectInfo.unitCtlList)//获取城市 { try { int lengion = War.skillWarManager.getLegionByHeroUid(skillParameter.curHeroUid); if (lengion != unit.unitData.legionId) { continue; } //添加持续效果 if (effectInfo.effect.buffAnimPath != "temp") { GameObject effectPrefab = WarRes.GetPrefab(effectInfo.effect.buffAnimPath.ToLower()); GameObject effectAnim = GameObject.Instantiate <GameObject>(effectPrefab); effectAnim.transform.position = unit.transform.position; DelayDestory destoryTimer = effectAnim.GetComponent <DelayDestory>(); if (destoryTimer != null) { destoryTimer.DelayTime = effectInfo.effect.time; } } //按百分比加兵 if (effectInfo.effect.type == (int)eSKillWarEffectType.eEffectAddSoldierPer) { addSoild = unit.unitData.maxHp * effectInfo.value / 100; Debug.LogFormat("add soldier rate: {0} {1}", effectInfo.value, addSoild); } else if (effectInfo.effect.type == (int)eSKillWarEffectType.eEffectAddSoldierHitMax) { if (unit.unitData.beattack != true) { addSoild = 0; } } Debug.Log("========add soldier: " + addSoild); unit.Damage(addSoild, effectInfo.effect.addSoldierMax, effectInfo.caster); } catch (Exception e) { if (Application.isEditor) { Debug.Log(e); } } } //处理2技能 if (skillParameter.curDealSkillIdx == 1) { War.skillWarManager.dealSkill2Effect(skillParameter); } if (effectInfo.effect.time > 0) { War.skillWarManager.StartCoroutine(autoAddBuildAllTimer(skillParameter, effectInfo)); } Debug.Log(string.Format("<color=yellow> autoAddBuildAll all=skill id:{0}, lvl:{1} v:{2}</color>", skillParameter.skillId, skillParameter.skillLvl, addSoild)); }