The time line item view model.
Inheritance: Caliburn.Micro.Screen
Beispiel #1
0
        /// <summary>
        /// Adds a blank item after the current point in the time line.
        /// </summary>
        /// <param name="timeLineItemViewModel"></param>
        public void AddTimeLineItem(TimeLineItemViewModel timeLineItemViewModel)
        {
            TimeLineItems.Insert(TimeLineItems.IndexOf(SelectedTimeLineItem) + 1, timeLineItemViewModel);

            SelectedTimeLineItem = timeLineItemViewModel;


            NotifyOfPropertyChange(() => CanRemoveItem);
            NotifyOfPropertyChange(() => TimeLineItems);
        }
Beispiel #2
0
        /// <summary>
        /// Opens a new time line from file.
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="append"></param>
        public void OpenTimeLine(string filePath, bool append = false)
        {
            if (string.IsNullOrWhiteSpace(filePath))
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();

                openFileDialog.Filter           = "SF4 Combo|*.cmb";
                openFileDialog.RestoreDirectory = true;
                openFileDialog.ShowDialog();
                if (openFileDialog.FileName == "")
                {
                    return;
                }
                filePath = openFileDialog.FileName;
            }

            List <string> lines = File.ReadAllLines(filePath).ToList();

            if (!append)
            {
                ClearTimeLine();
            }

            if (lines.First().StartsWith("FTComboFile"))
            {
                lines.RemoveAt(0);
                foreach (String line in lines)
                {
                    TimeLineItemViewModel timeLineItemViewModel = new TimeLineItemViewModel(this);
                    InputItemViewModel    inputItem             = InputItemViewModel.Deserialize(line);

                    timeLineItemViewModel.PlaySound  = inputItem.PlaySound;
                    timeLineItemViewModel.WaitFrames = inputItem.WaitFrames;
                    timeLineItemViewModel.Direction  = inputItem.Direction;

                    timeLineItemViewModel.Light_Punch  = inputItem.Light_Punch;
                    timeLineItemViewModel.Medium_Punch = inputItem.Medium_Punch;
                    timeLineItemViewModel.Hard_Punch   = inputItem.Hard_Punch;

                    timeLineItemViewModel.Light_Kick  = inputItem.Light_Kick;
                    timeLineItemViewModel.Medium_Kick = inputItem.Medium_Kick;
                    timeLineItemViewModel.Hard_Kick   = inputItem.Hard_Kick;


                    TimeLineItems.Add(timeLineItemViewModel);
                }
            }
            else
            {
                OldDeserialize(lines);
            }
        }
        /// <summary>
        /// Handles the <see cref="AddTimeLineItemMessage"/>
        /// </summary>
        /// <param name="message">The add time line message.</param>
        public void Handle(AddTimeLineItemMessage message)
        {
            TimeLineItemViewModel timeLineItem = message.TimeLineItemViewModel;

            if (message.Player == 1)
            {
                PlayerOneTimeLineViewModel.AddTimeLineItem(timeLineItem);
            }
            else
            {
                PlayerTwoTimeLineViewModel.AddTimeLineItem(timeLineItem);
            }
        }
        /// <summary>
        /// </summary>
        /// <param name="player">
        /// </param>
        /// <param name="timeLineItem">
        /// </param>
        private void SendPlayerInput(int player, TimeLineItemViewModel timeLineItem)
        {
            InputCommandModel icm = timeLineItem.InputItemViewModel.InputItem.InputCommandState;

            foreach (Input input in icm.ToInputsReleasedArray())
            {
                InputSimulator.SimulateKeyUp(_inputResolver.Get(input, player));
            }

            foreach (Input input in icm.ToInputsPressedArray())
            {
                InputSimulator.SimulateKeyDown(_inputResolver.Get(input, player));
            }
        }
        /// <summary>
        /// Performs all presses and releases for a time line item.
        /// </summary>
        /// <param name="timeLineItem">
        /// </param>
        /// <param name="sendInputs">
        /// </param>
        /// <param name="player">
        /// </param>
        private void Action(TimeLineItemViewModel timeLineItem, bool sendInputs, int player = 1)
        {
            if (sendInputs)
            {
                InputCommandModel icm = timeLineItem.InputItemViewModel.InputItem.InputCommandState;
                foreach (Input input in icm.ToInputsReleasedArray())
                {
                    InputSimulator.SimulateKeyUp(_inputResolver.Get(input, player));
                }

                foreach (Input input in icm.ToInputsPressedArray())
                {
                    InputSimulator.SimulateKeyDown(_inputResolver.Get(input, player));
                }

                WaitForFrames(1);
            }
            else
            {
                // press event waits 1 frame, if send inputs is disabled wait frame is maintained
                WaitForFrames(1);
            }

            if (timeLineItem.InputItemViewModel.PlaySound)
            {
                Input[] inputs = timeLineItem.InputItemViewModel.InputItem.Inputs;
                if (inputs.Intersect(Directions).Count() == 0 && inputs.Intersect(Buttons).Count() == 0)
                {
                    Roadie.Instance.PlaySound(Roadie.WAIT_SOUND);
                }
                else
                {
                    if (inputs.Intersect(Buttons).Count() > 0)
                    {
                        Roadie.Instance.PlaySound(Roadie.PRESS_BUTTON_SOUND);
                    }

                    if (inputs.Intersect(Directions).Count() > 0)
                    {
                        Roadie.Instance.PlaySound(Roadie.PRESS_DIRECTION_SOUND);
                    }
                }
            }

            // After sound has played we wait the remainder of the frame duration
            if (timeLineItem.WaitFrames > 1)
            {
                WaitForFrames(timeLineItem.WaitFrames - 1);
            }
        }
Beispiel #6
0
        /// <summary>
        /// Handles the <see cref="AddTimeLineItemMessage"/>
        /// </summary>
        /// <param name="message">The add time line message.</param>
        public void Handle(AddTimeLineItemMessage message)
        {
            TimeLineItemViewModel timeLineItem = message.TimeLineItemViewModel;

            AddTimeLineItem(timeLineItem);
        }
Beispiel #7
0
        public void OldDeserialize(List <string> lines)
        {
            foreach (String line in lines)
            {
                List <Input> inputsOnHold = new List <Input>();
                String[]     tokens       = line.Split('#');

                InputItemModel item = new InputItemModel();
                int            numInputs;
                Input[]        inputs;

                string inputType = tokens[0].ToString().ToUpper();
                switch (inputType)
                {
                case "WAIT":
                    // Only hold inputs needed
                    item        = new InputItemModel();
                    item.Inputs = inputsOnHold.ToArray();
                    break;

                case "PRESS":

                    // Add hold inputs to given inputs
                    numInputs = int.Parse(tokens[2]);
                    inputs    = new Input[numInputs];
                    for (int i = 0; i < numInputs; i++)
                    {
                        inputs[i] = InputItemModel.ParseInput(tokens[3 + i]);
                    }

                    item        = new InputItemModel();
                    item.Inputs = inputsOnHold.Concat(inputs.ToList()).Distinct().ToArray();
                    break;

                case "HOLD":

                    numInputs = int.Parse(tokens[2]);
                    for (int i = 0; i < numInputs; i++)
                    {
                        inputsOnHold.Add(InputItemModel.ParseInput(tokens[3 + i]));
                    }

                    item        = new InputItemModel();
                    item.Inputs = inputsOnHold.Distinct().ToArray();
                    break;

                case "RELEASE":

                    // First remove released inputs from on hold list
                    numInputs = int.Parse(tokens[2]);
                    inputs    = new Input[numInputs];
                    for (int i = 0; i < numInputs; i++)
                    {
                        inputsOnHold.RemoveAll((x) => x == InputItemModel.ParseInput(tokens[3 + i]));
                    }

                    // Add remaining holds
                    item        = new InputItemModel();
                    item.Inputs = inputsOnHold.ToArray();
                    break;

                default:
                    throw new FormatException("Failed to deserialize TimelineItem, wrong string format: " + line);
                }

                item.PlaySound = Boolean.Parse(tokens[1]);
                item.Frames    = int.Parse(tokens[2].ToString());

                //Setup TimeLineItemViewModel
                InputItemViewModel result = new InputItemViewModel();
                result.InputItem = item;
                result.Index     = -1;

                TimeLineItemViewModel timeLineItemViewModel = new TimeLineItemViewModel(this);

                timeLineItemViewModel.PlaySound  = result.PlaySound;
                timeLineItemViewModel.WaitFrames = result.WaitFrames;
                timeLineItemViewModel.Direction  = result.Direction;

                timeLineItemViewModel.Light_Punch  = result.Light_Punch;
                timeLineItemViewModel.Medium_Punch = result.Medium_Punch;
                timeLineItemViewModel.Hard_Punch   = result.Hard_Punch;

                timeLineItemViewModel.Light_Kick  = result.Light_Kick;
                timeLineItemViewModel.Medium_Kick = result.Medium_Kick;
                timeLineItemViewModel.Hard_Kick   = result.Hard_Kick;

                TimeLineItems.Add(timeLineItemViewModel);
            }
        }
Beispiel #8
0
        /// <summary>
        /// Adds a time line item to the end of the time line.
        /// </summary>
        public void AddTimeLineItem()
        {
            TimeLineItemViewModel newTimeLineItemViewModel = new TimeLineItemViewModel(this);

            AddTimeLineItem(newTimeLineItemViewModel);
        }
 /// <summary>
 /// Add command to time line.
 /// </summary>
 /// <param name="moveViewModel">The move view model containing the moves.</param>
 public void AddCommandToTimeline(MoveViewModel moveViewModel, int player)
 {
     foreach (InputItemViewModel inputItemViewModel in moveViewModel.Command.Commands)
     {
         TimeLineItemViewModel timeLineItemViewModel = new TimeLineItemViewModel();
         timeLineItemViewModel.InputItemViewModel = inputItemViewModel;
         _events.Publish(new AddTimeLineItemMessage(timeLineItemViewModel, player));
     }
 }
Beispiel #10
0
        /// <summary>
        /// Performs all presses and releases for a time line item.
        /// </summary>
        /// <param name="playerOneTimeLine">
        /// </param>
        /// <param name="playerTwoTimeLine">
        /// </param>
        private void TwoPlayerAction(TimeLineViewModel playerOneTimeLine, TimeLineViewModel playerTwoTimeLine)
        {
            // These queues will contain the actual time line items and dequeue them as they are consumed by their frame counter
            Queue <TimeLineItemViewModel> playerOneQueue = new Queue <TimeLineItemViewModel>();
            Queue <TimeLineItemViewModel> playerTwoQueue = new Queue <TimeLineItemViewModel>();

            playerOneTimeLine.TimeLineItems.Apply(o => playerOneQueue.Enqueue(o));
            playerTwoTimeLine.TimeLineItems.Apply(o => playerTwoQueue.Enqueue(o));

            // QueueFrames is the overall frames in each time line.
            int playerOneQueueFrames = playerOneQueue.Sum <TimeLineItemViewModel>(t => t.WaitFrames);
            int playerTwoQueueFrames = playerTwoQueue.Sum <TimeLineItemViewModel>(t => t.WaitFrames);

            int longestQueueTime = Math.Max(playerOneQueueFrames, playerTwoQueueFrames);

            if (playerOneQueueFrames != playerTwoQueueFrames)
            {
                if (playerOneQueueFrames > playerTwoQueueFrames)
                {
                    playerTwoQueue.Enqueue(
                        new TimeLineItemViewModel()
                    {
                        WaitFrames = playerOneQueueFrames - playerTwoQueueFrames
                    });
                }
                else
                {
                    playerOneQueue.Enqueue(
                        new TimeLineItemViewModel()
                    {
                        WaitFrames = playerTwoQueueFrames - playerOneQueueFrames
                    });
                }
            }

            // The cache for the player individual time line items.
            TimeLineItemViewModel playerOneCurrentItem = playerOneQueue.Dequeue();
            TimeLineItemViewModel playerTwoCurrentItem = playerTwoQueue.Dequeue();

            // Highlight item in time line
            new Action(() => playerOneTimeLine.SelectedTimeLineItem = playerOneCurrentItem).BeginOnUIThread();
            new Action(() => playerTwoTimeLine.SelectedTimeLineItem = playerTwoCurrentItem).BeginOnUIThread();

            // This counts down each players frames for individual time line items.
            int playerOneCountdown = playerOneCurrentItem.WaitFrames;
            int playerTwoCountdown = playerTwoCurrentItem.WaitFrames;

            for (int x = 0; x < longestQueueTime; x++)
            {
                if (playerOneCountdown == 0)
                {
                    playerOneCurrentItem = playerOneQueue.Dequeue();
                    new Action(() => playerOneTimeLine.SelectedTimeLineItem = playerOneCurrentItem).BeginOnUIThread();
                    playerOneCountdown = playerOneCurrentItem.WaitFrames;
                }

                if (playerTwoCountdown == 0)
                {
                    playerTwoCurrentItem = playerTwoQueue.Dequeue();
                    new Action(() => playerTwoTimeLine.SelectedTimeLineItem = playerTwoCurrentItem).BeginOnUIThread();
                    playerTwoCountdown = playerTwoCurrentItem.WaitFrames;
                }

                if (playerOneTimeLine.SendInputs)
                {
                    SendPlayerInput(1, playerOneCurrentItem);
                }

                if (playerTwoTimeLine.SendInputs)
                {
                    SendPlayerInput(2, playerTwoCurrentItem);
                }

                if (playerOneCurrentItem.InputItemViewModel.PlaySound &&
                    playerOneCurrentItem.WaitFrames == playerOneCountdown)
                {
                    Input[] inputs = playerOneCurrentItem.InputItemViewModel.InputItem.Inputs;
                    if (!inputs.Intersect(Directions).Any() && !inputs.Intersect(Buttons).Any())
                    {
                        Roadie.Instance.PlaySound(Roadie.WAIT_SOUND);
                    }
                    else
                    {
                        if (inputs.Intersect(Buttons).Any())
                        {
                            Roadie.Instance.PlaySound(Roadie.PRESS_BUTTON_SOUND);
                        }

                        if (inputs.Intersect(Directions).Any())
                        {
                            Roadie.Instance.PlaySound(Roadie.PRESS_DIRECTION_SOUND);
                        }
                    }
                }

                playerOneCountdown--;
                playerTwoCountdown--;

                WaitForFrames(1);
            }
        }
 public AddTimeLineItemMessage(TimeLineItemViewModel timeLineItemViewModel)
 {
     TimeLineItemViewModel = timeLineItemViewModel;
 }
Beispiel #12
0
 public void AddCommandToTimeline(object moveViewModel)
 {
     foreach (InputItemViewModel inputItem in Command.Commands)
     {
         TimeLineItemViewModel timeLineItemViewModel = new TimeLineItemViewModel();
         timeLineItemViewModel.InputItemViewModel = inputItem;
         _events.Publish(new AddTimeLineItemMessage(timeLineItemViewModel));
     }
 }
 public AddTimeLineItemMessage(TimeLineItemViewModel timeLineItemViewModel, int player)
 {
     TimeLineItemViewModel = timeLineItemViewModel;
     Player = player;
 }