/// <inheritdoc /> public INetworkPlayer CreateLocalPlayer() { Transform spawnpoint = SpawnPointStrategy.GetSpawnpoint(); if (spawnpoint == null) { throw new InvalidOperationException($"The {this.GetType().Name} tried to load a spawnpoint from {nameof(SpawnPointStrategy)} but the point was null."); } IGameObjectContextualBuilder builder = GameObjectFactory.CreateBuilder(); //TODO: Implement local player spawning. //Create the player GameObject and provide an identiy object to it. INetworkPlayer player = builder .With(Service <IEntityIdentity> .As(context => new LocalPlayerEntityIdentity(context.Resolve <ICharacterSlotSelectedModel>()))) .Create(LocalPlayerLobbyPrefab, spawnpoint.position, spawnpoint.rotation) .GetComponent(typeof(INetworkPlayer)) as INetworkPlayer; if (player == null) { throw new InvalidOperationException($"Failed to create a {nameof(INetworkPlayer)}. The prefab was missing the component."); } if (player.Identity == null) { throw new InvalidOperationException($"The identity was null."); } //Now we must register it in the player registry PlayerRegistery.AddEntity(player.Identity.EntityId, player); Rooms.DefaultRoom.TryEnter(player); return(player); }
/// <inheritdoc /> public INetworkPlayer CreateEntity(int id, Vector3 position, Quaternion rotation) { if (id < 0 || id > byte.MaxValue) { throw new ArgumentOutOfRangeException(nameof(id), $"The {nameof(id)} for the player must not exceed 255 or be below 0."); } IGameObjectContextualBuilder builder = GameObjectFactory.CreateBuilder(); //Create the player GameObject and provide an identiy object to it. INetworkPlayer player = builder .With(Service <IEntityIdentity> .As(new PlayerEntityIdentity((byte)id))) .Create(NetworkPlayerLobbyPrefab, position, rotation) .GetComponent(typeof(INetworkPlayer)) as INetworkPlayer; if (player == null) { throw new InvalidOperationException($"Failed to create a {nameof(INetworkPlayer)}. The prefab was missing the component."); } //Now we must register it in the player registry PlayerRegistery.AddEntity(id, player); Rooms.DefaultRoom.TryEnter(player); return(player); }