Пример #1
0
	public SerializableObject AddObjectReferenceToSerialize(ObjectReplicator replicator, int id) {
		int hashCode = id.GetHashCode();

		if (isSending) {
			var obj = connection.world.GetObjectByNetIDHashCode(hashCode);
			if ((obj != null) && (obj.internal_GetReplicator(connection) == null)) {
				objectRefs.Add(hashCode);
			}
		} else {
			// do we have this object?
			var obj = connection.world.GetObjectByNetIDHashCode(hashCode);
			if (obj != null) {
				return obj;
			}

			IntHashtableList<ObjectReplicator> repls;

			if (!pendingRefs.TryGetValue(hashCode, out repls)) {
				repls = new IntHashtableList<ObjectReplicator>();
				pendingRefs[hashCode] = repls;
			}

			if (!repls.Contains(replicator.obj.netIDHashCode)) {
				repls.Add(replicator.obj.netIDHashCode, replicator);
			}
        }

		return null;
	}
Пример #2
0
	public ObjectReplicator(ActorReplicationChannel channel, SerializableObject obj, SerializedObjectFields fields, bool isOwner) {
		this.channel = channel;
		_object = obj;

		wasRelevant = true;
		this.isOwner = isOwner;

        fieldStates = new IntHashtableList<ReplicatedObjectFieldState>();
		for (int i = 0; i < fields.serializedFields.Values.Count; ++i) {
			SerializedObjectFields.FieldSpec fieldSpec = fields.serializedFields.Values[i];
			fieldStates.Add(fieldSpec.fieldID, new ReplicatedObjectFieldState(fieldSpec));
		}
	}
Пример #3
0
	public SerializableObject AddReference(ISerializableObjectFieldSerializer serializer, int id, int fieldIndex) {
		var obj = channel.AddObjectReferenceToSerialize(this, id);
		if ((obj != null) || !isLoading) {
			return obj;
		}

		int idHash = id.GetHashCode();

		if (objectReferencedFieldStates == null) {
			objectReferencedFieldStates = new IntHashtable<IntHashtableList<ReplicatedObjectFieldState>>();
		}
		IntHashtableList<ReplicatedObjectFieldState> fields;
		if (!objectReferencedFieldStates.TryGetValue(idHash, out fields)) {
			fields = new IntHashtableList<ReplicatedObjectFieldState>();
			objectReferencedFieldStates[idHash] = fields;
		}
		if (!fields.Contains(curFieldState.fieldSpec.fieldID)) {
			fields.Add(curFieldState.fieldSpec.fieldID, curFieldState);
		}
		curFieldState.AddReference(id, fieldIndex);
		return null;
	}