コード例 #1
0
ファイル: Zerg.cs プロジェクト: TuringMac/TowerDef
 public Zerg(List <Point> points, int wave) //передаю список вейпоинтов и номер волны
     : base(MobType.Zerg, wave)
 {
     this.points = points;
     x           = points[0].X;
     y           = points[0].Y;
     //NextPointIndex = 1;
     //StepTimer.Interval = 100.0 / _Speed;
     StepTimer.Start();
 }
コード例 #2
0
        public unsafe void TestRandom(int count)
        {
            int loopCount = 200;

            uint[] items      = new uint[count];
            uint[] lookupList = new uint[count];

            for (uint x = 0; x < items.Length; x++)
            {
                items[x]      = 2 * x;
                lookupList[x] = 2 * x + 1;
            }
            Shuffle(lookupList, 3, 10);

            StepTimer.Reset();
            for (int cnt = 0; cnt < loopCount; cnt++)
            {
                //GC.Collect(0);

                //items = (uint[])items.Clone();

                //GC.WaitForPendingFinalizers();
                //System.Threading.Thread.Sleep(10);

                SnapCustomMethodsUInt32 bin = new SnapCustomMethodsUInt32();
                fixed(uint *lp = items)
                {
                    byte *     lpp = (byte *)lp;
                    SnapUInt32 box = new SnapUInt32();

                    StepTimer.ITimer timer = StepTimer.Start("Lookup");
                    for (int x = 0; x < lookupList.Length; x++)
                    {
                        box.Value = lookupList[x];
                        bin.BinarySearch(lpp, box, count, 4);
                        //BoxKeyMethodsUint32.BinarySearchTest(lpp, box, count, 4);
                    }
                    timer.Stop();
                }
            }

            StringBuilder SB = new StringBuilder();

            //Console.Write(count.ToString("Tree\t0\t"));
            //SB.Append((count * 4).ToString("0\t") + (count / StepTimer.GetAverage("Lookup") / 1000000).ToString("0.000\t"));
            //SB.Append((count * 4.0 / 1024).ToString("0.###\t") + ((StepTimer.GetAverage("Lookup") / Math.Log(count, 2)) / count * 1000000000).ToString("0.00\t"));
            SB.Append(((StepTimer.GetSlowest("Lookup") / Math.Log(count, 2)) / count * 1000000000).ToString("0.00\t"));
            //SB.Append(((StepTimer.GetAverage("Lookup") / Math.Log(count, 2)) / count * 1000000000).ToString("0.00\t"));
            Console.WriteLine(SB.ToString());
        }
コード例 #3
0
        /**************************************************************************
        *                                FUNCTIONS                               *
        **************************************************************************/
        /// <summary>
        /// Switch the states between play and pause
        /// </summary>
        public void switchPlayPauseState()
        {
            if (isAutoplaying)
            {
                btnPlayPause.Text = "4";
                StepTimer.Stop();
            }
            else
            {
                btnPlayPause.Text = ";";
                StepTimer.Start();
            }

            // Invert the state
            isAutoplaying = !isAutoplaying;
        }
コード例 #4
0
ファイル: CataloguePath.cs プロジェクト: asimshah/Music
        private async Task <List <CatalogueResult> > ProcessFolderAsync(MusicDb db, OpusFolder folder)
        {
            var results = new List <CatalogueResult>();

            db.Database.SetCommandTimeout(TimeSpan.FromMinutes(10));
            StepTimer st = null;

            if (musicOptions.TimeCatalogueSteps)
            {
                st = new StepTimer();
                st.Start();
            }
            if (/*true ||*/ taskItem.Force)
            {
                var deletedFilesCount = folder.RemoveCurrentMusicFiles(db); st?.Time("Removal");
                if (deletedFilesCount > 0)
                {
                    await db.SaveChangesAsync();
                }
            }
            var musicFiles = await WriteAudioFilesAsync(db, folder); st?.Time("MusicFiles to DB");

            if (musicFiles.Count() > 0) // count is 0 most often when trying to find singles for an artist
            {
                await UpdateTagsAsync(db, musicFiles); st?.Time("Extract tags");
                var musicSets = GetMusicSets(db, folder, musicFiles); st?.Time("Split into sets");
                int i         = 0;
                foreach (var set in musicSets)
                {
                    var cr = await set.CatalogueAsync(); st?.Time($"Set {i++ + 1}");
                    results.Add(cr);
                    if (cr.Status == CatalogueStatus.Success)
                    {
                        if (cr.Artist == null)
                        {
                            log.Trace($"Artist missing");
                        }
                        switch (cr.MusicSetType)
                        {
                        case Type T when T == typeof(PopularMusicAlbumSet) || T == typeof(WesternClassicalAlbumSet):
                            if (cr.Work == null)
                            {
                                log.Trace($"Album missing");
                            }
                            else if (cr.Work.Tracks == null || cr.Work.Tracks.Count() == 0)
                            {
                                log.Trace($"Work has no tracks");
                            }
                            if (cr.Tracks == null)
                            {
                                log.Trace($"Tracks missing");
                            }
                            else if (cr.Tracks.Count() == 0)
                            {
                                log.Trace($"Track count is 0");
                            }
                            //if(cr.TaskItem != null)
                            //{
                            //    QueueTask(cr.TaskItem);
                            //}
                            break;

                        case Type T when T == typeof(WesternClassicalCompositionSet):
                            if (cr.Composition == null)
                            {
                                log.Trace($"Composition missing");
                            }
                            if (cr.Performance == null)
                            {
                                log.Trace($"Performance missing");
                            }
                            else if (cr.Performance.Movements == null || cr.Performance.Movements.Count() == 0)
                            {
                                log.Trace($"Performance has no movements");
                            }

                            break;
                        }
                    }
                }
            }
            else
            {
                results.Add(new CatalogueResult {
                    Status = CatalogueStatus.Success
                });
            }
            return(results);
        }
コード例 #5
0
ファイル: OpusFolder.cs プロジェクト: asimshah/Music
        public (bool result, ChangesDetected changes) CheckForChanges(MusicDb db)
        {
            ChangesDetected changesDetected = ChangesDetected.None;
            bool            result          = false;
            var             st = new StepTimer();

            st.Start();
            var currentMusicFiles = GetMusicFilesFromDb(db);//.ToArray();

            st.Time();
            var filesOnDisk = GetFilesOnDisk();

            st.Time();
            bool anyFilesNotCatalogued()
            {
                bool r    = false;
                var  list = currentMusicFiles.Where(x => x.Track == null);

                r = list.Count() > 0;
                st.Time();
                if (r)
                {
                    changesDetected = ChangesDetected.AtLeastOneFileNotCatalogued;
                    //log.Trace($"anyFilesNotCatalogued() returns true");
                }
                return(r);
            }

            bool anyFilesRewritten()
            {
                bool r  = false;
                var  l1 = currentMusicFiles.Select(x => x.FileLastWriteTimeUtc);
                var  l2 = filesOnDisk.Select(x => new DateTimeOffset(x.fi.LastWriteTimeUtc, TimeSpan.Zero));

                r = !l1.SequenceEqual(l2);
                st.Time();
                if (r)
                {
                    changesDetected = ChangesDetected.AtLeastOneFileModifiedOnDisk;
                    log.Trace($"anyFilesRewritten() returns true");
                }
                return(r);
            }

            bool musicTagsAreNew()
            {
                bool r = false;

                if (HasMusicTags())
                {
                    var tagFile = Path.Combine(Folderpath, ITEOBase.TagFile);
                    var tagTime = new DateTimeOffset(new FileInfo(tagFile).LastWriteTimeUtc, TimeSpan.Zero);
                    r = currentMusicFiles.Any(mf => mf.LastCataloguedAt < tagTime);
                }
                st.Time();
                if (r)
                {
                    changesDetected = ChangesDetected.MusicTagsAreNewer;
                    //log.Trace($"customTagsAreNew() returns true");
                }
                return(r);
            }

            bool additionsOrDeletionsExist()
            {
                var differences = filesOnDisk.Select(f => f.fi.FullName).Except(currentMusicFiles.Select(mf => mf.File), StringComparer.CurrentCultureIgnoreCase);

                st.Time();
                var r = differences.Count() != 0;

                if (r)
                {
                    changesDetected = ChangesDetected.MusicFileCountHasChanged;
                    log.Debug($"music file difference count is {differences.Count()}");
                }
                return(r);
            }

            bool anyImageChanged()
            {
                bool r     = false;
                var  works = currentMusicFiles.Select(mf => mf.Track).Select(x => x.Work).Distinct();
                //currentMusicFiles.Select(mf => mf.Track).Where(x => x.Performance != null)
                //    .Select(x => x.Performance.Composition.Artist).Distinct();
                var artists = works.Select(x => x.Artist)
                              .Union(currentMusicFiles.Select(mf => mf.Track).Where(x => x.Performance != null)
                                     .Select(x => x.Performance.Composition.Artist))
                              .Distinct();

                foreach (var artist in artists.Where(a => a.Type != ArtistType.Various))
                {
                    var f = artist.GetPortraitFile(MusicOptions);
                    if (artist.Portrait.HasChanged(f))
                    {
                        log.Debug($"artist {artist.Name}, portrait file {f} found");
                        r = true;
                        break;
                    }
                }
                if (!r)
                {
                    foreach (var work in works)
                    {
                        //var coverFile = MusicStyle.GetMostRecentOpusCoverFile(MusicOptions, IsCollection ? "Collections" : work.Artist.Name, currentPathData.OpusPath);
                        //var coverFile = MusicStyle.GetMostRecentOpusCoverFile(MusicOptions, work, currentPathData.OpusPath);
                        var coverFile = work.GetMostRecentOpusCoverFile(MusicOptions);
                        if (work.Cover.HasChanged(coverFile))
                        {
                            log.Debug($"artist {work.Artist.Name}, work {work.Name}, cover art file {coverFile}");
                            r = true;
                            break;
                        }
                    }
                }
                if (r)
                {
                    changesDetected = ChangesDetected.CoverArtHasChanged;
                    //log.Trace($"anyImageChanged() returns true");
                }
                return(r);
            }

            if (additionsOrDeletionsExist() || musicTagsAreNew() || anyFilesRewritten() || anyFilesNotCatalogued() || anyImageChanged())
            {
                result = true;
            }
            return(result, changesDetected);
        }