コード例 #1
0
ファイル: SfxChannel.cs プロジェクト: Inkwalker/PicoUnity
        public void Sfx(int n, int offset = 0, int length = 0)
        {
            if (n == -2)
            {
                Looping = false;
                return;
            }

            for (int i = 0; i < instruments.Length; i++)
            {
                instruments[i].Stop();
            }

            activeInstrument = -1;

            if (n == -1)
            {
                sfxPointer = -1;
                return;
            }

            IsPlaying = true;

            sfxPointer = MemoryModule.ADDR_SOUND + 68 * n;
            sfxOffset  = offset * 2;
            time       = 0;
            noteLength = mem.Peek(sfxPointer + 65) / 128f;
            loopStart  = mem.Peek(sfxPointer + 66);
            loopEnd    = mem.Peek(sfxPointer + 67);

            lastNote = note = AudioNote.Default;

            Looping = loopStart != loopEnd;

            int sfxLength = GetSfxLength(n);

            if (length == 0)
            {
                length = sfxLength;
            }

            if (offset + length > sfxLength)
            {
                this.sfxLength = sfxLength * 2;
            }
            else
            {
                this.sfxLength = (offset + length) * 2;
            }

            if (note.isCustom)
            {
                Debug.LogWarning("Sfx: custom instruments are not supported");
            }

            PullNode();
        }
コード例 #2
0
 public void OnPoke(int addr)
 {
     buffer[addr - Address] = mem.Peek(addr);
     dirty = true;
 }