コード例 #1
0
 public override bool OnTrigger(LCharacterColliderData cdata, Collider other, LChatacterInterface character, LChatacterInformationInterface information)
 {
     if (cdata.type == "tra")
     {
         LCharacterTransferData data = cdata.getData <LCharacterTransferData>();
         jumpSpeed    = data.speed;
         jumpHeight   = data.height;
         beginPositon = character.GetCurPosition();
         endPositoin  = data.target.position;
         return(true);
     }
     return(false);
 }
コード例 #2
0
ファイル: LChatacterAction.cs プロジェクト: whisperlin/utils
 public static void OnHit
     (Collider collider, LCharacterColliderData cdata, ref LChatacterAction curAction, List <LChatacterAction> actions, LChatacterInterface character, LChatacterInformationInterface information)
 {
     for (int i = 0, c = actions.Count; i < c; i++)
     {
         var a = actions[i];
         if (a.OnTrigger(cdata, collider, character, information))
         {
             if (null != curAction)
             {
                 curAction.endAction(character, information);
             }
             curAction = a;
             a.beginAction(character, information);
             break;
         }
     }
 }
コード例 #3
0
    private void Start()
    {
        LCharacterHitDataCmp hdc = GetComponent <LCharacterHitDataCmp>();

        if (null == hdc)
        {
            hdc = gameObject.AddComponent <LCharacterHitDataCmp>();
        }
        LCharacterColliderData cdata = hdc.data;

        LCharacterTransferData data = new LCharacterTransferData();

        cdata.type  = "tra";
        data.target = target;
        data.height = height;
        data.speed  = speed;
        cdata.data  = data;
    }
コード例 #4
0
ファイル: LChatacterHitFly.cs プロジェクト: whisperlin/TA2019
 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);
 }
コード例 #5
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);
    }
コード例 #6
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);
    }
コード例 #7
0
 public static void OnHit
     (Collider collider, LCharacterColliderData cdata, ref LCharacterAction curAction, List <LCharacterAction> actions, LCharacterInterface character, LChatacterInformationInterface information)
 {
     //if (character.IsAI())
     //   Debug.Log(curAction.ToString() + " check stop");
     if (curAction != null && !curAction.CanStopByTrigger(cdata, collider, character, information))
     {
         return;
     }
     for (int i = 0, c = actions.Count; i < c; i++)
     {
         var a = actions[i];
         if (a.OnTrigger(cdata, collider, character, information))
         {
             if (null != curAction)
             {
                 curAction.endAction(character, information);
             }
             curAction = a;
             a.beginAction(character, information);
             break;
         }
     }
 }
コード例 #8
0
ファイル: TransferInfor.cs プロジェクト: whisperlin/TA2019
    private void Start()
    {
        if (gameObject.layer < 2)
        {
            gameObject.layer = GlobalCamp.globalCampInformations[0].other;
        }

        LCharacterHitDataCmp hdc = GetComponent <LCharacterHitDataCmp>();

        if (null == hdc)
        {
            hdc = gameObject.AddComponent <LCharacterHitDataCmp>();
        }
        hdc.needTouchState = false;
        LCharacterColliderData cdata = hdc.data;

        LCharacterTransferData data = new LCharacterTransferData();

        cdata.type  = "tra";
        data.target = target;
        data.height = height;
        data.speed  = speed;
        cdata.data  = data;

        Collider c = gameObject.GetComponent <Collider>();

        if (null == c)
        {
            BoxCollider b = gameObject.AddComponent <BoxCollider>();
            b.isTrigger = true;
        }
        else
        {
            c.isTrigger = true;
        }
    }
コード例 #9
0
ファイル: LChatacterAction.cs プロジェクト: whisperlin/utils
 public virtual bool OnTrigger(LCharacterColliderData cdata, Collider other, LChatacterInterface character, LChatacterInformationInterface information)
 {
     //return true 则消息不再向下传递
     return(false);
 }
コード例 #10
0
ファイル: LCharacterHitBase.cs プロジェクト: whisperlin/utils
    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);
    }
コード例 #11
0
ファイル: CharacterBase.cs プロジェクト: whisperlin/TA2019
 public virtual void OnHit(LCharacterColliderData data)
 {
 }
コード例 #12
0
 public void OnHit(Collider other, LCharacterColliderData hitData, Vector3 dir, ref LCharacterAction curAction, List <LCharacterAction> actionList, LChatacterInformationInterface information)
 {
     LCharacterAction.OnHit(other, hitData, ref curAction, actionList, this, information);
 }