Ejemplo n.º 1
0
        //4.普通追踪特效
        public FlyEffect CreateFlyEffect(UInt64 owner, UInt64 target, uint skillID, uint projectID, Vector3 position, Vector3 direction, bool isAbsorb)
        {
            SkillEmitConfig skillConfig = ConfigReader.GetSkillEmitCfg(skillID);

            //判断资源路径是否有效
            if (skillConfig == null || skillConfig.effect == "0")
            {
                return(null);
            }

            string resourcePath = GameConstDefine.LoadGameSkillEffectPath + "release/" + skillConfig.effect;

            ////测试
            //if (skillConfig.effect == "suolian")
            //{
            //    skillConfig.emitType = 8;
            //    resourcePath = "effect/skill/release/DragEffect";
            //}


            Ientity entityOwner, entityTarget;

            EntityManager.AllEntitys.TryGetValue(owner, out entityOwner);
            EntityManager.AllEntitys.TryGetValue(target, out entityTarget);

            //释放者不能为空
            if (entityOwner == null)
            {
                //Debug.LogError("entityOnwer is null in CreateFlyEffect!" + "skillID:" + skillID.ToString() + "projectID:" + projectID.ToString());
                return(null);
            }

            FlyEffect effect = new FlyEffect();

            effect.enOwnerKey = entityOwner.GameObjGUID;

            if (entityTarget != null)
            {
                effect.enTargetKey = entityTarget.GameObjGUID;
            }

            effect.skillID     = skillID;
            effect.fixPosition = position;
            effect.dir         = direction;
            effect.isAbsorb    = isAbsorb;
            effect.projectID   = projectID;
            effect.emitType    = skillConfig.emitType;


            //加载特效信息
            effect.cehuaTime = skillConfig.lifeTime;
            effect.resPath   = resourcePath;

            //创建
            effect.Create();

            AddEffect(effect.projectID, effect);
            return(effect);
        }
Ejemplo n.º 2
0
        private void UpdateTurnType()
        {
            Player enOwner;

            PlayersManager.Instance.PlayerDic.TryGetValue(enOwnerKey, out enOwner);

            if (isTurn == false)
            {
                SkillEmitConfig skillinfo = ConfigReader.GetSkillEmitCfg(skillID);
                Vector3         flyDir    = Vector3.zero;
                float           speed     = skillinfo.flySpeed;
                Vector3         Pos       = GetTransform().position;
                flyDir = dir;
                flyDir.Normalize();
                Quaternion rt = Quaternion.LookRotation(flyDir);
                GetTransform().rotation = rt;
                GetTransform().rotation = rt;
                Pos += flyDir * Time.deltaTime * speed;
                GetTransform().position = Pos;
            }
            else
            {
                SkillEmitConfig skillinfo = ConfigReader.GetSkillEmitCfg(skillID);
                Vector3         flyDir    = Vector3.zero;
                float           speed     = skillinfo.flySpeed;
                Vector3         Pos       = GetTransform().position;
                float           distance;// = Vector3.Distance(root.transform.position, enTarget.RealEntity.objAttackPoint.position);
                //if (enOwner == null || enOwner.RealEntity == null || enOwner.RealEntity.objAttackPoint == null)

                if (enOwner == null || enOwner.RealEntity == null || enOwner.objAttackPoint == null)
                {
                    flyDir   = fixPosition - Pos;
                    distance = Vector3.Distance(Pos, fixPosition);
                }
                else
                {
                    flyDir   = enOwner.objAttackPoint.transform.position - Pos;
                    distance = Vector3.Distance(GetTransform().position, enOwner.objAttackPoint.position);
                }

                if (flyDir == Vector3.zero)
                {
                    flyDir = Vector3.one;
                }
                flyDir.Normalize();
                Quaternion rt = Quaternion.LookRotation(flyDir);
                GetTransform().rotation = rt;
                Pos += flyDir * Time.deltaTime * speed;
                GetTransform().position = Pos;

                if (speed * Time.deltaTime > distance)
                {
                    //Debug.LogError("fly effect endtime:" + Time.time);
                    isDead = true;
                }
            }
        }
Ejemplo n.º 3
0
        public override void Update()
        {
            if (isDead)
            {
                return;
            }

            base.Update();

            SkillEmitConfig skillinfo = ConfigReader.GetSkillEmitCfg(skillID);      //外部已经判断

            //拖拽效果,不需要更新
            if (skillinfo.emitType == 8)
            {
                return;
            }

            //Ientity enTarget;
            //EntityManager.AllEntitys.TryGetValue(enTargetKey, out enTarget);
            Player enTarget;

            PlayersManager.Instance.PlayerDic.TryGetValue(enOwnerKey, out enTarget);

            //目标角色消失,特效消失
            if (skillinfo.emitType == 1 && enTarget == null)
            {
                isDead = true;
                return;
            }

            switch (skillinfo.emitType)
            {
            case 1:    //有目标类型
            case 4:
            case 5:
            case 7:
            {
                UpdateTargetType();
            }
            break;

            case 2:    //无目标类型
            case 6:
            {
                UpdateNoTargetType();
            }
            break;

            case 3:
            {
                UpdateTurnType();
            }
            break;
            }
        }
Ejemplo n.º 4
0
        public string getFlyEffectPath(uint id)
        {
            SkillEmitConfig skillConfig = ConfigReader.GetSkillEmitCfg(id);

            //判断资源路径是否有效
            if (skillConfig == null || skillConfig.effect == "0")
            {
                return(null);
            }

            return(GameConstDefine.LoadGameSkillEffectPath + "release/" + skillConfig.effect);
        }
Ejemplo n.º 5
0
        //4.普通追踪特效
        public FlyEffect CreateFlyEffect(UInt64 owner, UInt64 target, uint skillID, uint projectID, Vector3 position, Vector3 direction, bool isAbsorb)
        {
            SkillEmitConfig skillConfig = ConfigReader.GetSkillEmitCfg(skillID);

            if (skillConfig == null || skillConfig.effect == "0")
            {
                return(null);                                                                                //判断资源路径是否有效
            }
            string resourcePath = GameConstDefine.LoadGameSkillEffectPath + "release/" + skillConfig.effect; //攻击特效路径

            Player entityOwner, entityTarget;

            PlayersManager.Instance.PlayerDic.TryGetValue(owner, out entityOwner);   //源

            PlayersManager.Instance.PlayerDic.TryGetValue(target, out entityTarget); //源


            //释放者不能为空
            if (entityOwner == null)
            {
                return(null);
            }

            FlyEffect effect = new FlyEffect();

            effect.enOwnerKey = entityOwner.GameObjGUID;

            if (entityTarget != null)
            {
                effect.enTargetKey = entityTarget.GameObjGUID;
            }

            effect.skillID     = skillID;
            effect.fixPosition = position;
            effect.dir         = direction;
            effect.isAbsorb    = isAbsorb;
            effect.projectID   = projectID;
            effect.emitType    = skillConfig.emitType;

            //加载特效信息
            effect.cehuaTime = skillConfig.lifeTime;
            effect.resPath   = resourcePath;

            //创建
            effect.Create();
            //添加到特效列表中
            AddEffect(effect.projectID, effect);
            return(effect);
        }
Ejemplo n.º 6
0
        private void UpdateNoTargetType()
        {
            SkillEmitConfig skillinfo = ConfigReader.GetSkillEmitCfg(skillID);
            Vector3         flyDir    = Vector3.zero;
            float           speed     = skillinfo.flySpeed;
            Vector3         Pos       = GetTransform().position;

            flyDir = dir;
            flyDir.Normalize();
            Quaternion rt = Quaternion.LookRotation(flyDir);

            GetTransform().rotation = rt;
            GetTransform().rotation = rt;
            Pos += flyDir * Time.deltaTime * speed;
            GetTransform().position = Pos;
        }
Ejemplo n.º 7
0
        private void UpdateTargetType()
        {
            Ientity enTarget;

            EntityManager.AllEntitys.TryGetValue(enTargetKey, out enTarget);

            SkillEmitConfig skillinfo = ConfigReader.GetSkillEmitCfg(skillID);
            Vector3         flyDir    = Vector3.zero;
            float           speed     = skillinfo.flySpeed;
            Vector3         Pos       = GetTransform().position;
            float           distance;// = Vector3.Distance(root.transform.position, enTarget.RealEntity.objAttackPoint.position);

            if (enTarget == null || enTarget.RealEntity == null || enTarget.RealEntity.objAttackPoint == null)
            {
                flyDir   = fixPosition - Pos;
                distance = Vector3.Distance(Pos, fixPosition);
            }
            else
            {
                flyDir   = enTarget.RealEntity.objAttackPoint.transform.position - Pos;
                distance = Vector3.Distance(GetTransform().position, enTarget.RealEntity.objAttackPoint.position);
            }

            if (flyDir == Vector3.zero)
            {
                flyDir = Vector3.one;
            }
            flyDir.Normalize();
            Quaternion rt = Quaternion.LookRotation(flyDir);

            GetTransform().rotation = rt;
            Pos += flyDir * Time.deltaTime * speed;
            GetTransform().position = Pos;

            if (speed * Time.deltaTime > distance)
            {
                //Debug.LogError("fly effect endtime:" + Time.time);
                isDead = true;
            }
            //else
            //{
            //    Pos += flyDir * Time.deltaTime * speed;
            //    root.transform.position = Pos;
            //}
        }
Ejemplo n.º 8
0
        private void UpdateTargetType()
        {
            //Ientity enTarget;
            //EntityManager.AllEntitys.TryGetValue(enTargetKey, out enTarget);
            Player enTarget;

            PlayersManager.Instance.PlayerDic.TryGetValue(enTargetKey, out enTarget);

            SkillEmitConfig skillinfo = ConfigReader.GetSkillEmitCfg(skillID);
            Vector3         flyDir    = Vector3.zero;
            float           speed     = skillinfo.flySpeed;
            Vector3         Pos       = GetTransform().position;
            float           distance;

            //if (enTarget == null || enTarget.RealEntity == null || enTarget.RealEntity.objAttackPoint == null)
            if (enTarget == null || enTarget.RealEntity == null || enTarget.objAttackPoint == null)
            {
                flyDir   = fixPosition - Pos;
                distance = Vector3.Distance(Pos, fixPosition);
            }
            else
            {
                // flyDir = enTarget.RealEntity.objAttackPoint.transform.position - Pos;
                // distance = Vector3.Distance(GetTransform().position, enTarget.RealEntity.objAttackPoint.position);
                flyDir   = enTarget.objAttackPoint.position - Pos;
                distance = Vector3.Distance(GetTransform().position, enTarget.objAttackPoint.position);
            }

            if (flyDir == Vector3.zero)
            {
                flyDir = Vector3.one;
            }
            flyDir.Normalize();
            Quaternion rt = Quaternion.LookRotation(flyDir);

            GetTransform().rotation = rt;
            Pos += flyDir * Time.deltaTime * speed;
            GetTransform().position = Pos;

            if (speed * Time.deltaTime > distance)
            {
                isDead = true;
            }
        }
Ejemplo n.º 9
0
        public override void OnLoadComplete()
        {
            SkillEmitConfig skillInfo = ConfigReader.GetSkillEmitCfg(skillID);
            Transform       point;
            Ientity         enOwner, enTarget;

            EntityManager.AllEntitys.TryGetValue(enOwnerKey, out enOwner);
            EntityManager.AllEntitys.TryGetValue(enTargetKey, out enTarget);


            point = enOwner.RealEntity.objPoint.transform;

            //拖拽效果
            if (skillInfo.emitType == 8)
            {
                fyDragRibbon[] mDragRibbon = obj.GetComponentsInChildren <fyDragRibbon>();
                foreach (fyDragRibbon ribbon in mDragRibbon)
                {
                    ribbon.mDir = dir;
                    ribbon.Link(point);
                }
            }
            else
            {
                if (point != null)
                {
                    GetTransform().position = point.transform.position;
                }
                if (skillInfo.emitType == 1 || skillInfo.emitType == 4 || skillInfo.emitType == 5)
                {
                    if (enTarget == null)
                    {
                        Quaternion rt = Quaternion.LookRotation(fixPosition - GetTransform().position);
                        GetTransform().rotation = rt;
                    }
                    else
                    {
                        Quaternion rt = Quaternion.LookRotation(enTarget.RealEntity.transform.position - GetTransform().position);
                        GetTransform().rotation = rt;
                    }
                }
                else if (skillInfo.emitType == 2 || skillInfo.emitType == 6)
                {
                    Quaternion rt = Quaternion.LookRotation(dir);
                    GetTransform().rotation = rt;
                }
            }

            //播放声音
            string       soundPath = GameConstDefine.LoadGameSoundPath + skillInfo.sound;
            ResourceUnit objUnit   = ResourcesManager.Instance.loadImmediate(soundPath, ResourceType.ASSET);

            if (objUnit.Asset != null)
            {
                AudioClip clip = objUnit.Asset as AudioClip;
                if (clip != null)
                {
                    AudioSource audio = AudioManager.Instance.PlayEffectAudio(clip);
                    SceneSoundManager.Instance.addSound(audio, obj);
                }
            }
        }
Ejemplo n.º 10
0
    public ReadSkillEmitConfig(string xmlFilePath)
    {
        //TextAsset xmlfile = Resources.Load(xmlFilePath) as TextAsset;
        ResourceItem xmlfileUnit = ResourcesManager.Instance.loadImmediate(xmlFilePath, ResourceType.ASSET);
        TextAsset    xmlfile     = xmlfileUnit.Asset as TextAsset;

        if (!xmlfile)
        {
            //Debug.LogError(" error infos: 没有找到指定的xml文件:" + xmlFilePath);
        }

        xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(xmlfile.text);

        XmlNodeList infoNodeList = xmlDoc.SelectSingleNode("SkillCfg_emit ").ChildNodes;

        for (int i = 0; i < infoNodeList.Count; i++)
        {    //(XmlNode xNode in infoNodeList)
            if ((infoNodeList[i] as XmlElement).GetAttributeNode("un32ID") == null)
            {
                continue;
            }

            string typeName = (infoNodeList[i] as XmlElement).GetAttributeNode("un32ID").InnerText;
            //Debug.LogError(typeName);
            SkillEmitConfig skillinfo = new SkillEmitConfig();
            skillinfo.id = (uint)Convert.ToUInt32(typeName);

            //SkillConfigInfo.NpcId = Convert.ToInt32(typeName);
            foreach (XmlElement xEle in infoNodeList[i].ChildNodes)
            {
                #region 搜索
                switch (xEle.Name)
                {
                case "szName":
                {
                    skillinfo.name = Convert.ToString(xEle.InnerText);
                }
                break;

                case "EmitType":
                {
                    skillinfo.emitType = Convert.ToInt32(xEle.InnerText);
                }
                break;

                case "FlySpeed":
                {
                    skillinfo.flySpeed = Convert.ToInt32(xEle.InnerText) / 100.0f;
                }
                break;

                case "attackEffect":
                {
                    skillinfo.effect = Convert.ToString(xEle.InnerText);
                }
                break;

                case "FlySound":
                {
                    skillinfo.sound = Convert.ToString(xEle.InnerText);
                }
                break;

                case "eLifeTime":
                {
                    skillinfo.lifeTime = Convert.ToInt32(xEle.InnerText) / 1000.0f;
                }
                break;

                case "bIsPenetrate":
                {
                    skillinfo.isPenetrate = Convert.ToInt32(xEle.InnerText);
                }
                break;
                    #endregion
                }
            }
            ConfigReader.skillEmitXmlInfoDic.Add(skillinfo.id, skillinfo);
        }
    }