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); } } }
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); } }
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); } } }
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); } }
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); } }