Ejemplo n.º 1
0
    protected override void SetHitData(LCharacterHitData data, Vector3 dir)
    {
        float hit_down = data.value.GetValueFloat("hit_down", 0.0f);
        float hit_back = data.value.GetValueFloat("hit_back", 0.0f) * 0.5f;

        ctrl_time       = data.value.GetValueFloat("ctrl_time", 0.0f);
        MoveDir         = Vector3.down * hit_down + dir * hit_back;
        this.effect     = data.effect;
        this.effect_obj = data.effect_obj;
    }
Ejemplo n.º 2
0
    public void OnHit(LCharacterHitData data)
    {
        int _hp = data.value.GetValueInt("hp", 0);
        int _mp = data.value.GetValueInt("mp", 0);

        this.hp -= (int)_hp;
        this.hp -= (int)_mp;
        if (null != HitFontManager.globalMgr)
        {
            HitFontManager.globalMgr.CreateFont(0, _hp, character.GetCurPosition());
        }
    }
Ejemplo n.º 3
0
    protected override void SetHitData(LCharacterHitData data, Vector3 dir)
    {
        float ctrl_time = data.value.GetValueFloat("ctrl_time", 0.0f);
        float hit_back  = data.value.GetValueFloat("hit_back", 0.0f);
        float hit_fly   = data.value.GetValueFloat("hit_fly", 0.0f);

        //Debug.Log("hit_back = "+ hit_back);
        JumpTime        = ctrl_time;
        jumpSpeed       = hit_back;
        jumpHeight      = hit_fly;
        MoveDir         = dir;
        this.effect     = data.effect;
        this.effect_obj = data.effect_obj;
    }
Ejemplo n.º 4
0
    public LCharacterHitData Clone()
    {
        //hittedObject 这个必须是自己的
        LCharacterHitData data = new LCharacterHitData();

        data.characterId = characterId;
        data.value       = this.value;
        data.firstHit    = true;
        data.cdName      = cdName;
        data.skillState  = skillState;
        data.effect      = effect;
        data.effect_obj  = effect_obj;
        return(data);
    }
Ejemplo n.º 5
0
    protected override void SetHitData(LCharacterHitData data, Vector3 dir)
    {
        float ctrl_time     = data.value.GetValueFloat("ctrl_time", 0.0f);
        float hit_back      = data.value.GetValueFloat("hit_back", 0.0f);
        float hit_back_time = data.value.GetValueFloat("hit_back_time", 0.0f);

        this.ctrl_time      = ctrl_time;
        this.hit_back_speed = hit_back;
        this.hit_back_time  = hit_back_time;
        this.effect         = data.effect;
        this.effect_obj     = data.effect_obj;

        MoveDir = dir;
    }
Ejemplo n.º 6
0
 public override bool CanStopByTrigger(LCharacterColliderData cdata, Collider other, LCharacterInterface character, LChatacterInformationInterface information)
 {
     //暂时倒地不能攻击
     if (onGround)
     {
         return(false);
     }
     if (!base.CanStopByTrigger(cdata, other, character, information))
     {
         return(false);
     }
     if (cdata.type == "hit")
     {
         LCharacterHitData data   = cdata.getData <LCharacterHitData>();
         ActionType        status = (ActionType)data.value.GetValueInt("status", 0);
         if (status == ActionType.HIT_FLY || status == ActionType.HIT_DOWN)
         {
             beBreak = true;
             return(true);
         }
         float slow_motion = data.value.GetValueFloat("slow_motion", 0f);
         float air_delay   = data.value.GetValueFloat("air_delay", 0f);
         if (data.firstHit)
         {
             if (data.cdState == CdState.HIT)
             {
                 LCharacterInterface chr;
                 if (information.TryGetCharacter(data.characterId, out chr))
                 {
                     chr.updateCDState(data.cdName, data.skillState);
                 }
             }
             if (slow_motion > 0.0001f)
             {
                 information.slowly(0.01f, slow_motion);
                 data.firstHit = true;
             }
             character.ResetAndPlay(animNameFly);
             this.air_delay = air_delay;
         }
         return(false);
     }
     return(true);
 }
Ejemplo n.º 7
0
    public override bool OnTrigger(LCharacterColliderData cdata, Collider other, LChatacterInterface character, LChatacterInformationInterface information)
    {
        if (cdata.type == "hit")
        {
            LCharacterHitData data   = cdata.getData <LCharacterHitData>();
            ActionType        status = (ActionType)data.value.GetValueInt("status", 0);
            if (GetActionType() == status)
            {
                if (!data.hittedObject.Contains(character.GetId()) && null != data.value)
                {
                    data.hittedObject.Add(character.GetId());

                    if (character.IsAI())
                    {
                        character.AddHaterd(data.characterId, 1);
                    }
                    float slow_motion = data.value.GetValueFloat("slow_motion", 0f);
                    if (data.firstHit)
                    {
                        if (data.cdState == CdState.HIT)
                        {
                            LChatacterInterface chr = information.GetCharacter(data.characterId);
                            chr.updateCDState(data.cdName, data.skillState);
                        }
                        if (slow_motion > 0.0001f)
                        {
                            information.slowly(0.01f, slow_motion);
                            data.firstHit = true;
                        }
                    }

                    Vector3 dir = other.transform.forward;
                    dir.y = 0;
                    dir.Normalize();
                    SetHitData(data, dir);
                    return(true);
                }
            }
        }
        return(false);
    }
Ejemplo n.º 8
0
    public virtual bool CanStopByTrigger(LCharacterColliderData cdata, Collider other, LCharacterInterface character, LChatacterInformationInterface information)
    {
        var v = character.GetData((int)ACTIONATA.ROLE_STATE);

        if (v == null)
        {
            return(true);
        }
        if (cdata.type == "hit")
        {
            //如果是攻击
            LCharacterHitData data = cdata.getData <LCharacterHitData>();
            long state             = System.Convert.ToInt64(v);
            //如果角色拥有霸体状态.
            if (state == 1 || state == 2)
            {
                //这里加角色检查
                //可以让主角打中人或者 霸体状态被打中才发生减速.
                float slow_motion = data.value.GetValueFloat("slow_motion", 0f);
                if (data.firstHit)
                {
                    if (data.cdState == CdState.HIT)
                    {
                        LCharacterInterface chr;
                        if (information.TryGetCharacter(data.characterId, out chr))
                        {
                            chr.updateCDState(data.cdName, data.skillState);
                        }
                    }
                    if (slow_motion > 0.0001f)
                    {
                        information.slowly(0.01f, slow_motion);
                        data.firstHit = true;
                    }
                }
                return(false);
            }
        }
        return(true);
    }
Ejemplo n.º 9
0
    public override bool OnTrigger(LCharacterColliderData cdata, Collider other, LCharacterInterface character, LChatacterInformationInterface information)
    {
        if (cdata.type == "hit")
        {
            LCharacterHitData data   = cdata.getData <LCharacterHitData>();
            ActionType        status = (ActionType)data.value.GetValueInt("status", 0);
            if (GetActionType() == status)
            {
                if (!data.hittedObject.Contains(character.GetId()) && null != data.value)
                {
                    character.OnHit(data);
                    data.hittedObject.Add(character.GetId());

                    if (character.IsAI())
                    {
                        character.AddHaterd(data.characterId, 1);
                    }
                    float slow_motion = data.value.GetValueFloat("slow_motion", 0f);
                    if (data.firstHit)
                    {
                        if (data.cdState == CdState.HIT)
                        {
                            LCharacterInterface chr;
                            if (information.TryGetCharacter(data.characterId, out chr))
                            {
                                chr.updateCDState(data.cdName, data.skillState);
                            }
                        }
                        if (slow_motion > 0.0001f)
                        {
                            information.slowly(0.01f, slow_motion);
                            data.firstHit = true;
                        }
                    }
                    int     hit_dir = data.value.GetValueInt("hit_dir", 0);
                    Vector3 dir;
                    if (hit_dir == 0)
                    {
                        dir = other.transform.forward;
                    }
                    else if (hit_dir == 1)
                    {
                        dir = character.GetCurPosition() - other.transform.position;
                    }
                    else if (hit_dir == 2)
                    {
                        LCharacterInterface target;
                        if (information.TryGetCharacter(data.characterId, out target))
                        {
                            dir = character.GetCurPosition() - target.GetCurPosition();
                        }
                        else
                        {
                            dir = Vector3.forward;
                        }
                    }
                    else
                    {
                        LCharacterInterface target;
                        if (information.TryGetCharacter(data.characterId, out target))
                        {
                            dir = target.GetCurPosition() - character.GetCurPosition();
                        }
                        else
                        {
                            dir = Vector3.forward;
                        }
                    }
                    dir.y = 0;
                    dir.Normalize();

                    SetHitData(data, dir);
                    return(true);
                }
            }
        }
        return(false);
    }
Ejemplo n.º 10
0
 protected abstract void SetHitData(LCharacterHitData data, Vector3 dir);
Ejemplo n.º 11
0
    public void CmpObjectEvent(float curTime, float lastTime, LCHEventChannelData _e, ObjectContain contain, LCharacterInterface character, LChatacterInformationInterface information,
                               Dictionary <int, ObjectContain> objs
                               , CdState cdState
                               , string cdName
                               , int skillState
                               , Vector3 baseGroundPos
                               , ref float beginToTarget
                               , ref float endToTarget
                               , ref Vector3 beginTargetPoint
                               )
    {
        if (contain.isFlyTool)
        {
            if (null != contain.gameobject)
            {
                contain.gameobject.SetActive(false);
            }
            return;
        }
        LCHChannelType t = (LCHChannelType)_e.type;
        ObjDictionary  value;
        float          _time;
        float          _keyFrameTime;

        if (t == LCHChannelType.Object)
        {
            int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time, out _keyFrameTime);
            if (res == 1)
            {
                if (null != contain.gameobject)
                {
                    bool enable = value.GetValue <bool>("enable", true);
                    if (_e.objId == -1)
                    {
                        //因為主對象直接設置 gameObject的Enable,所有腳本都不工作了.
                        if (null != contain.roleRenders)
                        {
                            for (int n = 0; n < contain.roleRenders.Length; n++)
                            {
                                contain.roleRenders[n].enabled = enable;
                            }
                        }
                    }
                    else
                    {
                        if (enable)
                        {
                            contain.gameobject.SetActive(false);
                            contain.gameobject.SetActive(true);
                        }
                        else
                        {
                            contain.gameobject.SetActive(enable);
                        }
                    }
                    if (enable)
                    {
                        if (contain.type == 1)
                        {
                            string anim_name = value.GetValue <string>("anim", "");
                            if (anim_name.Length > 0)
                            {
                                if (null == contain.animaction)
                                {
                                    contain.animaction = contain.gameobject.GetComponent <Animation>();
                                }
                                if (null != contain.animaction)
                                {
                                    bool cf = value.GetValue <bool>("crossFade", true);
                                    //crossFade
                                    contain.animaction[anim_name].time = _time;
                                    if (cf)
                                    {
                                        contain.animaction.CrossFade(anim_name, 0.05f);
                                    }
                                    else
                                    {
                                        contain.animaction[anim_name].time = 0f;//特么不这么干不重置。。。
                                        contain.animaction.Play(anim_name);
                                    }
                                }
                            }
                            int ex_action = value.GetValueInt("ex_action", 0);
                            if (ex_action == 1)
                            {
                                //主模型.
                                if (_e.objId == -1)
                                {
                                    float ToTargetTime = value.GetValueFloat("ex_action", -1f);
                                    if (ToTargetTime > 0f)
                                    {
                                        beginToTarget    = _keyFrameTime;
                                        endToTarget      = _keyFrameTime + ToTargetTime;
                                        beginTargetPoint = baseGroundPos;
                                    }
                                }
                            }

                            //
                            else if (ex_action == 2)
                            {
                                contain.stopUpatePos = true;
                            }
                        }
                    }
                }
            }
            else if (res == 0)
            {
                if (_e.objId != -1)//非主模型,一开始隐藏
                {
                    if (null != contain.gameobject)
                    {
                        if (contain.objId != -1)
                        {
                            contain.gameobject.SetActive(false);
                        }
                    }
                }
            }
        }
        if (t == LCHChannelType.Event)
        {
            int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time, out _keyFrameTime);
            if (res == 1)
            {
                if (contain.type == 2 || contain.type == 3)
                {
                    if (null == contain.collider)
                    {
                        if (null != contain.gameobject)
                        {
                            contain.collider         = contain.gameobject.GetComponent <Collider>();
                            contain.gameobject.layer = character.GetAttackLayer();
                            if (null != contain.collider)
                            {
                                contain.collider.isTrigger = true;
                            }
                        }
                    }
                }
                if (null != contain.gameobject)
                {
                    bool enable = value.GetValue <bool>("enable", true);
                    contain.gameobject.SetActive(enable);
                    if (contain.collider)
                    {
                        contain.collider.enabled = enable;
                        if (enable)
                        {
                            if (null == contain.hitData)
                            {
                                LCharacterHitDataCmp hdc = contain.gameobject.GetComponent <LCharacterHitDataCmp>();
                                if (null == hdc)
                                {
                                    hdc = contain.gameobject.AddComponent <LCharacterHitDataCmp>();
                                }
                                contain.hitData = hdc.data;
                            }

                            contain.hitData.type = "hit";
                            LCharacterHitData hitData = new LCharacterHitData();

                            hitData.hittedObject.Clear();
                            hitData.value       = value;
                            hitData.characterId = character.GetId();
                            hitData.firstHit    = true;

                            hitData.cdName     = cdName;
                            hitData.skillState = skillState;
                            hitData.cdState    = cdState;

                            int effectId = value.GetValueInt("hit_effect", -2);
                            if (effectId != -2 && objs.ContainsKey(effectId))
                            {
                                var ct = objs[effectId];
                                hitData.effect     = ct.mod;
                                hitData.effect_obj = ct.baseGameObject;
                            }
                            else
                            {
                                hitData.effect     = null;
                                hitData.effect_obj = null;
                            }
                            contain.hitData.data = hitData;
                            int IsFlyTool = value.GetValueInt("IsFlyTool", 0);
                            if (IsFlyTool == 1)
                            {
                                if (contain.type == 3)
                                {
                                    float FlyToolTime  = value.GetValueFloat("FlyToolTime", 20f);
                                    float FlyToolSpeed = value.GetValueFloat("FlyToolSpeed", 2f);
                                    if (null != contain.gameobject)
                                    {
                                        var g = GameObject.Instantiate(contain.gameobject);
                                        LCharacterHitDataCmp hdc0 = g.GetComponent <LCharacterHitDataCmp>();
                                        g.name = "bullet";
                                        LCHBullet bullet = g.AddComponent <LCHBullet>();
                                        hdc0.data.data    = hitData;
                                        hdc0.data.type    = "hit";
                                        contain.isFlyTool = true;
                                        bullet.type       = LCHBullet.TYPE.NORMAL;
                                        bullet.speed      = FlyToolSpeed;
                                        bullet.maxTime    = FlyToolTime;

                                        g.SetActive(true);
                                        contain.gameobject.SetActive(false);
                                    }
                                }
                            }
                            else if (IsFlyTool == 2)
                            {
                                if (contain.type == 3)
                                {
                                    //float FlyToolTime = value.GetValueFloat("FlyToolTime", 20f);
                                    float FlyToolSpeed = value.GetValueFloat("FlyToolSpeed", 2f);
                                    if (null != contain.gameobject)
                                    {
                                        var g = GameObject.Instantiate(contain.gameobject);
                                        LCharacterHitDataCmp hdc0 = g.GetComponent <LCharacterHitDataCmp>();
                                        g.name = "bullet";
                                        LCHBullet bullet = g.AddComponent <LCHBullet>();
                                        hdc0.data.data     = hitData;
                                        hdc0.data.type     = "hit";
                                        contain.isFlyTool  = true;
                                        bullet.type        = LCHBullet.TYPE.FELLOW;
                                        bullet.speed       = FlyToolSpeed;
                                        bullet.curTargetId = curTargetId;

                                        bullet.maxTime = 60f;
                                        g.SetActive(true);
                                        contain.gameobject.SetActive(false);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else if (res == 0)
            {
                if (null != contain.gameobject)
                {
                    contain.gameobject.SetActive(false);
                }
            }
        }
    }
Ejemplo n.º 12
0
    public static void CmpObjectEvent(float curTime, float lastTime, LCHEventChannelData _e, ObjectContain contain, LChatacterInterface character, LChatacterInformationInterface information,
                                      Dictionary <int, ObjectContain> objs
                                      , CdState cdState
                                      , string cdName
                                      , int skillState

                                      )
    {
        LCHChannelType t = (LCHChannelType)_e.type;
        ObjDictionary  value;
        float          _time;

        if (t == LCHChannelType.Object)
        {
            int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time);
            if (res == 1)
            {
                if (null != contain.gameobject)
                {
                    bool enable = value.GetValue <bool>("enable", true);
                    if (_e.objId == -1)
                    {
                        //因為主對象直接設置 gameObject的Enable,所有腳本都不工作了.
                        if (null != contain.roleRenders)
                        {
                            for (int n = 0; n < contain.roleRenders.Length; n++)
                            {
                                contain.roleRenders[n].enabled = enable;
                            }
                        }
                    }
                    else
                    {
                        if (enable)
                        {
                            contain.gameobject.SetActive(false);
                            contain.gameobject.SetActive(true);

                            /*contain.gameobject.SetActive(enable);
                             * for (int i = 0, l = contain.systems.Length; i < l; i++)
                             * {
                             *  //Debug.Log(contain.systems[i].isStopped);
                             *  contain.systems[i].gameObject.SetActive(false);
                             *  contain.systems[i].gameObject.SetActive(true);
                             *  contain.systems[i].Play(true);
                             * }*/
                        }
                        else
                        {
                            contain.gameobject.SetActive(enable);
                        }

                        //Debug.LogError("_e.objId  " + _e.objId + " " + enable);
                        //contain.gameobject.SetActive(enable);
                    }

                    if (enable)
                    {
                        if (contain.type == 1)
                        {
                            string anim_name = value.GetValue <string>("anim", "");
                            if (anim_name.Length > 0)
                            {
                                if (null == contain.animaction)
                                {
                                    contain.animaction = contain.gameobject.GetComponent <Animation>();
                                }
                                if (null != contain.animaction)
                                {
                                    bool cf = value.GetValue <bool>("crossFade", true);
                                    //crossFade
                                    contain.animaction[anim_name].time = _time;
                                    if (cf)
                                    {
                                        contain.animaction.CrossFade(anim_name, 0.05f);
                                    }
                                    else
                                    {
                                        contain.animaction[anim_name].time = 0f;//特么受击不这么干不重置。。。
                                        contain.animaction.Play(anim_name);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else if (res == 0)
            {
                if (_e.objId != -1)//非主模型,一开始隐藏
                {
                    if (null != contain.gameobject)
                    {
                        if (contain.objId != -1)
                        {
                            contain.gameobject.SetActive(false);
                        }
                    }
                }
            }
        }
        if (t == LCHChannelType.Event)
        {
            int res = _e.TryGetKeyFrameRunTime(curTime, lastTime, out value, out _time);
            if (res == 1)
            {
                if (contain.type == 2 || contain.type == 3)
                {
                    if (null == contain.collider)
                    {
                        if (null != contain.gameobject)
                        {
                            contain.collider         = contain.gameobject.GetComponent <Collider>();
                            contain.gameobject.layer = character.GetAttackLayer();
                            if (null != contain.collider)
                            {
                                contain.collider.isTrigger = true;
                            }
                        }
                    }
                }
                if (null != contain.gameobject)
                {
                    bool enable = value.GetValue <bool>("enable", true);
                    contain.gameobject.SetActive(enable);
                    if (contain.collider)
                    {
                        contain.collider.enabled = enable;
                        if (enable)
                        {
                            if (null == contain.hitData)
                            {
                                LCharacterHitDataCmp hdc = contain.gameobject.GetComponent <LCharacterHitDataCmp>();
                                if (null == hdc)
                                {
                                    hdc = contain.gameobject.AddComponent <LCharacterHitDataCmp>();
                                }
                                contain.hitData = hdc.data;
                            }

                            contain.hitData.type = "hit";
                            LCharacterHitData hitData = new LCharacterHitData();

                            hitData.hittedObject.Clear();
                            hitData.value       = value;
                            hitData.characterId = character.GetId();
                            hitData.firstHit    = true;

                            hitData.cdName     = cdName;
                            hitData.skillState = skillState;
                            hitData.cdState    = cdState;

                            int effectId = value.GetValueInt("hit_effect", -2);
                            if (effectId != -2 && objs.ContainsKey(effectId))
                            {
                                var ct = objs[effectId];
                                hitData.effect     = ct.mod;
                                hitData.effect_obj = ct.baseGameObject;
                            }
                            else
                            {
                                hitData.effect     = null;
                                hitData.effect_obj = null;
                            }
                            contain.hitData.data = hitData;
                        }
                    }
                }
            }
            else if (res == 0)
            {
                if (null != contain.gameobject)
                {
                    contain.gameobject.SetActive(false);
                }
            }
        }
    }