Пример #1
0
    // Token: 0x060009D5 RID: 2517 RVA: 0x000475AC File Offset: 0x000457AC
    private void SyncPosition(ZDO zdo, float dt)
    {
        if (this.m_characterParentSync && zdo.HasOwner())
        {
            ZDOID zdoid = zdo.GetZDOID(ZSyncTransform.m_parentIDHash);
            if (!zdoid.IsNone())
            {
                GameObject gameObject = ZNetScene.instance.FindInstance(zdoid);
                if (gameObject)
                {
                    ZSyncTransform component = gameObject.GetComponent <ZSyncTransform>();
                    if (component)
                    {
                        component.ClientSync(dt);
                    }
                    Vector3 vector = zdo.GetVec3(ZSyncTransform.m_relPos, Vector3.zero);
                    Vector3 vec    = zdo.GetVec3(ZSyncTransform.m_velHash, Vector3.zero);
                    if (zdo.m_dataRevision != this.m_posRevision)
                    {
                        this.m_posRevision    = zdo.m_dataRevision;
                        this.m_targetPosTimer = 0f;
                    }
                    this.m_targetPosTimer += dt;
                    this.m_targetPosTimer  = Mathf.Min(this.m_targetPosTimer, 2f);
                    vector += vec * this.m_targetPosTimer;
                    if (!this.m_haveTempRelPos)
                    {
                        this.m_haveTempRelPos = true;
                        this.m_tempRelPos     = vector;
                    }
                    if (Vector3.Distance(this.m_tempRelPos, vector) > 0.001f)
                    {
                        this.m_tempRelPos = Vector3.Lerp(this.m_tempRelPos, vector, 0.2f);
                        vector            = this.m_tempRelPos;
                    }
                    Vector3 vector2 = gameObject.transform.TransformPoint(vector);
                    if (Vector3.Distance(base.transform.position, vector2) > 0.001f)
                    {
                        base.transform.position = vector2;
                    }
                    return;
                }
            }
        }
        this.m_haveTempRelPos = false;
        Vector3 vector3 = zdo.GetPosition();

        if (zdo.m_dataRevision != this.m_posRevision)
        {
            this.m_posRevision    = zdo.m_dataRevision;
            this.m_targetPosTimer = 0f;
        }
        if (zdo.HasOwner())
        {
            this.m_targetPosTimer += dt;
            this.m_targetPosTimer  = Mathf.Min(this.m_targetPosTimer, 2f);
            Vector3 vec2 = zdo.GetVec3(ZSyncTransform.m_velHash, Vector3.zero);
            vector3 += vec2 * this.m_targetPosTimer;
        }
        float num = Vector3.Distance(base.transform.position, vector3);

        if (num > 0.001f)
        {
            base.transform.position = ((num < 5f) ? Vector3.Lerp(base.transform.position, vector3, 0.2f) : vector3);
        }
    }