public void Interpret(INetworkMediator netMediator, EndPoint sender, IMessage message)
        {
            var           m      = (UpdatePlayerMessage)message;
            IEngineFacade engine = (IEngineFacade)netMediator.EngineProxy;

            try
            {
                IUnityEntity e            = engine.EntityRepository.Get(m.EntityId);
                var          interpolator = e.OwnerGameObject.GetComponent <ICharacterInterpolater>();
                Vector3      rot          = e.OwnerGameObject.transform.eulerAngles;
                rot.y = m.RotationY;
                if (interpolator == null)
                {
                    e.OwnerGameObject.transform.position    = m.Position;
                    e.OwnerGameObject.transform.eulerAngles = rot;
                }
                else
                {
                    Vector3 camRot = interpolator.CameraTransform.localEulerAngles;
                    camRot.x = m.RotationX;
                    interpolator.UpdateInterpolation(m.Position, Quaternion.Euler(rot.x, rot.y, rot.z),
                                                     Quaternion.Euler(camRot.x, camRot.y, camRot.z));
                }
            }
            catch (EntityNotFoundException ex)
            {
                // TODO:  This is getting called before the entity exists
                netMediator.EngineProxy.Logger.LogException(ex);
            }
        }
        public void Interpret(INetworkMediator netMediator, EndPoint sender, IMessage message)
        {
            var           msg    = (SpawnEntityMessage)message;
            IEngineFacade engine = (IEngineFacade)netMediator.EngineProxy;

            EntitySpawnner.SpawnEntityFromMessage(engine, msg);
        }
示例#3
0
        private static GameObject SpawnGameObjectWithInfo(IEngineFacade engine, int prefabId, Vector3 pos, Quaternion rot, Vector3 scale)
        {
            var       prefab = engine.PrefabManager.GetPrefabById(prefabId);
            Transform t      = GameObject.Instantiate(prefab, pos, rot);

            t.localScale = scale;
            return(t.gameObject);
        }
示例#4
0
        private static IUnityEntity SetupNetworkEntity(IEngineFacade engine, GameObject go, int id, int prefabId)
        {
            var entity = go.gameObject.AddComponent <NetworkEntity>();

            entity.Id       = id;
            entity.PrefabId = prefabId;
            engine.EntityRepository.Add(entity);
            return(entity);
        }
示例#5
0
 public static async Task <TimeZoneResponse> QueryAsync(this IEngineFacade <TimeZoneRequest, TimeZoneResponse> engine, TimeZoneRequest request, TelemetryClient telemetryClient, CancellationToken cancellationToken = default)
 {
     request.Language = CultureInfo.CurrentUICulture.IetfLanguageTag;
     return(await QueryAsync(engine, request, telemetryClient, (telemetry, response) =>
     {
         telemetry.Name = nameof(GoogleMaps.TimeZone);
         telemetry.Success = response.IsSuccess();
         telemetry.ResultCode = response.Status.ToString();
     }, cancellationToken));
 }
示例#6
0
 private void Awake()
 {
     EngineFacade = FindObjectOfType <ForgeEngineFacade>();
     if (EngineFacade == null)
     {
         throw new System.Exception($"Expected to find {typeof(ForgeEngineFacade)} in the scene but found nothing");
     }
     HostButton.State      = this;
     HostButton.Visible    = true;
     ConnectButton.State   = this;
     ConnectButton.Visible = true;
 }
示例#7
0
        public static async Task <TResponse> QueryAsync <TRequest, TResponse>(this IEngineFacade <TRequest, TResponse> engine, TRequest request, TelemetryClient telemetryClient, Action <DependencyTelemetry, TResponse> postProcessor = null, CancellationToken cancellationToken = default)
            where TRequest : MapsBaseRequest, new() where TResponse : IResponseFor <TRequest>
        {
            var uri = request.GetUri();

            using (var op = telemetryClient.StartOperation(new DependencyTelemetry(nameof(GoogleMaps), uri.Host, engine.ToString(), uri.ToString())))
            {
                var response = await engine.QueryAsync(request, cancellationToken);

                postProcessor?.Invoke(op.Telemetry, response);
                return(response);
            }
        }
        public void Interpret(INetworkMediator netMediator, EndPoint sender, IMessage message)
        {
            var  m    = (CreatePlayerMessage)message;
            bool isMe = netMediator.SocketFacade.NetPlayerId.Equals(m.OwningPlayer);

            if (!isMe)
            {
                m.PrefabId = m.ProxyPrefabId;
            }
            IEngineFacade engine = (IEngineFacade)netMediator.EngineProxy;
            var           e      = EntitySpawner.SpawnEntityFromMessage(engine, m);

            onPlayerCreated?.Invoke(e, m.OwningPlayer);
        }
示例#9
0
        public void Initialize(Transform transform, Transform camTransform)
        {
            _transform    = transform;
            _camTransform = camTransform;
            _engine       = UnityExtensions.FindInterface <IEngineFacade>();
            if (_engine == null)
            {
                throw new System.Exception("TODO:  The network engine could not be found");
            }
            var e = _transform.GetComponent <IUnityEntity>();

            if (e == null)
            {
                throw new System.Exception("TODO:  No network entity was found on this object");
            }
            _entityId = e.Id;
        }
示例#10
0
        public static async Task <GeocodingResponse> QueryAsync(this IEngineFacade <GeocodingRequest, GeocodingResponse> engine, GeocodingRequest request, TelemetryClient telemetryClient, CancellationToken cancellationToken = default)
        {
            request.Language = CultureInfo.CurrentUICulture.IetfLanguageTag;
            return(await QueryAsync(engine, request, telemetryClient, (telemetry, response) =>
            {
                telemetry.Name = nameof(GoogleMaps.Geocode);
                switch (response.Status)
                {
                case GoogleMapsApi.Entities.Geocoding.Response.Status.OK:
                case GoogleMapsApi.Entities.Geocoding.Response.Status.ZERO_RESULTS:
                    telemetry.Success = true;
                    break;

                default:
                    telemetry.Success = false;
                    break;
                }
                telemetry.ResultCode = response.Status.ToString();
            }, cancellationToken));
        }
        public void Interpret(INetworkMediator netMediator, EndPoint sender, IMessage message)
        {
            var           sceneEntities = GameObject.FindObjectsOfType <NetworkEntity>() as IUnityEntity[];
            var           m             = (SendEntitiesToNewPlayerMessage)message;
            IEngineFacade engine        = (IEngineFacade)netMediator.EngineProxy;

            for (int i = 0; i < m.EntityCount; i++)
            {
                if (string.IsNullOrEmpty(m.SceneIdentifiers[i]))
                {
                    // Don't load an entity that already exists (from DontDestroyOnLoad)
                    if (!engine.EntityRepository.Exists(m.Ids[i]))
                    {
                        EntitySpawner.SpawnEntityFromData(engine, m.Ids[i], m.PrefabIds[i], m.Positions[i], m.Rotations[i], m.Scales[i]);
                    }
                }
                else
                {
                    SetupEntityAlreadyInScene(sceneEntities, m, i, engine);
                }
            }
        }
示例#12
0
 public void Awake()
 {
     _engine = GameObject.FindObjectOfType <ForgeEngineFacade>();
     _myName = _names[Random.Range(0, _names.Length)];
 }
示例#13
0
 private void Start()
 {
     _engine = UnityExtensions.FindInterface <IEngineFacade>();
     _puzzle = FindObjectOfType <ComplexSampleNetwork>();
 }
示例#14
0
 private void Awake()
 {
     _engine = GameObject.FindObjectOfType <ForgeEngineFacade>();
 }
 private static void SetupEntityAlreadyInScene(IUnityEntity[] sceneEntities,
                                               SendEntitiesToNewPlayerMessage msg, int idx, IEngineFacade engine)
 {
     foreach (var e in sceneEntities)
     {
         if (e.SceneIdentifier == msg.SceneIdentifiers[idx])
         {
             e.Id       = msg.Ids[idx];
             e.PrefabId = msg.PrefabIds[idx];
             Transform t = e.OwnerGameObject.transform;
             t.position   = msg.Positions[idx];
             t.rotation   = msg.Rotations[idx];
             t.localScale = msg.Scales[idx];
             engine.EntityRepository.Add(e);
         }
     }
 }
示例#16
0
        public static IUnityEntity SpawnEntityFromData(IEngineFacade engine, int id, int prefabId, Vector3 pos, Quaternion rot, Vector3 scale)
        {
            var go = SpawnGameObjectWithInfo(engine, prefabId, pos, rot, scale);

            return(SetupNetworkEntity(engine, go, id, prefabId));
        }
示例#17
0
 private static GameObject SpawnGameObject(SpawnEntityMessage message, IEngineFacade engine)
 {
     return(SpawnGameObjectWithInfo(engine, message.PrefabId, message.Position, message.Rotation, message.Scale));
 }
示例#18
0
        public static IUnityEntity SpawnEntityFromMessage(IEngineFacade engine, SpawnEntityMessage message)
        {
            GameObject go = SpawnGameObject(message, engine);

            return(SetupNetworkEntity(engine, go, message.Id, message.PrefabId));
        }
 /// <summary>
 /// Uses Facade and runs the engine
 /// </summary>
 public void Run()
 {
     this.engineFacade = EngineFacade.Instance();
     this.engineFacade.Start();
 }