Exemplo n.º 1
0
        /// <summary>
        /// 读取包头
        /// </summary>
        /// <param name="header"></param>
        /// <returns></returns>
        void HandleReadHeader(PacketStream ps, object obj)
        {
            UInt16 thisTag = 0;

            lock (_recvTagGuard)
            {
                thisTag = _recvTag;
            }


            PacketHeader header = PacketSerializer.ReadHeader(ps, thisTag);

            if (header.Valid)
            {
                var size = (Int32)(header.TotalSize - PacketHeader.HeaderSize);

                // 还有包体
                if (size > 0)
                {
                    ReadPacket(new PacketStream(size, HandleReadBody, header));
                }
                else
                {
                    PostPacket(header, null);

                    // 包体没有, 继续读下一个包
                    ReadHeader();
                }
            }
            else
            {
                PostError(SessionEvent.RecvError, new Exception("packet crack"));
                Close();
            }
        }
Exemplo n.º 2
0
    protected bool ReadStateUpdatePacket(byte[] packetData, ref byte isAvatar, ref int objNum, ref bool shotLight, ref int potionNum, ref bool hasParent, ref State cubeState)
    {
        readStream.Start(packetData);

        bool result = true;

        try
        {
            packetSerializer.ReadHeader(readStream, ref isAvatar, ref objNum, ref shotLight, ref potionNum, ref hasParent, ref cubeState);
        }
        catch (Network.SerializeException)
        {
            Debug.Log("error: failed to read state update packet");

            result = false;
        }

        readStream.Finish();
        return(result);
    }
Exemplo n.º 3
0
    // Update is called once per frame
    void FixedUpdate()
    {
        Packet packet;

        while ((packet = Net.ReadPacket()) != null)
        {
            packet.ReadBytes(readBuffer);

            readStream.Start(readBuffer);

            serializer.ReadHeader(readStream, ref isAvatar, ref objNum, ref shotLight, ref potionNum, ref hasParent, ref cubeState);

            updated = null;

            if (isAvatar != 00000001)
            {
                switch (objNum)
                {
                case 0:
                    updated = GameObject.Find("Grappling Gun(Clone)");

                    if (updated == null)
                    {
                        updated = GameObject.Find("Grappling Gun");
                    }
                    break;

                case 1:
                    updated = GameObject.Find("Drone");

                    if (updated == null)
                    {
                        updated = GameObject.Find("Drone(Clone)");
                    }
                    break;

                case 2:
                    updated = GameObject.Find("Map");

                    if (updated == null)
                    {
                        updated = GameObject.Find("Map(Clone)");
                    }
                    break;

                case 3:
                    var potions = GameObject.FindGameObjectsWithTag("Potion");
                    var poops   = GameObject.FindGameObjectsWithTag("PoopPot");

                    foreach (GameObject potion in potions)
                    {
                        if (potion.GetComponent <PourLiquid>().potionNum == potionNum)
                        {
                            //Debug.Log("Found health");
                            updated = potion;
                        }
                    }

                    foreach (GameObject poop in poops)
                    {
                        if (poop.GetComponent <pourpooppotion>().potionNum == potionNum)
                        {
                            //Debug.Log("Found poop");
                            updated = poop;
                        }
                    }

                    if (updated == null)
                    {
                        //I am using shotLight for poop vs health potions along with fired and light.
                        //true => poop
                        Debug.Log(potionNum);
                        Debug.Log("Potion should spawn in!");
                        if (shotLight == true)
                        {
                            var potion = (GameObject)Instantiate(Resources.Load("PoopPotion"));
                            Debug.Log("Poop potion spawned in");
                            potion.GetComponent <pourpooppotion>().potionNum = potionNum;
                            Debug.Log(potion.GetComponent <pourpooppotion>().potionNum + " is the newly spawned num");
                            potion.transform.position = new Vector3(cubeState.position_x, cubeState.position_y / Constants.UnitsPerMeter, cubeState.position_z / Constants.UnitsPerMeter);
                            updated = potion;

                            var blues = GameObject.FindGameObjectsWithTag("Blue");

                            float      current = 1000;
                            GameObject saved   = new GameObject();
                            foreach (GameObject flower in blues)
                            {
                                if (Vector3.Distance(new Vector3(cubeState.position_x / Constants.UnitsPerMeter, cubeState.position_y / Constants.UnitsPerMeter, cubeState.position_z / Constants.UnitsPerMeter), flower.transform.position) < current)
                                {
                                    current = Vector3.Distance(new Vector3(cubeState.position_x / Constants.UnitsPerMeter, cubeState.position_y / Constants.UnitsPerMeter, cubeState.position_z / Constants.UnitsPerMeter), flower.transform.position);

                                    saved = flower;
                                }
                            }

                            GameObject.Destroy(saved);
                        }
                        else
                        {
                            var potion = (GameObject)Instantiate(Resources.Load("HealthPotion"));
                            potion.GetComponent <PourLiquid>().potionNum = potionNum;
                            potion.transform.position = new Vector3(cubeState.position_x / Constants.UnitsPerMeter, cubeState.position_y / Constants.UnitsPerMeter, cubeState.position_z / Constants.UnitsPerMeter);
                            updated = potion;

                            var reds = GameObject.FindGameObjectsWithTag("Red");

                            float      current = 1000;
                            GameObject saved   = new GameObject();
                            foreach (GameObject flower in reds)
                            {
                                if (Vector3.Distance(new Vector3(cubeState.position_x / Constants.UnitsPerMeter, cubeState.position_y / Constants.UnitsPerMeter, cubeState.position_z / Constants.UnitsPerMeter), flower.transform.position / Constants.UnitsPerMeter) < current)
                                {
                                    current = Vector3.Distance(new Vector3(cubeState.position_x / Constants.UnitsPerMeter, cubeState.position_y / Constants.UnitsPerMeter, cubeState.position_z / Constants.UnitsPerMeter), flower.transform.position);
                                    Debug.Log("New Distance:" + current);
                                    saved = flower;
                                }
                            }

                            GameObject.Destroy(saved);
                        }
                    }
                    else
                    {
                    }
                    break;

                default:
                    break;
                }

                if (objNum == 0)
                {
                    var shot = updated.GetComponent <GrapplingHook>();
                    if (shotLight && updated.transform.parent == null)
                    {
                        shot.fired = true;
                    }
                    else
                    {
                    }
                }
                else if (objNum == 1)
                {
                    var light = updated.GetComponent <DroneFly>();
                    if (shotLight)
                    {
                        light.isRemote = true;
                    }
                    else
                    {
                        light.isRemote = false;
                    }
                }
                var obj = updated.GetComponent <NetworkObject>();

                if (hasParent)
                {
                    counter = counter + 1;

                    if (objNum == 3)
                    {
                    }
                }

                //if item already has parent, disengage from hand
                if (hasParent && (updated.transform.parent != null && counter > 60))
                {
                    updated.transform.parent = null;
                    var hand    = GameObject.Find("Player/OVRCameraRig/TrackingSpace/RightHandAnchor");
                    var grabber = hand.GetComponent <Grabber>();
                    grabber.grabbedObject = null;
                    grabber.grabbed       = false;

                    counter = 0;

                    Debug.Log("Detaching!");
                }

                obj.ProcessPacket(readBuffer);
            }
            else
            {
                var playerController = gameObject.GetComponent <PlayerController>();
                var p2pManager       = playerController.p2pManager;
                p2pManager.GetRemotePackets(packet);
            }
        }
    }