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