示例#1
0
        /// <summary>
        /// Event occured when the NoteBubble finished its move (to the right place)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void moveCenter_Completed(object sender, EventArgs e)
        {
            Converter converter = new Converter();
            DisplayPreviewGrid(false);

            noteBubbleVM.SVItem.Center = bubbleCenter;
            for (int i = 0; i < sessionVM.NotesOnStave.Count && NothingAtThisPlace; i++)
            {
                if ((int)((virtualCenter.X - 120.0) / 60.0) == sessionVM.NotesOnStave[i].Note.Position
                    && !sessionVM.NotesOnStave[i].Picked
                    && converter.getOctave(virtualCenter.Y) == sessionVM.NotesOnStave[i].Note.Octave
                    && converter.getPitch(virtualCenter.Y) == sessionVM.NotesOnStave[i].Note.Pitch
                    && ((bubbleDroppedTopStave && sessionVM.Session.StaveTop.Notes.Contains(sessionVM.NotesOnStave[i].Note)) ||
                        (!bubbleDroppedTopStave && sessionVM.Session.StaveBottom.Notes.Contains(sessionVM.NotesOnStave[i].Note))))
                {
                    if (noteBubbleVM.NoteBubble.Note.Duration == NoteValue.alteration)
                    {
                        NothingAtThisPlace = false;
                        noteVM = sessionVM.NotesOnStave[i];
                    }
                    else
                    {
                        sessionVM.NotesOnStave[i].Animation.BackToBubbleFormat(true);
                        NothingAtThisPlace = true;
                    }
                }
                else NothingAtThisPlace = true;
            }

            int positionNote = (int)((virtualCenter.X - 120.0) / 60.0);
            double betweenStave = (350 - GlobalVariables.ManipulationGrid.ElementAtOrDefault(noteBubbleVM.NoteBubble.Note.Position + 2)) * (sessionVM.SessionSVI.ActualHeight / 1080);
            bool isUp = (bubbleCenter.Y < betweenStave);

            if (NothingAtThisPlace)
            {
                NoteViewModel noteViewModel = new NoteViewModel(bubbleCenter, noteBubbleVM.NoteBubble.Note, sessionVM.Notes, sessionVM);
                if (!noteViewModel.Note.Sharp && !noteViewModel.Note.Flat)
                {
                    if (isUp)
                    {
                        sessionVM.Session.StaveTop.CurrentInstrument.PlayNote(noteViewModel.Note);
                        sessionVM.Session.StaveTop.AddNote(noteViewModel.Note, positionNote);
                    }
                    else
                    {
                        sessionVM.Session.StaveBottom.CurrentInstrument.PlayNote(noteViewModel.Note);
                        sessionVM.Session.StaveBottom.AddNote(noteViewModel.Note, positionNote);
                    }
                    sessionVM.Bubbles.Items.Remove(noteBubbleVM.SVItem);
                    sessionVM.NbgVM.NoteBubbleVMs.Remove(noteBubbleVM);
                    sessionVM.Notes.Items.Add(noteViewModel.SVItem);
                    sessionVM.NotesOnStave.Add(noteViewModel);
                }
            }
            else
            {
                //If the NoteBubbleViewModel is a (#) or (b)
                if (noteBubbleVM.NoteBubble.Note.Sharp || noteBubbleVM.NoteBubble.Note.Flat)
                {
                    bool changeline = false;
                    if (noteBubbleVM.NoteBubble.Note.Sharp)
                        changeline = noteVM.Note.UpSemiTone();
                    if (noteBubbleVM.NoteBubble.Note.Flat)
                        changeline = noteVM.Note.DownSemiTone();

                    double y = converter.getCenterY(isUp, noteVM.Note);
                    if (y < 80)
                    {
                        if (noteBubbleVM.NoteBubble.Note.Sharp)
                            noteVM.Note.DownSemiTone();
                        if (noteBubbleVM.NoteBubble.Note.Flat)
                            noteVM.Note.UpSemiTone();

                        canAnimate = true;
                        Animate();
                    }
                    else
                    {
                        y *= sessionVM.SessionSVI.ActualHeight / 1080.0;
                        sessionVM.NbgVM.NoteBubbleVMs.Remove(noteBubbleVM);
                        sessionVM.Bubbles.Items.Remove(noteBubbleVM.SVItem);
                        sessionVM.Notes.Items.Remove(noteVM.SVItem);
                        sessionVM.NotesOnStave.Remove(noteVM);
                        noteVM = new NoteViewModel(new Point(bubbleCenter.X, y), noteVM.Note, sessionVM.Notes, sessionVM);

                        if (isUp)
                        {
                            sessionVM.Session.StaveTop.RemoveNote(noteVM.Note);
                            sessionVM.Session.StaveTop.CurrentInstrument.PlayNote(noteVM.Note);
                            sessionVM.Session.StaveTop.AddNote(noteVM.Note, positionNote);
                        }
                        else
                        {
                            sessionVM.Session.StaveBottom.RemoveNote(noteVM.Note);
                            sessionVM.Session.StaveBottom.CurrentInstrument.PlayNote(noteVM.Note);
                            sessionVM.Session.StaveBottom.AddNote(noteVM.Note, positionNote);
                        }
                        sessionVM.Notes.Items.Add(noteVM.SVItem);
                        sessionVM.NotesOnStave.Add(noteVM);
                    }
                }

                else
                {
                    canAnimate = true;
                    Animate();
                }
            }
        }
示例#2
0
        /// <summary>
        /// Event occured when the note finished its move (to the right place)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void moveCenter_Completed(object sender, EventArgs e)
        {
            Converter converter = new Converter();
            DisplayPreviewGrid(false);

            for (int i = 0; i < sessionVM.NotesOnStave.Count && NothingAtThisPlace; i++)
            {
                //if (noteBubbleCenter.QuasiEquals(sessionVM.NotesOnStave[i].SVItem.Center) && !sessionVM.NotesOnStave[i].Picked)
                if ((int)((virtualCenter.X - 120.0) / 60.0) == sessionVM.NotesOnStave[i].Note.Position
                    && !sessionVM.NotesOnStave[i].Picked
                    && converter.getOctave(virtualCenter.Y) == sessionVM.NotesOnStave[i].Note.Octave
                    && converter.getPitch(virtualCenter.Y) == sessionVM.NotesOnStave[i].Note.Pitch
                    && ((noteDroppedTopStave && sessionVM.Session.StaveTop.Notes.Contains(sessionVM.NotesOnStave[i].Note)) ||
                        (!noteDroppedTopStave && sessionVM.Session.StaveBottom.Notes.Contains(sessionVM.NotesOnStave[i].Note))))
                    {
                        //Invert comments if exception raises.
                        sessionVM.NotesOnStave[i].Animation.BackToBubbleFormat(true);
                        NothingAtThisPlace = true;
                        //NothingAtThisPlace = false;
                }
                else NothingAtThisPlace = true;
            }

            if (NothingAtThisPlace)
            {
                int positionNote = (int)((virtualCenter.X - 120.0) / 60.0);

                double betweenStave = (350 - GlobalVariables.ManipulationGrid.ElementAtOrDefault(noteVM.Note.Position + 2)) * (sessionVM.SessionSVI.ActualHeight / 1080);

                sessionVM.Session.StaveTop.RemoveNote(noteVM.Note);
                sessionVM.Session.StaveBottom.RemoveNote(noteVM.Note);

                bool isUp = (NoteCenter.Y < betweenStave);
                noteVM.Note = new Note(converter.getOctave(virtualCenter.Y), noteVM.Note.Duration, converter.getPitch(virtualCenter.Y), positionNote, noteVM.Note.Sharp, noteVM.Note.Flat);
                noteVM.SetStyle();

                if (isUp)
                {
                    sessionVM.Session.StaveTop.AddNote(noteVM.Note, positionNote);
                    sessionVM.Session.StaveTop.CurrentInstrument.PlayNote(noteVM.Note);
                }
                else
                {
                    sessionVM.Session.StaveBottom.AddNote(noteVM.Note, positionNote);
                    sessionVM.Session.StaveBottom.CurrentInstrument.PlayNote(noteVM.Note);
                }
            }
            else BackToBubbleFormat(false);

            noteVM.Picked = false;
        }
示例#3
0
        /// <summary>
        /// Event occured when a Bubble is released
        /// Magnetise the current bubble
        /// Add the note in the right stave
        /// Move the bubble to its final place
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void touchLeave(object sender, ContainerManipulationCompletedEventArgs e)
        {
            ScatterViewItem bubble = new ScatterViewItem();
            bubble = e.Source as ScatterViewItem;
            bubbleCenter = bubble.ActualCenter;
            NothingAtThisPlace = true;

            int width = (int)sessionVM.Grid.ActualWidth;
            int height = (int)sessionVM.Grid.ActualHeight;
            bubbleCenter.X = bubbleCenter.X * 1920.0 / width;
            bubbleCenter.Y = bubbleCenter.Y * 1080.0 / height;

            if (bubbleCenter.X < 150.0) bubbleCenter.X = 150.0;
            else if (bubbleCenter.X >= 1830.0) bubbleCenter.X = 1800.0;
            else bubbleCenter.X = Math.Floor((bubbleCenter.X + 30.0) / 60.0) * 60.0;

            //"Applatissement" de la portée (MAJ : Switch -> Tableau !)
            int offset = GlobalVariables.ManipulationGrid.ElementAtOrDefault((int)(bubbleCenter.X / 60.0));
            bubbleCenter.Y += offset;

            Converter converter = new Converter();
            int positionNote = (int)(bubbleCenter.X - 120) / 60;

            //Y dans le cadre portée ?
            //Si oui, animation
            //pas de else
            if (bubbleCenter.Y < 576.0 && bubbleCenter.Y > 165.0)
            {
                if (bubbleCenter.Y < 370.0)
                {
                    if (bubbleCenter.Y >= 344.0) bubbleCenter.Y = 344.0;
                    bubbleCenter.Y = Math.Floor((bubbleCenter.Y + 6.0) / 20.0) * 20.0 + 4.0;
                    bubbleDroppedTopStave = true;
                }
                else
                {
                    if (bubbleCenter.Y <= 395) bubbleCenter.Y = 395;
                    bubbleCenter.Y = Math.Floor((bubbleCenter.Y + 15.0) / 20.0) * 20.0 - 5.0;
                    bubbleDroppedTopStave = false;
                }

                noteBubbleVM.NoteBubble.Note = new Note(converter.getOctave(bubbleCenter.Y), noteBubbleVM.NoteBubble.Note.Duration, converter.getPitch(bubbleCenter.Y), positionNote, noteBubbleVM.NoteBubble.Note.Sharp, noteBubbleVM.NoteBubble.Note.Flat);

                virtualCenter = bubbleCenter;

                bubbleCenter.Y -= offset;

                bubbleCenter.X = bubbleCenter.X * width / 1920.0;
                bubbleCenter.Y = bubbleCenter.Y * height / 1080.0;

                #region STB
                Storyboard stb = new Storyboard();
                PointAnimation moveCenter = new PointAnimation();

                moveCenter.From = bubble.ActualCenter;
                moveCenter.To = bubbleCenter;
                moveCenter.Duration = new Duration(TimeSpan.FromSeconds(0.15));

                moveCenter.FillBehavior = FillBehavior.Stop;

                stb.Children.Add(moveCenter);

                Storyboard.SetTarget(moveCenter, bubble);
                Storyboard.SetTargetProperty(moveCenter, new PropertyPath(ScatterViewItem.CenterProperty));
                #endregion

                bubble.Center = bubbleCenter;
                moveCenter.Completed += new EventHandler(moveCenter_Completed);

                stb.Begin(SVItem);
            }
            else
            {
                canAnimate = true;
                Animate();
                DisplayPreviewGrid(false);
            }
        }