NScumm.Sky.Intro.CommandFlirt C# (CSharp) Method

CommandFlirt() private method

private CommandFlirt ( ushort data, int &i ) : bool
data ushort
i int
return bool
        private bool CommandFlirt(ushort[] data, ref int i)
        {
            _skyScreen.StartSequence(data[i++]);

            while ((data[i] != COMMANDEND) || _skyScreen.SequenceRunning())
            {
                while ((_skyScreen.SeqFramesLeft() < data[i]))
                {
                    i++;
                    var command = data[i++];
                    switch (command)
                    {
                        case IC_PREPARE_TEXT:
                            _skyText.DisplayText(data[i++], _textBuf, true, IntroTextWidth, 255);
                            break;
                        case IC_SHOW_TEXT:
                            using (var header = ServiceLocator.Platform.WriteStructure<DataFileHeader>(_textBuf, 0))
                            {
                                header.Object.s_x = data[i++];
                                header.Object.s_y = data[i++];
                            }
                            ShowTextBuf();
                            break;
                        case IC_REMOVE_TEXT:
                            RestoreScreen();
                            break;
                        case IC_MAKE_SOUND:
                            _skySound.PlaySound(data[0], data[1], 0);
                            i += 2;
                            break;
                        case IC_FX_VOLUME:
                            _skySound.PlaySound(1, data[i], 0);
                            i++;
                            break;
                        default:
                            throw new NotSupportedException(string.Format("Unknown FLIRT command {0:X2}", command));
                    }
                }

                if (!EscDelay(50))
                {
                    _skyScreen.StopSequence();
                    return false;
                }
            }

            i++; // move pointer over "COMMANDEND"
            return true;
        }