コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }