Пример #1
0
 void OnDestroy()
 {
     if (mInstance == this)
     {
         mInstance = null;
     }
 }
Пример #2
0
        public static void Compare(string nickname, Action action, int laps)
        {
            LogUtils.Log(nickname);
            var simpleDuration = TimeTrial.Attack(action, laps);

            var perFrame = Per.Frame(
                () => {
                try {
                    action.Invoke();
                    return(true);
                }
                catch {
                    return(false);
                }
            }
                );

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            var perFrameDuration = TimeTrial.Attack(() => perFrame.Get(), laps);

            LogUtils.Log(
                new Dictionary <object, object>()
            {
                { nameof(simpleDuration), $"{nameof(simpleDuration.Average)}: {simpleDuration.Average.TotalMilliseconds}, {nameof(simpleDuration.Shortest)}: {simpleDuration.Shortest.TotalMilliseconds}, {nameof(simpleDuration.Longest)}: {simpleDuration.Longest.TotalMilliseconds}" },
                { nameof(perFrameDuration), $"{nameof(perFrameDuration.Average)}: {perFrameDuration.Average.TotalMilliseconds}, {nameof(perFrameDuration.Shortest)}: {perFrameDuration.Shortest.TotalMilliseconds}, {nameof(perFrameDuration.Longest)}: {perFrameDuration.Longest.TotalMilliseconds}" },
                { "Ratio", perFrameDuration.Average.Divide(simpleDuration.Average) }
            }
                );
        }
Пример #3
0
        // Use this for initialization
        //private void Start()
        //{
        //
        //}

        // Update is called once per frame
        //private void Update()
        //{
        //
        //}

        private void OnTriggerEnter2D(Collider2D collision)
        {
            // If player gets to the level end ...
            if (_playerLayer == (_playerLayer | (1 << collision.gameObject.layer)))
            {
                // Load next scene
                //GameManager.Instance.GameManagerState.StateChange(_gameScenes);

                // Disable player control
                GameManager.Instance.PlayerInstance.GetComponent <CharacterFlags>().IsPlayerControlAllowed = false;

                // Stop GameManager sound
                GameManager.Instance.AudioSource.Stop();

                // Play sound
                _audioSource.Play();

                // Check for time trial
                TimeTrial l_timeTrial = GameManager.Instance.TimeTrialClock.GetComponent <TimeTrial>();

                // Whether is time trial or not
                if (l_timeTrial.IsTimeTrial)
                {
                    ManageTimeTrialLevelEnd(l_timeTrial);
                }
                else
                {
                    ManageLevelEnd();
                }
            }
        }
Пример #4
0
    public static void TimeTrialProcess(string level)
    {
        float t     = timeTrialSaved;
        float tBest = t;

        if (TimeTrial.Exists(level))
        {
            float lastT = TimeTrial.Load(level);
            if (t < lastT)
            {
                tBest = t;
                TimeTrial.Save(level, t);
            }
            else
            {
                tBest = lastT;
            }
        }
        else
        {
            tBest = t;
            TimeTrial.Save(level, t);
        }

        //post
        TimeTrial.Post(level, t);
    }
Пример #5
0
 void Awake()
 {
     if (mInstance == null)
     {
         mInstance = this;
     }
 }
Пример #6
0
        private void ManageTimeTrialLevelEnd(TimeTrial timeTrial)
        {
            // Manage end of time trial
            timeTrial.EndTimeTrial();

            // Set time trial completed banner active
            _timeTrialCompletedBanner.SetActive(true);
        }
Пример #7
0
 public void play()
 {
     Play.SetActive(false);
     Options.SetActive(false);
     Quit.SetActive(false);
     Standard.SetActive(true);
     TimeTrial.SetActive(true);
     Hatefest.SetActive(true);
     MainMenu.SetActive(true);
 }
        /// <summary>
        /// Adds a time trial to the list to be submitted
        /// Calls checkValid, calcTotalTime, and getOptionsText
        /// </summary>
        private void addTT()
        {
            informationText = "";
            if (checkValid())
            {
                informationText = "Adding time trial...";

                TimeTrial newTT = new TimeTrial()
                {
                    ProductionNumber = (int)productionNum,
                    SalesOrder       = (int)salesOrder,
                    Date             = (DateTime)date,
                    DriveTime        = driveTime == null ? 0 : (decimal)driveTime,
                    AVTime           = AVTime == null ? 0 : (decimal)AVTime,
                    Model            = selectedModel,
                    NumOptions       = numOptions == null ? 0 : (int)numOptions,
                    TTOptionTimes    = new ObservableCollection <TimeTrialsOptionTime>(),

                    TotalTime = calcTotalTime()
                };

                //Instantiates the options that were a part of the model
                foreach (TimeTrialsOptionTime TTOption in TTOptions)
                {
                    TTOption.OptionCode       = TTOption.OptionCode.ToUpper();
                    TTOption.ProductionNumber = (int)productionNum;
                    TTOption.TimeTrial        = newTT;

                    newTT.TTOptionTimes.Add(TTOption);
                }

                //Sort list alphabetically
                newTT.TTOptionTimes = new ObservableCollection <TimeTrialsOptionTime>(newTT.TTOptionTimes.OrderBy(i => i.OptionCode));

                //Returns a string containing the model options from the list of options
                newTT.OptionsText = getOptionsText(newTT.TTOptionTimes);

                // Since the observable collection was created on the UI thread
                // we have to add the time trial to the list using a delegate function.
                App.Current.Dispatcher.Invoke(delegate
                {
                    timeTrials.Add(newTT);
                });

                // Clear necessary input boxes
                productionNum++;    //Plan for the user to enter time trials in production number order
                driveTime  = null;
                AVTime     = null;
                totalTime  = null;
                numOptions = null;
                TTOptions  = new ObservableCollection <TimeTrialsOptionTime>();

                informationText = "Time Trial added";
            }
        }
        // Use this for initialization
        //private void Start()
        //{
        //
        //}

        // Update is called once per frame
        //private void Update()
        //{
        //
        //}

        public void OnLevelCompletedBannerEndAnimationEvent()
        {
            // Get TimeTrial
            TimeTrial l_timeTrial = GameManager.Instance.TimeTrialClock.GetComponent <TimeTrial>();

            // Set your time text
            _yourTimeText.text =
                l_timeTrial.TimeTrialElapsedTime.Minutes.ToString("D2") + ":" +
                l_timeTrial.TimeTrialElapsedTime.Seconds.ToString("D2") + ":" +
                l_timeTrial.TimeTrialElapsedTime.Milliseconds.ToString("D3");
            // Retrieve level times
            string l_levelName = SceneManager.GetActiveScene().name;

            string[] l_levelTimes = GameManager.Instance.RetrieveLevelTimes(l_levelName);
            // Set level times
            if (l_levelTimes != null)
            {
                _firstTimeText.text  = l_levelTimes[0];
                _secondTimeText.text = l_levelTimes[1];
                _thirdTimeText.text  = l_levelTimes[2];
            }
            // Set level time stats UI active
            _levelTimeStats.SetActive(true);
            // Start coroutine
            StartCoroutine(DisplayLevelTimeStatsCoroutine());
            // Start coroutine
            if (_firstTimeText.text.Equals(_yourTimeText.text))
            {
                _blinkTimeStat = _firstTimeText.gameObject;

                StartCoroutine(BlinkLevelTimeCoroutine());

                return;
            }
            //
            if (_secondTimeText.text.Equals(_yourTimeText.text))
            {
                _blinkTimeStat = _secondTimeText.gameObject;

                StartCoroutine(BlinkLevelTimeCoroutine());

                return;
            }
            //
            if (_thirdTimeText.text.Equals(_yourTimeText.text))
            {
                _blinkTimeStat = _thirdTimeText.gameObject;

                StartCoroutine(BlinkLevelTimeCoroutine());

                return;
            }
        }
Пример #10
0
 /// <summary>
 /// Convert Race Entity  into Race Object
 /// </summary>
 ///<param name="model">TimeTrialViewModel</param>
 ///<param name="RaceEntity">TimeTrial</param>
 ///<returns>TimeTrialViewModel</returns>
 public static TimeTrialViewModel ToViewModel(
     this TimeTrial entity,
     TimeTrialViewModel model)
 {
     model.Id          = entity.Id;
     model.CalendarId  = entity.CalendarId;
     model.RaceTypeId  = entity.RaceTypeId;
     model.FinYear     = entity.Calendar.FinYear.Name;
     model.Calendar    = entity.Calendar.ToViewModel(new CalendarViewModel());
     model.DistanceIds = entity.TimeTrialDistances.Select(a => a.DistanceId);
     return(model);
 }
Пример #11
0
        public override void Bind(Entity entity, Main main, bool creating = false)
        {
            entity.CannotSuspend = true;

            Transform   transform = entity.GetOrCreate <Transform>("Transform");
            TimeTrial   trial     = entity.GetOrCreate <TimeTrial>("TimeTrial");
            TimeTrialUI ui        = entity.GetOrCreate <TimeTrialUI>("UI");

            this.SetMain(entity, main);
            entity.Add("EndTimeTrial", trial.Disable);
            entity.Add("StartTimeTrial", trial.Enable);
            ui.Add(new Binding <float>(ui.ElapsedTime, trial.ElapsedTime));
            ui.Add(new Binding <float>(ui.BestTime, trial.BestTime));
            ui.Add(new Binding <string>(ui.NextMap, trial.NextMap));
            ui.Add(new CommandBinding(trial.Enable, ui.Show));
            ui.Add(new CommandBinding(trial.Disable, ui.ShowEnd));

#if STEAMWORKS
            ui.Add(new CommandBinding(trial.OnLeaderboardError, ui.OnLeaderboardError));
            ui.Add(new CommandBinding <LeaderboardScoresDownloaded_t, LeaderboardScoresDownloaded_t>(trial.OnLeaderboardSync, ui.OnLeaderboardSync));
            ui.Add(new CommandBinding(ui.LeaderboardSync, trial.LeaderboardSync));
#endif

            ui.Add(new CommandBinding(ui.Retry, trial.Retry));

            ui.Add(new CommandBinding(ui.MainMenu, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = false;
                IO.MapLoader.Load(main, Main.MenuMap);
                main.Menu.Show();
            }));

            ui.Add(new CommandBinding(ui.LoadNextMap, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = false;
                IO.MapLoader.Load(main, trial.NextMap);
            }));

            ui.Add(new CommandBinding(ui.Edit, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = true;
                IO.MapLoader.Load(main, main.MapFile);
            }));

            entity.Add("NextMap", trial.NextMap, new PropertyEntry.EditorData
            {
                Options = FileFilter.Get(main, main.MapDirectory, new string[] { "", "Challenge" }, IO.MapLoader.MapExtension),
            });
        }
Пример #12
0
        public override void Bind(Entity entity, Main main, bool creating = false)
        {
            Transform transform = entity.GetOrCreate <Transform>("Transform");
            TimeTrial trial     = entity.GetOrCreate <TimeTrial>("TimeTrial");

            SetMain(entity, main);
            entity.Add("EndTimeTrial", trial.EndTimeTrial);
            entity.Add("StartTimeTrial", trial.StartTimeTrial);
            entity.Add("Pause", trial.PauseTimer);
            entity.Add("Resume", trial.ResumeTimer);
            entity.Add("ParTime", trial.ParTime, "Base par time");
            entity.Add("KourTime", trial.KourTime, "Gold medal time");
            entity.Add("NextMap", trial.NextMap, new PropertyEntry.EditorData
            {
                Options = FileFilter.Get(main, main.MapDirectory, new string[] { "", "Challenge" }, IO.MapLoader.MapExtension),
            });
        }
Пример #13
0
        public async Task <SaveResult> SaveEntityList(TimeTrialViewModel model, TimeTrial parentEntity)
        {
            SaveResult saveResult = new SaveResult();

            var currentEntities = parentEntity.TimeTrialDistances;

            if (model.DistanceIds == null)
            {
                if (currentEntities.Any())
                {
                    var TimeTrialDistanceIds = currentEntities.ToList().ToList().Select(b => b.Id);

                    var toDeleteList = _context.TimeTrialDistance.Where(a => TimeTrialDistanceIds.Contains(a.Id));

                    _context.TimeTrialDistance.RemoveRange(toDeleteList);
                    await _context.SaveChangesAsync();

                    saveResult.IsSuccess = true;
                }
                else
                {
                    saveResult.IsSuccess = true;
                }
            }
            else
            {
                var regions = _context.Distance.Where(a => model.DistanceIds.Contains(a.Id));

                if (currentEntities.Any())
                {
                    saveResult.IsSuccess = await AddTimeTrialDistanceWherePreviousExists(model, currentEntities, regions);

                    if (saveResult.IsSuccess)
                    {
                        saveResult = await ManageExistingTimeTrialDistance(model, currentEntities, regions);
                    }
                }
                else
                {
                    saveResult.IsSuccess = await AddEntity(model, currentEntities, regions);
                }
            }


            return(saveResult);
        }
Пример #14
0
        /// <summary>
        /// Convert Race Object into Race Entity
        /// </summary>
        ///<param name="model">Race</param>
        ///<param name="RaceEntity">TimeTrial</param>
        ///<returns>TimeTrial</returns>
        public static TimeTrial ToEntity(this TimeTrialViewModel model,
                                         TimeTrial entity)
        {
            if (entity.Id == 0)
            {
                entity.CreatedUserId = model.SessionUserId;
                entity.IsActive      = model.IsActive;
                entity.CalendarId    = model.CalendarId;
                entity.RaceTypeId    = model.RaceTypeId;
            }
            else
            {
                entity.UpdatedUserId    = model.SessionUserId;
                entity.UpdatedTimestamp = DateTime.Now;
            }


            return(entity);
        }
Пример #15
0
        public override void Bind(Entity entity, Main main, bool creating = false)
        {
            Transform   transform = entity.GetOrCreate <Transform>("Transform");
            TimeTrial   trial     = entity.GetOrCreate <TimeTrial>("TimeTrial");
            TimeTrialUI ui        = entity.GetOrCreate <TimeTrialUI>("UI");

            SetMain(entity, main);
            entity.Add("EndTimeTrial", trial.Disable);
            entity.Add("StartTimeTrial", trial.Enable);
            ui.Add(new Binding <float>(ui.ElapsedTime, trial.ElapsedTime));
            ui.Add(new Binding <string>(ui.NextMap, trial.NextMap));
            ui.Add(new CommandBinding(trial.Enable, (Action)ui.AnimateIn));
            ui.Add(new CommandBinding(trial.Disable, (Action)ui.ShowEndPanel));
            ui.Add(new CommandBinding(ui.Retry, trial.Retry));
            ui.Add(new CommandBinding(ui.MainMenu, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = false;
                IO.MapLoader.Load(main, Main.MenuMap);
                main.Menu.Show();
            }));

            ui.Add(new CommandBinding(ui.LoadNextMap, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = false;
                IO.MapLoader.Load(main, trial.NextMap);
            }));

            ui.Add(new CommandBinding(ui.Edit, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = true;
                IO.MapLoader.Load(main, main.MapFile);
            }));

            entity.Add("NextMap", trial.NextMap, new PropertyEntry.EditorData
            {
                Options = FileFilter.Get(main, main.MapDirectory, new string[] { "", "Challenge" }, IO.MapLoader.MapExtension),
            });
        }
Пример #16
0
    protected override void OnOpen()
    {
        //save data if best
        string level = LevelController.levelLoaded;
        float  t     = LevelController.timeTrialSaved;
        float  tBest;

        bool isBest;

        if (TimeTrial.Exists(level))
        {
            float lastT = TimeTrial.Load(level);
            if (t < lastT)
            {
                tBest  = t;
                isBest = true;
                //TimeTrial.Save(level, t);
            }
            else
            {
                tBest  = lastT;
                isBest = false;
            }
        }
        else
        {
            tBest  = t;
            isBest = true;
            //TimeTrial.Save(level, t);
        }

        timeLabel.text     = LevelController.LevelTimeFormat(t);
        timeBestLabel.text = LevelController.LevelTimeFormat(tBest);

        newRecordGO.SetActive(isBest);

        //post
        //TimeTrial.Post(level, t);

        NGUILayoutBase.RefreshNow(transform);
    }
Пример #17
0
 public TimeTrialUI(TimeTrial tT)
 {
     this.theTimeTrial = tT;
 }
Пример #18
0
        public override void Bind(Entity entity, Main main, bool creating = false)
        {
            entity.CannotSuspend = true;

            Transform   transform = entity.GetOrCreate <Transform>("Transform");
            TimeTrial   trial     = entity.GetOrCreate <TimeTrial>("TimeTrial");
            TimeTrialUI ui        = entity.GetOrCreate <TimeTrialUI>("UI");

            this.SetMain(entity, main);
            entity.Add("EndTimeTrial", trial.Disable);
            entity.Add("StartTimeTrial", trial.Enable);
            ui.Add(new Binding <float>(ui.ElapsedTime, trial.ElapsedTime));
            ui.Add(new Binding <float>(ui.BestTime, trial.BestTime));
            ui.Add(new Binding <string>(ui.NextMap, trial.NextMap));
            ui.Add(new CommandBinding(trial.Enable, ui.Show));
            ui.Add(new CommandBinding(trial.ShowUI, ui.ShowEnd));

#if STEAMWORKS
            ui.Add(new CommandBinding(trial.Proxy.OnLeaderboardError, ui.OnLeaderboardError));
            ui.Add(new Binding <bool>(trial.Proxy.PersonaNotification, ui.PersonaNotification));
            ui.Add(new CommandBinding <LeaderboardScoresDownloaded_t, LeaderboardScoresDownloaded_t>(trial.Proxy.OnLeaderboardSync, ui.OnLeaderboardSync));
#endif

            ui.Add(new CommandBinding(ui.Retry, trial.Retry));

            ui.Add(new CommandBinding(ui.MainMenu, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = false;
                IO.MapLoader.Load(main, Main.MenuMap);
                main.Menu.Show();
            }));

            ui.Add(new CommandBinding(ui.LoadNextMap, delegate()
            {
                string filenameWithExtension = trial.NextMap;
                if (!filenameWithExtension.EndsWith(IO.MapLoader.MapExtension))
                {
                    filenameWithExtension += IO.MapLoader.MapExtension;
                }

                string fullFilename = Path.IsPathRooted(filenameWithExtension) ? filenameWithExtension : Path.GetFullPath(Path.Combine(main.MapDirectory, filenameWithExtension));

                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = false;
                if (File.Exists(fullFilename))
                {
                    IO.MapLoader.Load(main, fullFilename);
                }
                else
                {
#if DEMO
                    main.Spawner.StartSpawnPoint.Value = "demo";
#endif
                    IO.MapLoader.Load(main, Main.MenuMap);
                    main.Menu.Show();
                }
            }));

            ui.Add(new CommandBinding(ui.Edit, delegate()
            {
                main.CurrentSave.Value   = null;
                main.EditorEnabled.Value = true;
                IO.MapLoader.Load(main, main.MapFile);
            }));

            entity.Add("NextMap", trial.NextMap, new PropertyEntry.EditorData
            {
                Options = FileFilter.Get(main, main.MapDirectory, new string[] { "", "Challenge" }, IO.MapLoader.MapExtension),
            });
            entity.Add("AllowRespawn", trial.AllowRespawn);
        }
Пример #19
0
        public async Task <SaveResult> SaveEntity(TimeTrialViewModel viewModel)
        {
            SaveResult saveResult = new SaveResult();
            Dictionary <bool, string> dictionary = new Dictionary <bool, string>();

            var entity = new TimeTrial();

            try
            {
                saveResult = AtLeastOneEvent(viewModel, saveResult);
                if (!saveResult.IsSuccess)
                {
                    return(saveResult);
                }

                if (viewModel.Id != 0)
                {
                    if (_context.TimeTrial.IgnoreQueryFilters().Any(a => a.Id == viewModel.Id))
                    {
                        entity = await _context.TimeTrial
                                 .Include(a => a.Calendar)
                                 .Include(a => a.TimeTrialDistances)
                                 .IgnoreQueryFilters().FirstOrDefaultAsync(a => a.Id == viewModel.Id);
                    }
                    entity = viewModel.ToEntity(entity);
                    _context.TimeTrial.Update(entity);
                }
                else
                {
                    entity = viewModel.ToEntity(entity);
                    _context.TimeTrial.Add(entity);
                }

                await _context.SaveChangesAsync();

                if (entity.Id > 0)
                {
                    saveResult.IsSuccess = true;
                    saveResult.Id        = entity.Id;
                    viewModel.Id         = entity.Id;

                    if (saveResult.IsSuccess)
                    {
                        saveResult = await _timeTrialDistanceBL.SaveEntityList(viewModel, entity);
                    }
                }
            }
            catch (DbUpdateException upDateEx)
            {
                var    results = upDateEx.GetSqlerrorNo();
                string msg     = results == (int)SqlErrNo.FK ? ConstEntity.MissingValueMsg : ConstEntity.UniqueKeyMsg;
                saveResult = dictionary.GetValidateEntityResults(msg).ToSaveResult();
            }
            catch (Exception ex)
            {
                saveResult.Message = CrudError.SaveErrorMsg;
            }


            return(saveResult);
        }
Пример #20
0
 private void Start()
 {
     tt = GetComponentInParent <TimeTrial>();
 }
Пример #21
0
    IEnumerator DoWait()
    {
        yield return(StartCoroutine(Achievement.instance.WaitServiceComplete()));

        waitGO.SetActive(false);

        UICamera.selectedObject = items[0].l.gameObject;

        for (int i = 0; i < items.Length; i++)
        {
            items[i].l.onClick = OnItemClick;

            //check locked
            bool isLocked;
            if (TimeTrial.instance.data[i].requireUnlock)
            {
                if (!Achievement.instance.AchievementIsUnlocked(TimeTrial.instance.data[i].achieveId))
                {
                    isLocked = true;

                    //go through slot data
                    ModalSaveSlots modalSlots = UIModalManager.instance.ModalGetController <ModalSaveSlots>("slots");
                    for (int s = 0; s < modalSlots.slots.Length; s++)
                    {
                        SceneState.instance.ResetGlobalValues();
                        UserSlotData.LoadSlot(s, false);
                        if (LevelController.IsLevelComplete(TimeTrial.instance.data[i].level))
                        {
                            isLocked = false;
                            break;
                        }

                        UserSlotData.LoadSlot(-1, false);
                    }
                }
                else
                {
                    isLocked = false;
                }
            }
            else
            {
                isLocked = false;
            }

            if (isLocked)
            {
                items[i].label.text  = "?????";
                items[i].label.color = Color.gray;
                items[i].time.text   = "BEST - ---:--.--";

                items[i].locked = true;
            }
            else
            {
                items[i].label.text  = TimeTrial.instance.data[i].name;
                items[i].label.color = activeColor;

                if (TimeTrial.Exists(TimeTrial.instance.data[i].level))
                {
                    items[i].time.text = "BEST - " + LevelController.LevelTimeFormat(TimeTrial.Load(TimeTrial.instance.data[i].level));
                }
                else
                {
                    items[i].time.text = "BEST - ---:--.--";
                }

                items[i].locked = false;
            }
        }

        back.onClick = OnReturn;
    }