Exemple #1
0
    public void BeAttacked(SMsgBattleBeatBack_SC smsg)
    {
        m_time = smsg.time / 1000f;

        //\暂时处理
        mCorrectPos = mCorrectPos.GetFromServer(smsg.PosX, smsg.PosY);

        //TraceUtil.Log("接到结算数据包:" + smsg.DirX + " , " + smsg.DirY + " , " + smsg.speed + " , " + smsg.Accelerated);

        //float rad = smsg.Angel/1000f * Mathf.Deg2Rad;

        //float x = Mathf.Cos(rad);
        //float z = -1 * Mathf.Sin(rad);
        //m_angle =90 - Mathf.Atan2(z, x) * Mathf.Rad2Deg + 180;
        m_instantSpeed      = smsg.speed;
        m_accelerationSpeed = smsg.Accelerated;

        Vector3 unitDir = new Vector3(smsg.DirX, 0, smsg.DirY * -1f);

        m_motionVector = unitDir.normalized * smsg.speed * 0.1f;

        m_angle = 90 - Mathf.Atan2(smsg.DirY * -1f, smsg.DirX) * Mathf.Rad2Deg + 180;

        if (smsg.Accelerated != 0)
        {
            m_accelerationVector = m_motionVector * (smsg.Accelerated * 1.0f / smsg.speed);
        }
        else
        {
            m_accelerationVector = Vector3.zero;
        }
    }
Exemple #2
0
    private void BeatBack(long uid, Vector3 pos, Vector3 dir)
    {
        SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC = new SMsgBattleBeatBack_SC();

        sMsgBattleBeatBack_SC.uidFighter  = uid;
        sMsgBattleBeatBack_SC.PosX        = pos.x * 10.0f;
        sMsgBattleBeatBack_SC.PosY        = -pos.z * 10.0f;
        sMsgBattleBeatBack_SC.DirX        = dir.x;
        sMsgBattleBeatBack_SC.DirY        = -dir.z;
        sMsgBattleBeatBack_SC.speed       = (int)(m_impactData.m_beatBackSpeed * 10.0f);
        sMsgBattleBeatBack_SC.Accelerated = (int)(m_impactData.m_beatBackAcceleration * 10.0f);
        sMsgBattleBeatBack_SC.time        = (int)(m_impactData.m_beatBackDuration);

        RaiseEvent(EventTypeEnum.BeatBack.ToString(), sMsgBattleBeatBack_SC);

        //send to server
        SMsgFightBeatBack_CS sMsgFightBeatBack_CS = new SMsgFightBeatBack_CS();

        sMsgFightBeatBack_CS.uidFighter = uid;
        sMsgFightBeatBack_CS.byType     = 1;
        sMsgFightBeatBack_CS.hitedPosX  = pos.x * 10.0f;
        sMsgFightBeatBack_CS.hitedPosY  = -pos.z * 10.0f;
        //NetServiceManager.Instance.BattleService.SendFightBeatBackCS(sMsgFightBeatBack_CS);
        beatBackList.Add(sMsgFightBeatBack_CS);
    }
Exemple #3
0
    void ReceiveBeatBackHandle(INotifyArgs notifyArgs)
    {
        if (this.m_entityUid != 0)
        {
            SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC = (SMsgBattleBeatBack_SC)notifyArgs;

            if (sMsgBattleBeatBack_SC.uidFighter == this.m_entityUid)
            {
                flag = false;
            }
        }
    }
Exemple #4
0
    public static SMsgBeatBackContextNum_SC ParseResultPackage(byte[] pkgData)
    {
        int offset = 0;
        int singleContextLength = Marshal.SizeOf(typeof(SMsgBattleBeatBack_SC));

        SMsgBeatBackContextNum_SC sMsgBeatBackContextNum_SC;

        offset += PackageHelper.ReadData(pkgData.Skip(offset).ToArray(), out sMsgBeatBackContextNum_SC.byContextNum);
        sMsgBeatBackContextNum_SC.list = new List <SMsgBattleBeatBack_SC>();
        for (int i = 0; i < sMsgBeatBackContextNum_SC.byContextNum; i++)
        {
            SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC = SMsgBattleBeatBack_SC.ParseResultPackage(pkgData.Skip(offset).Take(singleContextLength).ToArray());
            sMsgBeatBackContextNum_SC.list.Add(sMsgBattleBeatBack_SC);
            offset += singleContextLength;
        }
        return(sMsgBeatBackContextNum_SC);
    }
Exemple #5
0
    public void SetBeatBackData(SMsgBattleBeatBack_SC dataModel)
    {
        Vector3 mCorrectPos            = this.m_PlayerBehaviour.ThisTransform.position;
        var     sSMsgBattleBeatBack_SC = (SMsgBattleBeatBack_SC)dataModel;

        m_clientBattleBeatBack = new ClientBattleBeatBack();

        m_clientBattleBeatBack.Accelerated    = sSMsgBattleBeatBack_SC.Accelerated;
        m_clientBattleBeatBack.TargetRotation = Quaternion.FromToRotation(Vector3.forward, new Vector3(-dataModel.DirX, 0, dataModel.DirY));   //玩家的朝向,与击退方向相反。所以x*-1,y*-1

        m_clientBattleBeatBack.speed       = sSMsgBattleBeatBack_SC.speed * 0.1f;
        m_clientBattleBeatBack.Accelerated = sSMsgBattleBeatBack_SC.Accelerated * 0.1f;
        m_clientBattleBeatBack.time        = sSMsgBattleBeatBack_SC.time / 1000f;

        mCorrectPos = mCorrectPos.GetFromServer(sSMsgBattleBeatBack_SC.PosX, sSMsgBattleBeatBack_SC.PosY);
        if (!SceneDataManager.Instance.IsPositionInBlock(mCorrectPos))
        {
            this.m_PlayerBehaviour.ThisTransform.position = mCorrectPos;
        }
    }
Exemple #6
0
    //受击退
    public void BeAttacked(SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC)
    {
        monsterMoveNodes.Clear();

        if (m_FSMSystem.CurrentStateID == StateID.MonsterBeAttacked ||
            m_FSMSystem.CurrentStateID == StateID.MonsterBeAdsorb ||
            m_FSMSystem.CurrentStateID == StateID.MonsterBeHitFly ||
            m_FSMSystem.CurrentStateID == StateID.MonsterBeHorde ||
            m_FSMSystem.CurrentStateID == StateID.MonsterStand
            )
        {
            ((MonsterFsmState)m_FSMSystem.CurrentState).DoNotSendBeatEnd = true;
        }
        else
        {
            ((MonsterFsmState)m_FSMSystem.CurrentState).DoNotSendBeatEnd = false;
        }

        m_MonsterBeAttackState.BeAttacked(sMsgBattleBeatBack_SC);
        m_FSMSystem.PerformTransition(Transition.MonsterToBeAttacked);
    }