Example #1
0
    IEnumerator CommunicationEnumerator()
    {
        while (true)
        {
            if (MainHero == null)
            {
                yield return(new WaitForSeconds(timeinterval));

                continue;
            }

            //每1/4秒同步数据到C++逻辑层
            EntityBatchCommunicator.Update();
            yield return(new WaitForSeconds(0.25f));
        }
    }
Example #2
0
    public void Send_Sync_Position(MoveSyncFlag reportToSever)
    {
        // trace
        if (m_pFSM == null)
        {
            Trace.LogError("CreatureState_Jomp.cs Send_Sync_Position m_pFSM == null");
            return;
        }

        //如果上报位置范围不对,则输出至LOG,退出
        if (float.IsNaN(tr.position.x) || float.IsNaN(tr.position.y) || float.IsNaN(tr.position.z) || Math.Abs(tr.position.x) > SceneManager.MAX_SCENE_SIZE || Math.Abs(tr.position.y) > SceneManager.MAX_SCENE_SIZE || Math.Abs(tr.position.z) > SceneManager.MAX_SCENE_SIZE)
        {
            Debug.LogError(m_pFSM.name + " Jumping Send_Sync_Position Position Error " + tr.position);
            return;
        }


        cmd_creature_rigidbody_sync data = new cmd_creature_rigidbody_sync();

        data.nCreatureState = (int)EntityState.Glide;
        data.fPosition_x    = tr.position.x;
        data.fPosition_y    = tr.position.y;
        data.fPosition_z    = tr.position.z;

        // 直接用欧拉角
        data.fRotation_x = tr.rotation.eulerAngles.x;
        data.fRotation_y = tr.rotation.eulerAngles.y;
        data.fRotation_z = tr.rotation.eulerAngles.z;

        data.fVelocity_x = m_pFSM.syncVelocity.x;
        data.fVelocity_y = m_pFSM.syncVelocity.y;
        data.fVelocity_z = m_pFSM.syncVelocity.z;
        data.nSyn2Server = (int)reportToSever;

        EntityEventHelper.Instance.SendCommand <cmd_creature_rigidbody_sync>(m_pFSM.entityID, EntityLogicDef.ENTITY_CMD_SET_POS, ref data);

        // 通知主角位置发生变化
        U3D_Render.EntityLocUpdate.SendActorLocationChange(new Vector3(tr.position.x, tr.position.y, tr.position.z));
        EntityBatchCommunicator.SendEntityPro(m_pFSM.entityID, tr.position, tr.rotation.eulerAngles);
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 发送一次位置同步
    public void Send_Sync_Position(MoveSyncFlag reportToSever)
    {
        if (m_pFSM == null)
        {
            Trace.LogError("CreatureState_Standing.cs Send_Sync_Position m_pFSM == null");
            return;
        }

        //如果上报位置范围不对,则输出至LOG,退出
        if (float.IsNaN(m_pFSM.syncPosition.x) || float.IsNaN(m_pFSM.syncPosition.y) || float.IsNaN(m_pFSM.syncPosition.z) || Math.Abs(m_pFSM.syncPosition.x) > SceneManager.MAX_SCENE_SIZE || Math.Abs(m_pFSM.syncPosition.y) > SceneManager.MAX_SCENE_SIZE || Math.Abs(m_pFSM.syncPosition.z) > SceneManager.MAX_SCENE_SIZE)
        {
            Debug.LogError(m_pFSM.name + " standing Send_Sync_Position Position Error " + m_pFSM.syncPosition);
            return;
        }


        cmd_creature_rigidbody_sync data = new cmd_creature_rigidbody_sync();

        data.nCreatureState = (int)EntityState.WallWalking;
        data.fPosition_x    = m_pFSM.syncPosition.x;
        data.fPosition_y    = m_pFSM.syncPosition.y;
        data.fPosition_z    = m_pFSM.syncPosition.z;

        // 直接用欧拉角
        data.fRotation_x = m_pFSM.syncAngle.x;
        data.fRotation_y = m_pFSM.syncAngle.y;
        data.fRotation_z = m_pFSM.syncAngle.z;

        data.fVelocity_x = m_pFSM.syncVelocity.x;
        data.fVelocity_y = m_pFSM.syncVelocity.y;
        data.fVelocity_z = m_pFSM.syncVelocity.z;
        data.nSyn2Server = (int)reportToSever;

        EntityEventHelper.Instance.SendCommand <cmd_creature_rigidbody_sync>(m_pFSM.entityID, EntityLogicDef.ENTITY_CMD_SET_POS, ref data);

        if (tr == null)
        {
            Trace.LogError("CreatureState_Standing.cs Send_Sync_Position tr == null");
            return;
        }

        if (tr.position == null)
        {
            Trace.LogError("CreatureState_WallWalking.cs Send_Sync_Position tr.SetPosition== null");
            return;
        }

        if (tr.rotation == null)
        {
            Trace.LogError("CreatureState_WallWalking.cs Send_Sync_Position tr.rotation == null");
            return;
        }

        if (tr.rotation.eulerAngles == null)
        {
            Trace.LogError("CreatureState_WallWalking.cs Send_Sync_Position tr.rotation.eulerAngles == null");
            return;
        }

        EntityBatchCommunicator.SendEntityPro(m_pFSM.entityID, tr.position, tr.rotation.eulerAngles);

        if (m_pFSM.isHero)
        {
            U3D_Render.EntityView ev = EntityFactory.getPlayerViewByID(m_pFSM.entityID);
            MapFinderManager.MoveObject(ref ev, tr.position);
        }
    }