/// <summary> /// Finds a Wwise object by ID number and then passes it to an IWwiseObjectVisitor. /// </summary> /// <param name="id">The ID number of the object to find.</param> /// <param name="visitor">The IWwiseObjectVisitor to pass the object to if it is found.</param> /// <returns>true if the object was found and a method was called on the visitor.</returns> public bool Dispatch(uint id, IWwiseObjectVisitor visitor) { IWwiseObject obj = Find(id); if (obj != null) { obj.Accept(visitor); return(true); } return(false); }
/// <summary> /// Registers a bank-less object (e.g. one from soundstream.pck) with the scanner. /// </summary> /// <param name="obj">The object to register.</param> public void RegisterGlobalObject(IWwiseObject obj) { _globalObjects.Add(obj); }
/// <summary> /// Adds an object to the collection so that it can be referenced by its ID number. /// </summary> /// <param name="obj">The IWwiseObject to store.</param> public void Add(IWwiseObject obj) { _objects[obj.ID] = obj; }
private void ReadObjects(EndianReader reader) { int numObjects = reader.ReadInt32(); long offset = reader.Position; for (int i = 0; i < numObjects; i++) { // Read the object's header ObjectType type = (ObjectType)reader.ReadSByte(); int size = reader.ReadInt32(); offset += 5; // Read the object's ID uint id = reader.ReadUInt32(); // Read the rest of the object based upon its type IWwiseObject obj = null; switch (type) { case ObjectType.Voice: obj = new SoundBankVoice(reader, id); break; case ObjectType.Action: obj = new SoundBankAction(reader, id); break; case ObjectType.Event: SoundBankEvent ev = new SoundBankEvent(reader, id); _eventsById[ev.ID] = ev; obj = ev; break; case ObjectType.SequenceContainer: obj = new SoundBankSequenceContainer(reader, id); break; case ObjectType.SwitchContainer: obj = new SoundBankSwitchContainer(reader, id); break; case ObjectType.ActorMixer: obj = new SoundBankActorMixer(reader, id); break; case ObjectType.MusicPlaylistContainer: obj = new SoundBankMusicPlaylist(reader, id); break; case ObjectType.MusicSegment: obj = new SoundBankMusicSegment(reader, id); break; case ObjectType.MusicTrack: obj = new SoundBankMusicTrack(reader, id); break; case ObjectType.MusicSwitchContainer: obj = new SoundBankMusicSwitchContainer(reader, id); break; } // Register the object if something was read if (obj != null) { _objects.Add(obj); } // Skip to the next object offset += size; reader.SeekTo(offset); } }