public static void VIB_init(BinaryReader reader) { try { VIB_DEF value = default(VIB_DEF); value.magic = (UInt16)reader.ReadInt16(); value.fps = (UInt16)reader.ReadInt16(); value.trackCount = (UInt16)reader.ReadInt16(); value.trackOffset = (UInt16)reader.ReadInt16(); Int32 trackCount = (Int32)value.trackCount; VIB_TRACK_DEF[] array = new VIB_TRACK_DEF[trackCount]; for (Int32 i = 0; i < trackCount; i++) { reader.BaseStream.Seek((Int64)((Int32)value.trackOffset + i * 12), SeekOrigin.Begin); array[i] = default(VIB_TRACK_DEF); array[i].sampleFlags = new UInt16[2]; array[i].sampleCount = new UInt16[2]; array[i].sampleOffset = new UInt16[2]; array[i].sampleFlags[0] = (UInt16)reader.ReadInt16(); array[i].sampleFlags[1] = (UInt16)reader.ReadInt16(); array[i].sampleCount[0] = (UInt16)reader.ReadInt16(); array[i].sampleCount[1] = (UInt16)reader.ReadInt16(); array[i].sampleOffset[0] = (UInt16)reader.ReadInt16(); array[i].sampleOffset[1] = (UInt16)reader.ReadInt16(); } Byte[][][] array2 = new Byte[trackCount][][]; for (Int32 j = 0; j < trackCount; j++) { VIB_TRACK_DEF vib_TRACK_DEF = array[j]; array2[j] = new Byte[2][]; Int32 count = (Int32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_LO]; Int32 num = (Int32)vib_TRACK_DEF.sampleOffset[(Int32)vib.VIB_SAMPLE_LO]; reader.BaseStream.Seek((Int64)num, SeekOrigin.Begin); array2[j][0] = reader.ReadBytes(count); count = (Int32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_HI]; num = (Int32)vib_TRACK_DEF.sampleOffset[(Int32)vib.VIB_SAMPLE_HI]; reader.BaseStream.Seek((Int64)num, SeekOrigin.Begin); array2[j][1] = reader.ReadBytes(count); } vib.Parms.vibPtr = new VIB_DEF?(value); vib.Parms.tracks = array; vib.Parms.frameData = array2; } catch (Exception message) { global::Debug.LogError(message); } finally { reader.Close(); } vib.Parms.statusFlags = (UInt16)vib.VIB_STATUS_INIT; vib.Parms.frameRate = 256; vib.Parms.frameNdx = 0; vib.Parms.frameStart = 0; UInt32 num2 = vib.VIB_computeFrameCount(); vib.Parms.frameStop = (Int16)(num2 - 1u); vib.VIB_initSamples(); }
public static void VIB_setTrackToModulate(UInt32 trackNdx, UInt32 sampleNdx, Boolean isActive) { VIB_TRACK_DEF vib_TRACK_DEF = vib.VIB_TRACK_PTR(vib.Parms.vibPtr.Value, (Int32)trackNdx, (BinaryReader)null); if (isActive) { UInt16[] sampleFlags = vib_TRACK_DEF.sampleFlags; UIntPtr uintPtr = (UIntPtr)sampleNdx; sampleFlags[(Int32)uintPtr] = (UInt16)(sampleFlags[(Int32)uintPtr] | (UInt16)vib.VIB_SAMPLE_ACTIVE); } else { UInt16[] sampleFlags2 = vib_TRACK_DEF.sampleFlags; UIntPtr uintPtr2 = (UIntPtr)sampleNdx; sampleFlags2[(Int32)uintPtr2] = (UInt16)(sampleFlags2[(Int32)uintPtr2] & (UInt16)(~(UInt16)vib.VIB_SAMPLE_ACTIVE)); } }
private static UInt32 VIB_computeFrameCount() { UInt32 num = 0u; for (Int32 i = 0; i < (Int32)vib.Parms.vibPtr.Value.trackCount; i++) { VIB_TRACK_DEF vib_TRACK_DEF = vib.Parms.tracks[i]; if ((UInt32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_LO] > num) { num = (UInt32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_LO]; } if ((UInt32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_HI] > num) { num = (UInt32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_HI]; } } return(num); }
public static void VIB_service() { if ((vib.Parms.statusFlags & (UInt16)vib.VIB_STATUS_INIT) == 0) { return; } if (PersistenSingleton <UIManager> .Instance.IsPause) { return; } VIB_DEF?vibPtr = vib.Parms.vibPtr; if (vibPtr == null) { return; } if ((vib.Parms.statusFlags & (UInt16)vib.VIB_STATUS_ACTIVE) != 0 && (vib.Parms.statusFlags & (UInt16)(vib.VIB_STATUS_LOOP | vib.VIB_STATUS_PLAY_SET)) != 0) { VIB_DEF value = vib.Parms.vibPtr.Value; Int32 num = 0; Int32 num2 = 0; Int32 num3 = vib.Parms.frameNdx >> 8; for (Int32 i = 0; i < (Int32)value.trackCount; i++) { VIB_TRACK_DEF vib_TRACK_DEF = vib.Parms.tracks[i]; if ((vib_TRACK_DEF.sampleFlags[(Int32)vib.VIB_SAMPLE_LO] & (UInt16)vib.VIB_SAMPLE_ACTIVE) != 0 && num3 < (Int32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_LO]) { num += (Int32)vib.Parms.frameData[i][(Int32)vib.VIB_SAMPLE_LO][num3]; } if ((vib_TRACK_DEF.sampleFlags[(Int32)vib.VIB_SAMPLE_HI] & (UInt16)vib.VIB_SAMPLE_ACTIVE) != 0 && num3 < (Int32)vib_TRACK_DEF.sampleCount[(Int32)vib.VIB_SAMPLE_HI]) { num2 += (Int32)vib.Parms.frameData[i][(Int32)vib.VIB_SAMPLE_HI][num3]; } } if (num > 255) { num = 255; } if (num2 > 127) { num2 = 1; } if ((FF9StateSystem.Settings.cfg.vibe == (UInt64)FF9CFG.FF9CFG_VIBE_ON || PersistenSingleton <FF9StateSystem> .Instance.mode == 5) && (num > 0 || num2 > 0)) { vib.VIB_actuatorSet(0, (Single)num2 / 255f, (Single)num / 255f); if (PersistenSingleton <FF9StateSystem> .Instance.mode == 2) { vib.VIB_actuatorSet(1, (Single)num2 / 255f, (Single)num / 255f); } } vib.Parms.frameNdx = vib.Parms.frameNdx + (Int32)vib.Parms.frameRate; if (vib.Parms.frameNdx >> 8 > (Int32)vib.Parms.frameStop) { if ((vib.Parms.statusFlags & (UInt16)vib.VIB_STATUS_WRAP) != 0) { vib.Parms.frameNdx = (Int32)vib.Parms.frameStop << 8; vib.VIB_setFrameRate((Int16)(-vib.Parms.frameRate)); } else { vib.Parms.frameNdx = (Int32)vib.Parms.frameStart << 8; } vib.Parms.statusFlags = (UInt16)(vib.Parms.statusFlags & (UInt16)(~(UInt16)vib.VIB_STATUS_PLAY_SET)); if ((vib.Parms.statusFlags & (UInt16)vib.VIB_STATUS_LOOP) == 0) { vib.VIB_actuatorReset(0); vib.VIB_actuatorReset(1); vib.Parms.statusFlags = (UInt16)(vib.Parms.statusFlags & (UInt16)(~(UInt16)vib.VIB_STATUS_ACTIVE)); } } if (vib.Parms.frameNdx >> 8 < (Int32)vib.Parms.frameStart) { if ((vib.Parms.statusFlags & (UInt16)vib.VIB_STATUS_WRAP) != 0) { vib.Parms.frameNdx = (Int32)vib.Parms.frameStart << 8; vib.VIB_setFrameRate((Int16)(-vib.Parms.frameRate)); } else { vib.Parms.frameNdx = (Int32)vib.Parms.frameStop << 8; } vib.Parms.statusFlags = (UInt16)(vib.Parms.statusFlags & (UInt16)(~(UInt16)vib.VIB_STATUS_PLAY_SET)); if ((vib.Parms.statusFlags & (UInt16)vib.VIB_STATUS_LOOP) == 0) { vib.VIB_actuatorReset(0); vib.VIB_actuatorReset(1); vib.Parms.statusFlags = (UInt16)(vib.Parms.statusFlags & (UInt16)(~(UInt16)vib.VIB_STATUS_ACTIVE)); } } } }