/// <summary> /// Constructs a server-side game object /// </summary> /// <param name="conn">Connection</param> /// <param name="database">Main DB</param> /// <param name="namePrefab">Prefab for owner (avatar,for example)</param> /// <param name="nameNotOwnedPrefab">Prefab for others (should be same if not owned)</param> /// <param name="localId">Object local Id</param> /// <param name="ownerID">Owner Id</param> /// <param name="bundleId">Bundle id, if object is from bundle</param> /// <param name="avatarId">Avatar id</param> /// <param name="avProps">Avatar properties. Should be JSON.</param> /// <param name="additionalBehavioursNamed">Additional behaviours by typename. Currently unused.</param> /// <param name="additionalBehaviours">Collection of additional behaviours by snapshots</param> public ServerGameObject(IConnection conn, DatabaseAgentRef database, string namePrefab, string nameNotOwnedPrefab, Guid localId, Guid ownerID, Guid bundleId, Guid avatarId, Guid userId, string avProps, List <string> additionalBehavioursNamed, List <JediumBehaviourSnapshot> additionalBehaviours ) { _log = LogManager.GetLogger("Object: " + localId + ", prefab:" + namePrefab); _localId = localId; _bundleId = bundleId; _avatarId = avatarId; _clients = new Dictionary <Guid, ClientConnectionHolderRef>(); _connection = conn; _database = database; _namePrefab = namePrefab; _nameNotOwnedPrefab = nameNotOwnedPrefab; _ownerId = ownerID; Dictionary <string, JediumBehaviourDBSnapshot> dbsnaps = _database.GetObjectBehaviours(_localId).Result; //and for avatar if (avatarId != Guid.Empty) { Dictionary <string, JediumBehaviourDBSnapshot> avsnaps = _database.GetObjectBehaviours(avatarId).Result; foreach (var asnap in avsnaps) { if (!dbsnaps.ContainsKey(asnap.Key)) { dbsnaps.Add(asnap.Key, asnap.Value); } } _avatarProps = avProps; _userId = userId; } _gameObject = new JediumGameObject(this, additionalBehaviours, dbsnaps, _ownerId, _localId); conn.SpawnGameObject(_namePrefab, _nameNotOwnedPrefab, localId, ownerID, _bundleId, avatarId, this ).Wait(); MessageNum = 0; _log.Info(" is online, address: " + GetRemoteAddress()); }