Beispiel #1
0
            public void ShowDamageEffect(FightEffectHelp.FightEffectType type, long value, float displayTimeScale, Actor actor, bool show_percent, string push_str)
            {
                if (GlobalConst.IsBanshuVersion)
                {
                    if (type == FightEffectHelp.FightEffectType.AddExp)
                    {
                        return;
                    }
                }
                var fightEffectWindow = GetFightEffectWindow();

                if (fightEffectWindow == null)
                {
                    return;
                }
                GameObject damageEffectObject = null;

                damageEffectObject = fightEffectWindow.GetObjectByFightEffectType(type);
                if (damageEffectObject == null)
                {
                    return;
                }
                int level = FightEffectHelp.GetLayoutLevel(type);

                fightEffectWindow.SetGameObjectLayoutLevel(damageEffectObject, level);

                Vector3 worldPosInScene;
                Vector2 screen_abs_offset;
                Vector3 worldPos = xc.ui.ugui.UIFightEffectWindow.GetEffectWorldPosInUIByType(actor, type, out worldPosInScene, out screen_abs_offset);

                damageEffectObject.transform.position      = worldPos;
                damageEffectObject.transform.localPosition = new Vector3(damageEffectObject.transform.localPosition.x,
                                                                         damageEffectObject.transform.localPosition.y, 0);

                Text effectValueLabel = damageEffectObject.transform.Find("Value").GetComponent <Text>();

                if (type == FightEffectHelp.FightEffectType.OurDamage && value > 0)
                {
                    value = -value;
                }

                FightEffectHelp.SetEffectValue(type, effectValueLabel, value, show_percent, push_str);

                float     playTimeBySeconds = 2;
                Animation animation         = damageEffectObject.GetComponentInChildren <Animation>();

                if (animation != null && animation.clip != null)
                {
                    playTimeBySeconds = animation.clip.length;
                    animation[animation.clip.name].speed = displayTimeScale;
                }
                damageEffectObject.SetActive(true);

                var delay_enable = damageEffectObject.GetComponent <DelayEnableComponent>();

                delay_enable.DelayTime = playTimeBySeconds;
                delay_enable.SetEnable = false;
                delay_enable.Start();
            }
Beispiel #2
0
 public bool TryShowDamageWordAnim(FightEffectHelp.FightEffectType effect_type)
 {
     if (effect_type == FightEffectHelp.FightEffectType.EnemyDamage ||
         effect_type == FightEffectHelp.FightEffectType.Attendant_damage ||
         effect_type == FightEffectHelp.FightEffectType.CriticEnemyDamage ||
         effect_type == FightEffectHelp.FightEffectType.CriticAttendantDamage)
     {
         return(true);
     }
     return(false);
 }
        /// <summary>
        /// 根据 FightEffectHelp.FightEffectType 返回一个合适的飘字 GameObject
        /// </summary>
        /// <param name="var_type"></param>
        /// <returns></returns>
        public GameObject GetObjectByFightEffectType(FightEffectHelp.FightEffectType var_type)
        {
            FightEffectItemStruct find_struct;

            m_fightEffectItemArray.TryGetValue(var_type, out find_struct);
            if (find_struct == null)
            {
                return(null);
            }
            return(find_struct.CurObj);
        }
        /// <summary>
        /// 返回某个飘字类型的起始世界坐标位置(相对于UICamera)(PS:若没有挂点,则返回脚底坐标)
        /// </summary>
        /// <param name="target"></param>
        /// <param name="effect_type"></param>
        /// <param name="screen_abs_offset">屏幕绝对偏移值</param>
        /// <returns></returns>
        public static Vector3 GetEffectWorldPosInUIByType(Actor target, FightEffectHelp.FightEffectType effect_type, out Vector3 worldPosInScene, out Vector2 screen_abs_offset)
        {
            screen_abs_offset = Vector2.zero;
            worldPosInScene   = Vector3.zero;
            if (target == null || target.transform == null)
            {
                return(Vector3.zero);
            }

            Vector3 worldPos;

            DBFightFlyWord.DBFightFlyWordISev flyWordSev = DBFightFlyWord.Instance.GetFightFlyWordInfo((int)effect_type);
            if (flyWordSev != null && flyWordSev.IsScreenCenterBone)//屏幕中心点坐标
            {
                Camera mainCam = xc.ui.ugui.UIMainCtrl.MainCam;
                screen_abs_offset = new Vector2(mainCam.pixelWidth * (0.5f + flyWordSev.XOffset / 1280), mainCam.pixelHeight * (0.5f + flyWordSev.YOffset / 720));
                worldPos          = mainCam.ScreenToWorldPoint(new Vector3(screen_abs_offset.x, screen_abs_offset.y));
                worldPos.z        = 0;
                return(worldPos);
            }
            if (flyWordSev == null)//错误飘字类型
            {
                worldPosInScene = target.transform.position;
            }
            else
            {
                Transform slot_transform = target.GetSlotTransform(flyWordSev.Bone);
                if (slot_transform == null)
                {
                    worldPosInScene = target.transform.position;
                }
                else
                {
                    worldPosInScene = slot_transform.position;
                }
            }
            Camera  mainCamera = Game.Instance.MainCamera;
            Vector3 screenPos  = mainCamera.WorldToScreenPoint(worldPosInScene);

            if (flyWordSev != null)
            {
                screen_abs_offset = new Vector2(mainCamera.pixelWidth * flyWordSev.XOffset / 1280, mainCamera.pixelHeight * flyWordSev.YOffset / 720);
                screenPos.x      += screen_abs_offset.x;
                screenPos.y      += screen_abs_offset.y;
            }

            worldPos   = xc.ui.ugui.UIMainCtrl.MainCam.ScreenToWorldPoint(screenPos);
            worldPos.z = 0;
            return(worldPos);
        }
Beispiel #5
0
        /// <summary>
        /// 显示未命中时候的效果
        /// </summary>
        public static void ShowDamageEffect(Damage dmg, uint effectType, int value = 0)
        {
            var damageEffects = DBDamageEffect.GetInstance().DamagetEffects;

            using (var enumer = damageEffects.GetEnumerator())
            {
                while (enumer.MoveNext())
                {
                    var info = enumer.Current.Value;

                    // 从DBDamageEffect配表中获取匹配的特殊伤害类型
                    if ((effectType & info.ID) != 0)
                    {
                        FightEffectHelp.FightEffectType type = FightEffectHelp.GetFightEffectTypeByDamageEffect((Damage.EDamageEffect)info.ID);

                        if (info.Target == DBDamageEffect.EffectTarget.ET_DEST)
                        {
                            var targer_actor = dmg.target;
                            if (targer_actor != null)
                            {
                                targer_actor.ShowDamageEffect(type, dmg.SrcID, value);
                            }
                        }
                        else if (info.Target == DBDamageEffect.EffectTarget.ET_SRC)
                        {
                            var src_actor = dmg.src;
                            if (src_actor != null)
                            {
                                if (type == FightEffectHelp.FightEffectType.OneHitKill)
                                {
                                    continue;
                                }
                                src_actor.ShowDamageEffect(type, dmg.SrcID, value);
                            }
                        }
                    }
                }
            }
        }
Beispiel #6
0
            /// <summary>
            /// 显示伤害数字
            /// </summary>
            public void ShowDamageValue(/*Vector3 headPos, */ int damageValue, float displayTimeScale, EUnitType unitType, bool isLocalPlayer, Actor actor, Vector3 attacker_world_pos, FightEffectHelp.FightEffectType type)
            {
                if (damageValue <= 0)
                {
                    return;
                }

                var fightEffectWindow = GetFightEffectWindow();

                if (fightEffectWindow == null)
                {
                    return;
                }
                GameObject damageEffectObject = null;

                damageEffectObject = fightEffectWindow.GetObjectByFightEffectType(type);
                if (damageEffectObject == null)
                {
                    return;
                }

                //damageEffectObject.transform.localScale = Vector3.one * m_normal_damage_num_scale;

                int level = FightEffectHelp.GetLayoutLevel(type);

                fightEffectWindow.SetGameObjectLayoutLevel(damageEffectObject, level);

                Vector3 worldPosInScene;
                Vector2 screen_abs_offset;
                Vector3 worldPos = xc.ui.ugui.UIFightEffectWindow.GetEffectWorldPosInUIByType(actor, type, out worldPosInScene, out screen_abs_offset);

                damageEffectObject.transform.position      = worldPos;
                damageEffectObject.transform.localPosition = new Vector3(damageEffectObject.transform.localPosition.x,
                                                                         damageEffectObject.transform.localPosition.y, 0);

                if (type == FightEffectHelp.FightEffectType.OneHitKill)
                {
                }
                else
                {
                    Text effectValueLabel = damageEffectObject.transform.Find("Value").GetComponent <Text>();


                    if (effectValueLabel != null)
                    {
                        if (isLocalPlayer)
                        {
                            effectValueLabel.text = (-damageValue).ToString();
                        }
                        else if (type == FightEffectHelp.FightEffectType.OurDamage && damageValue > 0)
                        {
                            effectValueLabel.text = (-damageValue).ToString();
                        }
                        else
                        {
                            effectValueLabel.text = damageValue.ToString();
                        }
                    }
                }
                damageEffectObject.SetActive(true);

                float     playTimeBySeconds = 2;
                Animation animation         = damageEffectObject.GetComponentInChildren <Animation>();

                if (animation != null && animation.clip != null)
                {
                    playTimeBySeconds = animation.clip.length;
                    animation[animation.clip.name].speed = displayTimeScale;
                }

                var delay_enable = damageEffectObject.GetComponent <DelayEnableComponent>();

                delay_enable.DelayTime = 2 * displayTimeScale;
                delay_enable.SetEnable = false;
                delay_enable.Start();

                if (TryShowDamageWordAnim(type))
                {
                    UIFightDamageWordAnimComponent anim_component = damageEffectObject.GetComponent <UIFightDamageWordAnimComponent>();
                    if (anim_component == null)
                    {
                        anim_component = damageEffectObject.AddComponent <UIFightDamageWordAnimComponent>();
                    }
                    anim_component.Show(displayTimeScale, worldPosInScene, attacker_world_pos, actor.transform.position, type, screen_abs_offset);
                }
            }