Esempio n. 1
0
        //灼烧标记
        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));
            }
        }
Esempio n. 2
0
        protected override void OnStart()
        {
            base.OnStart();

            if (delayDestory == null)
            {
                delayDestory = GetComponent <DelayDestory>();
            }
        }
Esempio n. 3
0
        //定时伤害
        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>"));
        }
Esempio n. 4
0
        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);
                    }
                }
            }
        }
Esempio n. 6
0
        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));
            }
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        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);
        }
Esempio n. 10
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));
        }
Esempio n. 12
0
        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));
        }