Example #1
0
        private void ReadSpawns(NetDataReader reader, int length)
        {
            if (listenRemote)
            {
                reader.SkipBytes(length);
                return;
            }

            int startPosition = reader.Position;

            while (reader.Position - startPosition < length)
            {
                // Instantiate, etc.
                int id   = reader.GetInt();
                int GUID = reader.GetInt();

                // Check if it's already been spawned.
                if (!world.statefulObjects.ContainsKey(id))
                {
                    IdentifiableObject clone = Object.Instantiate(world.registeredPrefabsMap[GUID], Vector3.zero, Quaternion.identity);
                    clone.GetComponent <StatefulObject>().IsDirty = false;
                    world.Add(clone.GetComponent <StatefulObject>(), id);
                }
            }
        }
Example #2
0
        private void ReadFields(NetDataReader reader, int length, int frame, bool discardOutOfOrderPackets)
        {
            int startPosition = reader.Position;

            // Clear the first byte of the payload. This will be
            // a StatefulObject.DataType.Object enum.
            if (reader.Position - startPosition < length)
            {
                reader.GetByte();
            }

            while (reader.Position - startPosition < length)
            {
                int id   = reader.GetInt();
                int guid = reader.GetInt();

                if (!world.statefulObjects.ContainsKey(id))
                {
                    IdentifiableObject clone = Object.Instantiate(world.registeredPrefabsMap[guid], Vector3.zero, Quaternion.identity);
                    world.Add(clone.GetComponent <StatefulObject>(), id);
                }

                world.statefulObjects[id].ReadStateFields(reader, startPosition + length, arbiter, frame, discardOutOfOrderPackets, false);
            }
        }
Example #3
0
        private void ReadStateful(NetPacketReader reader, int length, int frame, bool discardOutOfOrderPackets)
        {
            int startPosition = reader.Position;

            while (reader.Position - startPosition < length)
            {
                int id   = reader.GetInt();
                int guid = reader.GetInt();

                if (!world.statefulObjects.ContainsKey(id))
                {
                    IdentifiableObject clone = Object.Instantiate(world.registeredPrefabsMap[guid], Vector3.zero, Quaternion.identity);
                    world.Add(clone.GetComponent <StatefulObject>(), id);
                }

                if (world.statefulObjects[id].GetComponent <IStreamable>().LastReadFrame < frame || !discardOutOfOrderPackets)
                {
                    world.statefulObjects[id].GetComponent <IStreamable>().Read(reader);
                    world.statefulObjects[id].GetComponent <IStreamable>().LastReadFrame = frame;
                }
                else
                {
                    world.statefulObjects[id].GetComponent <IStreamable>().Pass(reader);
                }
            }
        }
Example #4
0
        private void StatefulWorld_OnAdd(StatefulObject obj)
        {
            if (arbiter)
            {
                IdentifiableObject o = obj.GetComponent <IdentifiableObject>();

                // Only the arbiter is permitted to relinquish an object's authority;
                // non-arbiter remotes will hang on to authority until they receive confirmation
                // from the arbiter that the object has relinquished.
                o.GetComponent <StatefulObject>().Ownable.CanRelinquishAuthority = true;
                objectsToSpawn.Add(obj.ID, o);
            }
        }
Example #5
0
        private void ReadInput(NetDataReader reader, int length)
        {
            int startPosition = reader.Position;

            while (reader.Position - startPosition < length)
            {
                int id   = reader.GetInt();
                int guid = reader.GetInt();

                if (!world.statefulObjects.ContainsKey(id))
                {
                    IdentifiableObject clone = Object.Instantiate(world.registeredPrefabsMap[guid], Vector3.zero, Quaternion.identity);
                    world.Add(clone.GetComponent <StatefulObject>(), id);
                }

                world.statefulObjects[id].ReadInput(reader);
            }
        }