Ejemplo n.º 1
0
    public static void receiveObject(byte[] data, out IdentityAndTransform iat)
    {
        ByteReceiver br          = new ByteReceiver(data);
        var          objectID    = br.getInt();
        int          authorityID = br.getInt();
        var          type        = (ObjectType)br.getInt();
        var          prefabIndex = br.getInt();
        var          pos         = br.getVector3();
        var          rot         = br.getQuaternion();

        iat = NetTransportManager.instance.spawnObjectSync(prefabIndex, authorityID, pos, rot, objectID);
        switch (type)
        {
        case ObjectType.Planet:
            var mass   = br.getFloat();
            var linVel = br.getVector3();
            var angVel = br.getVector3();
            var seed   = br.getInt();
            var radius = br.getFloat();
            UniverseManager.instance.syncPlanet(iat, mass, linVel, angVel, seed, radius);
            break;

        case ObjectType.Rigidbody:
            var massR   = br.getFloat();
            var linVelR = br.getVector3();
            var angVelR = br.getVector3();
            makeRigidBody(iat.instance, massR, linVelR, angVelR);
            break;
        }
    }
    private void receiveRelayS(ByteReceiver br)
    {
        DataType typeL    = (DataType)br.getInt();
        int      uniqueID = br.getInt();

        br.clean();
        ReceiveDataEvent(typeL, playerInfoList[findWithUniqueID(uniqueID)], br.data);
    }
    public virtual void receiveSyncOthers(ByteReceiver br)
    {
        br.clean();
        if (isServer())
        {
            return;
        }
        //Remove all synced PlayerInfo's
        int count = 0;

        for (int i = 0; i < playerInfoList.Count; i++)
        {
            if (playerInfoList [count].synced)
            {
                playerInfoList.RemoveAt(count);
            }
            else
            {
                count++;
            }
        }

        int max = br.getInt();

        for (int i = 0; i < max; i++)
        {
            var pi = new PlayerInfo();
            br.index  = pi.deserialize(br.data, br.index);
            pi.synced = true;
            playerInfoList.Add(pi);
        }
        updatePlayerInfoListArrays();
    }
    public override void ReceiveDataEvent(DataType type, PlayerInfo playerInfo, byte[] data, int index = 0)
    {
        base.ReceiveDataEvent(type, playerInfo, data, index);

        if (type == DataType.Sync)
        {
            ByteReceiver br    = new ByteReceiver(data, index);
            var          stype = (SyncType)br.getInt();
            data = br.clean();
            switch (stype)
            {
            case SyncType.Spawning:
                receiveSpawn(data);
                break;

            case SyncType.TransUpdate:
                receiveTransUpdate(data);
                break;

            case SyncType.Request:
                if (!server)
                {
                    logMessage("Request Received, not server", "error");
                    return;
                }
                receiveRequest(data, playerInfo);
                break;
            }
        }
    }
Ejemplo n.º 5
0
    public void ReceiveDataBasicEvent(int hostId, int connectionID, int channelId, byte[] data, int size)
    {
        ByteReceiver br   = new ByteReceiver(data);
        var          type = (DataType)br.getInt();

        br.clean();
        ReceiveDataEvent(type, playerInfoList [findWithConnID(connectionID)], br.data);
    }
    public int deserialize(byte[] bytes, int index)
    {
        ByteReceiver br = new ByteReceiver(bytes, index);

        uniqueID = br.getInt();
        color    = br.getColor();
        name     = br.getString();
        return(br.index);
    }
    private void receiveRequest(byte[] data, PlayerInfo pi)
    {
        ByteReceiver br = new ByteReceiver(data);

        switch ((RequestType)br.getInt())
        {
        case RequestType.Universe:
            sendUniverseDataUpdate(pi.connID);
            break;
        }
    }
    private void receiveTransUpdate(byte[] data)
    {
        receiveLightEnable();

        ByteReceiver br         = new ByteReceiver(data);
        int          objID      = br.getInt();
        var          updateType = (TransUpdateType)br.getInt();

        int transIndex = findIndexByID(objID);

        if (transIndex != -1)
        {
            var netTrans = IDAndTransforms [transIndex].netTrans;
            switch (updateType)
            {
            case TransUpdateType.Transform:
                netTrans.receiveTransform(br);
                break;

//			case TransUpdateType.Position:
//				IDAndTransforms[transIndex].netTrans .moveTo(br.getVector3 ());
//				break;
//			case TransUpdateType.Rotation:
//				IDAndTransforms[transIndex].netTrans .rotateTo(br.getQuaternion ());
//				break;
//			case TransUpdateType.Scale:
//				IDAndTransforms[transIndex].netTrans .trans.localScale = br.getVector3 ();
//				break;
            case TransUpdateType.TransAndRigidbody:
                netTrans.receiveTransform(br);
                var body = netTrans.trans.GetComponent <Rigidbody> ();
                body.velocity        = br.getVector3();
                body.angularVelocity = br.getVector3();
                break;
            }
        }
        else
        {
            logMessage("ObjectNotFound ID:" + objID, "error");
        }
    }
    public override void ReceiveDataEvent(DataType type, PlayerInfo playerInfo, byte[] data, int index = 0)
    {
        base.ReceiveDataEvent(type, playerInfo, data, index);

        ByteReceiver br = new ByteReceiver(data, index);

        switch (type)
        {
        case DataType.ListUpdate:
            switch ((ListUpdateType)br.getInt())
            {
            case ListUpdateType.UpdateYourself:
                receiveUpdateYourself(br);
                break;

            case ListUpdateType.SyncOthers:
                receiveSyncOthers(br);
                break;
            }
            break;

        case DataType.Relay:
            int[] uniqueIDs   = br.getIntArray();
            bool  runInServer = br.getBool();
            br.clean();
            sendRelayS(br.data, playerInfo.uniqueID, uniqueIDs);
            if (runInServer)
            {
                receiveRelayData(br, playerInfo.uniqueID);
            }

            break;

        case DataType.RelayS:
            receiveRelayS(br);
            break;
        }
    }