public void RecalculateCueTiming()
        {
            if (this.trackDefinition == null)
            {
                this.trackDefinition = TrackDataManager.instance.GetTrackDefinition(this.trackDataName);
            }
            this.musicActionList.Sort((Comparison <MusicAction>)((x, y) => x.beatNumber.CompareTo(y.beatNumber)));
            float num = 60f / this.trackDefinition.bpm;

            for (int index = 0; index < this.musicActionList.Count; ++index)
            {
                if (this.musicActionList[index] is MusicActionAudio)
                {
                    this.musicActionList[index].startTime = 0.0;
                }
                if (this.musicActionList[index] is MusicActionBPM)
                {
                    this.musicActionList[index].startTime = 0.0;
                }
                if (this.musicActionList[index] is MusicActionMoveCue)
                {
                    MusicActionMoveCue musicAction = (MusicActionMoveCue)this.musicActionList[index];
                    musicAction.startTime = (double)num * (double)musicAction.beatNumber + (double)this.trackDefinition.firstBeatStartDelay;
                }
            }
        }
        public void EditMoveAction(MoveChannel channel, float beatNumber, MoveType moveType)
        {
            App.logger.Debug("Editing " + (object)channel + "/" + (object)beatNumber + " = " + (object)moveType);
            MusicActionMoveCue musicActionMoveCue = (MusicActionMoveCue)null;
            int index1 = -1;

            for (int index2 = 0; index2 < this.musicActionList.Count; ++index2)
            {
                if (this.musicActionList[index2] is MusicActionMoveCue)
                {
                    MusicActionMoveCue musicAction = (MusicActionMoveCue)this.musicActionList[index2];
                    if ((double)musicAction.beatNumber == (double)beatNumber && musicAction.moveAction.moveChannel == channel)
                    {
                        index1             = index2;
                        musicActionMoveCue = musicAction;
                        break;
                    }
                    if (index1 == 0 && (double)this.musicActionList[index2].beatNumber > (double)beatNumber)
                    {
                        index1 = index2;
                    }
                }
            }
            if (moveType == MoveType.None)
            {
                if (index1 != -1)
                {
                    App.logger.Debug("Deleting entry at " + (object)index1);
                    this.musicActionList.RemoveAt(index1);
                }
            }
            else
            {
                if (musicActionMoveCue == null)
                {
                    musicActionMoveCue = new MusicActionMoveCue(new MoveAction(moveType, channel), beatNumber, 0.0);
                    if (index1 > 0)
                    {
                        this.musicActionList.Insert(index1, (MusicAction)musicActionMoveCue);
                    }
                    else
                    {
                        this.musicActionList.Add((MusicAction)musicActionMoveCue);
                    }
                }
                App.logger.Debug("modified cue");
                musicActionMoveCue.moveAction.moveType = moveType;
            }
            this.RecalculateCueTiming();
        }
        public List <MusicAction> ReadSerializedActionList(
            MusicActionListSerializable listWrapper)
        {
            List <MusicAction> musicActionList = new List <MusicAction>();

            if (listWrapper == null)
            {
                return(musicActionList);
            }
            for (int index = 0; index < listWrapper.actionList.Count; ++index)
            {
                switch (listWrapper.actionList[index].musicActionType)
                {
                case MusicActionType.MoveCue:
                    MusicActionMoveCue musicActionMoveCue = JsonConvert.DeserializeObject <MusicActionMoveCue>(listWrapper.actionList[index].musicActionJSON);
                    musicActionMoveCue.musicActiontype = MusicActionType.MoveCue;
                    musicActionList.Add((MusicAction)musicActionMoveCue);
                    break;

                case MusicActionType.Message:
                    MusicActionMessage musicActionMessage = JsonConvert.DeserializeObject <MusicActionMessage>(listWrapper.actionList[index].musicActionJSON);
                    musicActionMessage.musicActiontype = MusicActionType.Message;
                    musicActionList.Add((MusicAction)musicActionMessage);
                    break;

                case MusicActionType.BPM:
                    MusicActionBPM musicActionBpm = JsonConvert.DeserializeObject <MusicActionBPM>(listWrapper.actionList[index].musicActionJSON);
                    musicActionBpm.musicActiontype = MusicActionType.BPM;
                    musicActionList.Add((MusicAction)musicActionBpm);
                    break;

                case MusicActionType.Audio:
                    MusicActionAudio musicActionAudio = JsonConvert.DeserializeObject <MusicActionAudio>(listWrapper.actionList[index].musicActionJSON);
                    musicActionAudio.musicActiontype = MusicActionType.Audio;
                    musicActionList.Add((MusicAction)musicActionAudio);
                    break;
                }
            }
            return(musicActionList);
        }