Esempio n. 1
0
 private void OnAircraftChangePosition(Vector2 pos)
 {
     if (pos.x > -_screenSize.x / 2 && pos.x < _screenSize.x / 2 &&
         pos.y > -_screenSize.y / 2 && pos.y < _screenSize.y / 2)
     {
         if (_aircraftOLdPosition != null)
         // can figure out aircraft velosity and so on
         {
             if (_rocketController.IsHitting(pos))
             {
                 OnHitting();
             }
             else
             {
                 //Debug.LogWarning(" pos x = " + pos.x + " y = " + pos.y + "  _rocketPos  " + _rocketController.Position.x + " " + _rocketController.Position.y);
                 Vector2 LeaserTargetPosition = FigureOutLeaserTarget(pos, new Vector2(_aircraftOLdPosition.Value.x, _aircraftOLdPosition.Value.y), _rocketController.Position);
                 _rocketController.OnLeaserTargetPositionChange(LeaserTargetPosition);
                 _aircraftOLdPosition = pos;
                 MainThreadRunner.AddTask(() => _leadingTarget.transform.gameObject.SetActive(true));
             }
         }
         else
         {
             _aircraftOLdPosition = pos;
         }
     }
     else
     {
         OnLeftScreen();
     }
 }
Esempio n. 2
0
        static void Internal_Loop()
        {
            MainThreadRunner.Install();
            while (true)
            {
                try
                {
                    MainThreadRunner.Update();
                    //Game.EventSystem.Update();
                    DateTime beforDT = System.DateTime.Now;
                    SceneManager.Update();
                    DateTime afterDT = System.DateTime.Now;
                    TimeSpan ts      = afterDT.Subtract(beforDT);
                    //Loger.Log("Update Use Milliseconds :" + ts.Milliseconds);
                    Thread.Sleep(20);

                    Time.deltaTime = (20 + ts.Milliseconds) / 1000.0f;
                    Time.time     += Time.deltaTime;
                }
                catch (Exception e)
                {
                    Loger.LogError(e);
                }
            }
        }
Esempio n. 3
0
 private void Runnable()
 {
     if (!_isRunnig)
     {
         try
         {
             _isRunnig = true;
             Vector2 position = _trajectory.GenerateCoord();
             MainThreadRunner.AddTask(() =>
             {
                 HOTween.Kill(_aircraftView.transform);
                 var velocity = new Vector3(position.x, position.y, 0) - _aircraftView.transform.localPosition;
                 float angle  = Mathf.Atan2(velocity.y, velocity.x) * Mathf.Rad2Deg;
                 Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
                 _aircraftView.transform.rotation = q;
                 //Debug.LogWarning("rotation" + _aircraftView.transform.rotation.x + " " + _aircraftView.transform.rotation.y + " " + _aircraftView.transform.rotation.z);
                 HOTween.To(_aircraftView.transform, Constants.PulseRepetitionInterval / 1000.0f,
                            new TweenParms().Prop("localPosition", new Vector3(position.x, position.y, 0)).Ease(EaseType.Linear));
             });
             if (ChangePosition != null)
             {
                 ChangePosition(position);
             }
             _isRunnig = false;
         }
         catch (Exception e)
         {
             Debug.LogWarning(" AircraftController Runnable" + e.ToString());
         }
     }
 }
Esempio n. 4
0
    void LoadModels(string VideoFile)
    {
        StartedLoadingPrefabsEvent?.Invoke();

        int total = CloudModels.Length;
        int cntr  = 0;

        SceneModels = new List <SceneModel>();
        var modelInstances = ModelInstances.Load(VideoFile);

        foreach (var cloudModel in CloudModels)
        {
            cntr += 1;
            var model = CloudAPI.Instance.GetModel(cloudModel.model);
            if (model.defaultPosition == null)
            {
                Log.Wrn($"no position for {cloudModel}, ignoring");
                continue;
            }

            var pos    = model.defaultPosition.GpsPos;
            var prefab = ModelAssets.LoadAsset(cloudModel.model);

            /* set trackable name to aid in debugging  */
            MainThreadRunner.Run(() => prefab.name = cloudModel.ToString());

            var sceneModel = modelInstances.GetModel(cloudModel.model, cloudModel.name, prefab, pos);
            SceneModels.Add(sceneModel);

            PrefabLoadedEvent?.Invoke(cntr, total);
        }

        FinishedLoadingPrefabsEvent?.Invoke();
    }
Esempio n. 5
0
        public void Fire(Transform obj)
        {
            _isFired = true;
            if (_leaserTargetPosition != null)
            {
                _currentPosition = new Vector3(0, 0, 0);
                Vector2 vectorRocket = _leaserTargetPosition.Value - _currentPosition;
                vectorRocket.Normalize();
                _currentPosition       = vectorRocket * Constants.RocketVelocity * Constants.PulseRepetitionInterval / 1000 * Constants.TimeScale;
                _timeOfPreviosPosition = System.DateTime.Now;                 // for renew rocket position on  OnLeaserTargetPositionChange


                float distanceToTarget = Mathf.Sqrt(Mathf.Pow((_rocketView.transform.localPosition.x - _leaserTargetPosition.Value.x), 2) +
                                                    Mathf.Pow((_rocketView.transform.localPosition.y - _leaserTargetPosition.Value.y), 2));

                float timeToTarget = distanceToTarget / Constants.RocketVelocity;
                //Debug.LogWarning("distanceToTarget= " + distanceToTarget + "  timeToTarget  " + timeToTarget);
                MainThreadRunner.AddTask(() =>
                {
                    _rocketView.transform.localPosition = new Vector3(0, 0, 0);
                    HOTween.Kill(_rocketView.transform);

                    Vector3 velocity = new Vector3(_leaserTargetPosition.Value.x, _leaserTargetPosition.Value.y, 0) - _rocketView.transform.position;
                    _rocketView.transform.rotation = Quaternion.LookRotation(velocity, Vector3.forward);
                    _rocketView.gameObject.SetActive(true);

                    HOTween.To(_rocketView.transform, timeToTarget / Constants.TimeScale,
                               new TweenParms().Prop("localPosition", new Vector3(_leaserTargetPosition.Value.x, _leaserTargetPosition.Value.y, 0)).Ease(EaseType.Linear));

                    //	HOTween.To(_rocketView.transform, Constants.PulseRepetitionInterval / 1000 ,
                    //new TweenParms().Prop("localPosition", new Vector3(_currentPosition.x, _currentPosition.y, 0)).Ease(EaseType.Linear));
                });
            }
        }
Esempio n. 6
0
 void HandleVideoOpened(string _)
 {
     MainThreadRunner.Run(delegate
     {
         RecordButton.interactable = true;
         gameObject.SetActive(false);
     });
 }
Esempio n. 7
0
    public GameObject Load()
    {
        /* shedule asset loading on main thread */
        MainThreadRunner.Run(LoadAsset);

        /* block until it's done */
        AssetLoaded.WaitOne();
        return(Asset);
    }
Esempio n. 8
0
        public void Init(MainThreadRunner runner, GameSceneManager scene, RegisterService register)
        {
            _runner   = runner;
            _scene    = scene;
            _register = register;

            Login.text    = "test";
            Password.text = "test";
        }
Esempio n. 9
0
 void DispatchLoginError(Error error)
 {
     MainThreadRunner.Run(delegate()
     {
         ErrorMessage.ClosedEvent += HandleErrorMessageClosed;
         gameObject.SetActive(false);
         LoginErrorEvent?.Invoke(error);
     });
 }
Esempio n. 10
0
        public void Init(MainThreadRunner runner, GameSceneManager sceneManager, AuthService auth)
        {
            _runner = runner;
            _scene  = sceneManager;
            _auth   = auth;

            LoginInput.text    = "test";
            PasswordInput.text = "test";
        }
Esempio n. 11
0
        public StartupManager(MainThreadRunner runner, ServerSettings settings, AuthService auth, GameSceneManager scene, ClientStateService state)
        {
            _runner   = runner;
            _settings = settings;
            _auth     = auth;
            _scene    = scene;
            _state    = state;

            _nextRefreshTime = _minInterval;
        }
Esempio n. 12
0
 public void Stop()
 {
     _isFired         = false;
     _currentPosition = Vector2.zero;
     MainThreadRunner.AddTask(() =>
     {
         HOTween.Kill(_rocketView.transform);
         _rocketView.transform.localPosition = new Vector3(0, 0, 0);
         _rocketView.gameObject.SetActive(false);
     });
 }
Esempio n. 13
0
 public void Invoke(RpcArgs rpcArgs, bool skipMainThreadRunner = false)
 {
     if (MainThreadRunner != null && !skipMainThreadRunner)
     {
         MainThreadRunner.Execute(() => { callback(rpcArgs); });
     }
     else
     {
         callback(rpcArgs);
     }
 }
Esempio n. 14
0
        public void Stop()
        {
            _scheduledTask.Stop();

            _isRunnig = false;
            MainThreadRunner.AddTask(() =>
            {
                _aircraftView.gameObject.SetActive(false);
                HOTween.Kill(_aircraftView.transform);
            });
        }
Esempio n. 15
0
 public void Run()
 {
     _trajectory   = _trajectoryFactory.CreateTrajectory();
     _currentPoint = _trajectory.StartPoint;
     MainThreadRunner.AddTask(() =>
     {
         _aircraftView.gameObject.SetActive(true);
         _aircraftView.transform.localPosition = new Vector3(_currentPoint.x, _currentPoint.y, 0);
     }
                              );
     _scheduledTask.Start();
 }
Esempio n. 16
0
 private void OnHitting()
 {
     Debug.LogWarning("Aircraft was hitted");
     _aircraftOLdPosition = null;
     _aircraftController.Stop();
     _rocketController.Stop();
     MainThreadRunner.AddTask(() =>
     {
         _airDefense.FireButton.interactable = true;
         _leadingTarget.transform.gameObject.SetActive(false);
     });
     _aircraftController.Run();
 }
Esempio n. 17
0
 void Login()
 {
     try
     {
         CloudAPI.Instance.SetUserCredentials(Username.text, Password.text);
         var mods = CloudAPI.Instance.GetModels();
         MainThreadRunner.Run(() => LoginSucessfull(mods));
     }
     catch (AuthenticationError)
     {
         DispatchLoginError(Error.Authentication);
     }
     catch (ConnectionError)
     {
         DispatchLoginError(Error.Connection);
     }
     finally
     {
         MainThreadRunner.Run(() => SetWidgetsInteractable(true));
     }
 }
Esempio n. 18
0
        private Vector2 FigureOutLeaserTarget(Vector2 aircraftPos, Vector2 aircraftOldPos, Vector2 rocketPos)
        {
            float koef             = (Constants.PulseRepetitionInterval / 1000.0f) * Constants.TimeScale;
            float aircraftVelocity = Mathf.Sqrt(Mathf.Pow(((aircraftOldPos.x - aircraftPos.x) / (koef)), 2) + Mathf.Pow(((aircraftOldPos.y - aircraftPos.y) / (koef)), 2));


            Vector2 vectorFromRocket = aircraftPos - rocketPos;
            Vector2 vectorAircraft   = aircraftPos - aircraftOldPos;

            float angle = -AngleBetweenVector(vectorAircraft, vectorFromRocket);

            float a = aircraftVelocity / Constants.RocketVelocity;
            float timeToGetTarget;
            float distanceForTarget =
                Mathf.Sqrt(Mathf.Pow(((aircraftPos.x - rocketPos.x)), 2) + Mathf.Pow(((aircraftPos.y - rocketPos.y)), 2));


            timeToGetTarget = distanceForTarget /
                              (
                Constants.RocketVelocity * Mathf.Sqrt(1 - a * a * Mathf.Sin(angle * Mathf.PI / 180) * Mathf.Sin(angle * Mathf.PI / 180))
                - aircraftVelocity * Mathf.Cos(angle * Mathf.PI / 180)
                              );

            //	Debug.LogWarning("_____________timeToGetTarget = " + timeToGetTarget + " distance  " + distanceForTarget);


            Vector2 delta = new Vector2
                            (
                timeToGetTarget * aircraftVelocity * Mathf.Cos(angle * Mathf.PI / 180),
                timeToGetTarget * aircraftVelocity * Mathf.Sin(angle * Mathf.PI / 180)
                            );

            vectorAircraft.Normalize();
            var vectorFromAircraftToLeaserTarget = vectorAircraft * timeToGetTarget * aircraftVelocity;

            MainThreadRunner.AddTask(() =>
                                     _leadingTarget.transform.localPosition = new Vector3(aircraftPos.x + vectorFromAircraftToLeaserTarget.x, aircraftPos.y + vectorFromAircraftToLeaserTarget.y, 0));
            //	Debug.LogWarning("_____________ vectorFromAircraftToLeaserTarget. = " + vectorFromAircraftToLeaserTarget.x + " y " + vectorFromAircraftToLeaserTarget.y);
            return(new Vector2(aircraftPos.x + vectorFromAircraftToLeaserTarget.x, aircraftPos.y + vectorFromAircraftToLeaserTarget.y));
        }
Esempio n. 19
0
        public void OnLeaserTargetPositionChange(Vector2 pos)
        {
            _leaserTargetPosition = pos;
            if (_isFired)
            {
                // figure out the current rocket position
                TimeSpan span       = (System.DateTime.Now - _timeOfPreviosPosition);
                int      differInMs = (int)span.TotalMilliseconds;
                //Debug.LogWarning(" delta time= " + i);
                Vector2 vectorRocket = _leaserTargetPosition.Value - _currentPosition;
                vectorRocket.Normalize();
                _currentPosition      += vectorRocket * Constants.RocketVelocity * differInMs / 1000 * Constants.TimeScale;
                _timeOfPreviosPosition = System.DateTime.Now;


                MainThreadRunner.AddTask(() =>
                {
                    HOTween.Kill(_rocketView.transform);

                    //https://answers.unity.com/questions/585035/lookat-2d-equivalent-.html
                    var velocity = new Vector3(_leaserTargetPosition.Value.x, _leaserTargetPosition.Value.y, 0) - _rocketView.transform.localPosition;
                    float angle  = Mathf.Atan2(velocity.y, velocity.x) * Mathf.Rad2Deg;
                    Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);

                    _rocketView.transform.localRotation = q;
                    float distanceToTarget = Mathf.Sqrt(Mathf.Pow((_rocketView.transform.localPosition.x - _leaserTargetPosition.Value.x), 2) +
                                                        Mathf.Pow((_rocketView.transform.localPosition.y - _leaserTargetPosition.Value.y), 2));

                    float timeToTarget = distanceToTarget / Constants.RocketVelocity;
                    //Debug.LogWarning("distanceToTarget= " + distanceToTarget + "  timeToTarget  " + timeToTarget);

                    HOTween.To(_rocketView.transform, timeToTarget / Constants.TimeScale,
                               new TweenParms().Prop("localPosition", new Vector3(_leaserTargetPosition.Value.x, _leaserTargetPosition.Value.y, 0)).Ease(EaseType.Linear));

                    //			HOTween.To(_rocketView.transform, Constants.PulseRepetitionInterval / 1000 ,
                    //new TweenParms().Prop("localPosition", new Vector3(_currentPosition.x, _currentPosition.y, 0)).Ease(EaseType.Linear));
                });
            }
        }
Esempio n. 20
0
 void Hide()
 {
     MainThreadRunner.Run(() => gameObject.SetActive(false));
 }