private void AddReplicatedInstance(IPooledObject <ReplicatedObject> pooledObject, ObjectType?type, ObjectRole role, ObjectId objectId, ConnectionId connectionId) { var @object = pooledObject.Instance; @object.GameObjectNetworkInfo.ObjectType = type.HasValue ? type.Value : new ObjectType(0); @object.GameObjectNetworkInfo.ObjectId = objectId; @object.GameObjectNetworkInfo.Role = role; @object.Type = type; @object.Role = role; @object.Id = objectId; @object.IsPreExisting = false; @object.GlobalObjectId.CopyFrom(Guid.Empty); @object.OwnerConnectionId = role.IsOwner() ? ConnectionId.NoConnection : connectionId; @object.AuthorityConnectionId = role.IsAuthority() ? ConnectionId.NoConnection : connectionId; role.ApplyRoleTo(@object.GameObject); if (_instances[@object.Id.Value] == null) { _instances[@object.Id.Value] = pooledObject; _objectIds.Add(@object.Id); if (ObjectAdded != null) { ObjectAdded(pooledObject.Instance); } } else { throw new Exception("Cannot replicate instance of " + type + " with " + objectId + " cause the object id is already assigned"); } }
// TODO Add ObjectType: PreExisting private void Instantiate(IPooledObject <ReplicatedObject> pooledObject, ObjectType?type, ObjectRole role, ObjectId objectId, ConnectionId connectionId) { var @object = pooledObject.Instance; @object.GameObjectNetworkInfo.ObjectType = type.HasValue ? type.Value : new ObjectType(0); @object.GameObjectNetworkInfo.ObjectId = objectId; @object.GameObjectNetworkInfo.Role = role; @object.Type = type; @object.Role = role; @object.Id = objectId; @object.IsPreExisting = false; @object.GlobalObjectId.CopyFrom(Guid.Empty); @object.OwnerConnectionId = role.IsOwner() ? ConnectionId.Self : connectionId; @object.AuthorityConnectionId = role.IsAuthority() ? ConnectionId.Self : connectionId; role.ApplyTo(@object.GameObject); if (!_instances.ContainsKey(@object.Id)) { _instances[@object.Id] = pooledObject; } else { throw new Exception("Cannot replicate instance of " + type + " with " + objectId + " cause the object id is already assigned"); } }
public static void IntoList(this ObjectRole role, IList <ObjectRole> roles) { roles.Clear(); if (role.IsOwner()) { roles.Add(ObjectRole.Owner); } if (role.IsAuthority()) { roles.Add(ObjectRole.Authority); } if (role.IsOther()) { roles.Add(ObjectRole.Others); } }