update audio + switch to wwise
This commit is contained in:
@@ -0,0 +1,424 @@
|
||||
/*******************************************************************************
|
||||
The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
|
||||
Technology released in source code form as part of the game integration package.
|
||||
The content of this file may not be used without valid licenses to the
|
||||
AUDIOKINETIC Wwise Technology.
|
||||
Note that the use of the game engine is subject to the Unity(R) Terms of
|
||||
Service at https://unity3d.com/legal/terms-of-service
|
||||
|
||||
License Usage
|
||||
|
||||
Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
|
||||
this file in accordance with the end user license agreement provided with the
|
||||
software or, alternatively, in accordance with the terms contained
|
||||
in a written agreement between you and Audiokinetic Inc.
|
||||
Copyright (c) 2024 Audiokinetic Inc.
|
||||
*******************************************************************************/
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
public class AkWwiseProjectData : UnityEngine.ScriptableObject
|
||||
{
|
||||
public System.Collections.Generic.List<AkInfoWorkUnit> AcousticTextureWwu =
|
||||
new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<AkInfoWorkUnit> AuxBusWwu =
|
||||
new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<AkInfoWorkUnit> BankWwu =
|
||||
new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<EventWorkUnit> EventWwu =
|
||||
new System.Collections.Generic.List<EventWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<AkInfoWorkUnit> RtpcWwu =
|
||||
new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<GroupValWorkUnit> StateWwu =
|
||||
new System.Collections.Generic.List<GroupValWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<GroupValWorkUnit> SwitchWwu =
|
||||
new System.Collections.Generic.List<GroupValWorkUnit>();
|
||||
|
||||
public System.Collections.Generic.List<AkInfoWorkUnit> TriggerWwu =
|
||||
new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
|
||||
////Contains the int id of all items that are expanded in the Wwise picker
|
||||
public System.Collections.Generic.List<int> ExpandedFileSystemItemIds = new System.Collections.Generic.List<int>();
|
||||
public System.Collections.Generic.List<int> ExpandedWaapiItemIds = new System.Collections.Generic.List<int>();
|
||||
|
||||
public bool AutoSyncSelection;
|
||||
public bool autoPopulateEnabled = true;
|
||||
public AkWwiseProjectInfo.DataSourceType currentDataSource;
|
||||
|
||||
public string CurrentPluginConfig;
|
||||
|
||||
public System.Collections.ArrayList GetWwuListByString(string in_wwuType)
|
||||
{
|
||||
if (string.Equals(in_wwuType, "Events", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(EventWwu);
|
||||
if (string.Equals(in_wwuType, "States", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(StateWwu);
|
||||
if (string.Equals(in_wwuType, "Switches", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(SwitchWwu);
|
||||
if (string.Equals(in_wwuType, "Master-Mixer Hierarchy", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(AuxBusWwu);
|
||||
if (string.Equals(in_wwuType, "SoundBanks", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(BankWwu);
|
||||
if (string.Equals(in_wwuType, "Game Parameters", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(RtpcWwu);
|
||||
if (string.Equals(in_wwuType, "Triggers", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(TriggerWwu);
|
||||
if (string.Equals(in_wwuType, "Virtual Acoustics", System.StringComparison.OrdinalIgnoreCase))
|
||||
return System.Collections.ArrayList.Adapter(AcousticTextureWwu);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public float GetEventMaxAttenuation(uint eventID)
|
||||
{
|
||||
var Event = GetEventInfo(eventID);
|
||||
return Event != null ? Event.maxAttenuation : 0.0f;
|
||||
}
|
||||
|
||||
public Event GetEventInfo(uint eventID)
|
||||
{
|
||||
foreach (var wwu in EventWwu)
|
||||
{
|
||||
foreach (var entry in wwu.List)
|
||||
{
|
||||
if (entry.Id == eventID)
|
||||
{
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
EventWwu = new System.Collections.Generic.List<EventWorkUnit>();
|
||||
StateWwu = new System.Collections.Generic.List<GroupValWorkUnit>();
|
||||
SwitchWwu = new System.Collections.Generic.List<GroupValWorkUnit>();
|
||||
BankWwu = new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
AuxBusWwu = new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
RtpcWwu = new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
TriggerWwu = new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
AcousticTextureWwu = new System.Collections.Generic.List<AkInfoWorkUnit>();
|
||||
}
|
||||
|
||||
public void Migrate()
|
||||
{
|
||||
foreach (var wwu in EventWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in StateWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in SwitchWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in BankWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in AuxBusWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in RtpcWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in TriggerWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
foreach (var wwu in AcousticTextureWwu)
|
||||
wwu.Migrate();
|
||||
|
||||
UnityEditor.EditorUtility.SetDirty(this);
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class ByteArrayWrapper
|
||||
{
|
||||
public byte[] bytes;
|
||||
|
||||
public ByteArrayWrapper(byte[] byteArray)
|
||||
{
|
||||
|
||||
bytes = byteArray;
|
||||
}
|
||||
|
||||
public static implicit operator ByteArrayWrapper(System.Guid guid) => new ByteArrayWrapper(guid.ToByteArray());
|
||||
|
||||
public static implicit operator System.Guid(ByteArrayWrapper bytes) => new System.Guid(bytes.bytes);
|
||||
}
|
||||
|
||||
private static System.Guid GetGuid(byte[] bytes)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new System.Guid(bytes);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return System.Guid.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class AkBaseInformation : System.IComparable
|
||||
{
|
||||
[UnityEngine.SerializeField]
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("Name")]
|
||||
private string name;
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return name; }
|
||||
|
||||
set
|
||||
{
|
||||
name = value;
|
||||
id = AkUtilities.ShortIDGenerator.Compute(value);
|
||||
}
|
||||
}
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("Guid")]
|
||||
private byte[] guid = null;
|
||||
|
||||
public System.Guid Guid
|
||||
{
|
||||
get { return GetGuid(guid); }
|
||||
set { guid = value.ToByteArray(); }
|
||||
}
|
||||
|
||||
[UnityEngine.SerializeField]
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("ID")]
|
||||
private uint id;
|
||||
|
||||
public uint Id
|
||||
{
|
||||
get { return id; }
|
||||
}
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
public System.Collections.Generic.List<PathElement> PathAndIcons = new System.Collections.Generic.List<PathElement>();
|
||||
|
||||
int System.IComparable.CompareTo(object other)
|
||||
{
|
||||
if (other == null)
|
||||
return 1;
|
||||
|
||||
var otherAkInformation = other as AkBaseInformation;
|
||||
if (otherAkInformation == null)
|
||||
throw new System.ArgumentException("Object is not of type AkBaseInformation");
|
||||
|
||||
return Name.CompareTo(otherAkInformation.Name);
|
||||
}
|
||||
|
||||
private class _CompareByGuid : System.Collections.Generic.IComparer<AkBaseInformation>
|
||||
{
|
||||
int System.Collections.Generic.IComparer<AkBaseInformation>.Compare(AkBaseInformation a, AkBaseInformation b)
|
||||
{
|
||||
if (a == null)
|
||||
return b == null ? 0 : -1;
|
||||
|
||||
return a.Guid.CompareTo(b.Guid);
|
||||
}
|
||||
}
|
||||
|
||||
public static System.Collections.Generic.IComparer<AkBaseInformation> CompareByGuid = new _CompareByGuid();
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class AkInformation : AkBaseInformation
|
||||
{
|
||||
public string Path;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class GroupValue : AkInformation
|
||||
{
|
||||
public System.Collections.Generic.List<AkBaseInformation> values =
|
||||
new System.Collections.Generic.List<AkBaseInformation>();
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
private System.Collections.Generic.List<ByteArrayWrapper> ValueGuids =
|
||||
new System.Collections.Generic.List<ByteArrayWrapper>();
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
private System.Collections.Generic.List<PathElement> ValueIcons = new System.Collections.Generic.List<PathElement>();
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("values")]
|
||||
private System.Collections.Generic.List<string> valuesInternal = new System.Collections.Generic.List<string>();
|
||||
|
||||
public void Migrate()
|
||||
{
|
||||
var count = ValueGuids.Count;
|
||||
if (count < 1 || count != ValueIcons.Count || count != valuesInternal.Count)
|
||||
return;
|
||||
|
||||
values.Clear();
|
||||
for (var i = 0; i < count; ++i)
|
||||
{
|
||||
var value = new AkBaseInformation
|
||||
{
|
||||
Name = valuesInternal[i],
|
||||
Guid = GetGuid(ValueGuids[i].bytes)
|
||||
};
|
||||
value.PathAndIcons.Add(ValueIcons[i]);
|
||||
values.Add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class Event : AkInformation
|
||||
{
|
||||
public float maxAttenuation;
|
||||
public float maxDuration = -1;
|
||||
public float minDuration = -1;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class WorkUnit : System.IComparable
|
||||
{
|
||||
public string PhysicalPath;
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
public System.Collections.Generic.List<PathElement> PathAndIcons = new System.Collections.Generic.List<PathElement>();
|
||||
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("ParentPhysicalPath")]
|
||||
public string ParentPath;
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
private byte[] guid = null;
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
[UnityEngine.Serialization.FormerlySerializedAs("Guid")]
|
||||
private string GuidInternal = string.Empty;
|
||||
|
||||
public System.Guid Guid
|
||||
{
|
||||
get { return GetGuid(guid); }
|
||||
set { guid = value.ToByteArray(); }
|
||||
}
|
||||
|
||||
[UnityEngine.HideInInspector]
|
||||
[UnityEngine.SerializeField]
|
||||
private long m_lastTime;
|
||||
|
||||
public System.DateTime LastTime
|
||||
{
|
||||
get { return m_lastTime == 0 ? System.DateTime.MinValue : System.DateTime.FromBinary(m_lastTime); }
|
||||
set { m_lastTime = value.ToBinary(); }
|
||||
}
|
||||
|
||||
public virtual void Migrate()
|
||||
{
|
||||
try
|
||||
{
|
||||
Guid = new System.Guid(GuidInternal);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Guid = System.Guid.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
int System.IComparable.CompareTo(object other)
|
||||
{
|
||||
if (other == null)
|
||||
return 1;
|
||||
|
||||
var otherWwu = other as WorkUnit;
|
||||
if (otherWwu == null)
|
||||
throw new System.ArgumentException("Object is not a WorkUnit");
|
||||
|
||||
return PhysicalPath.CompareTo(otherWwu.PhysicalPath);
|
||||
}
|
||||
|
||||
|
||||
public virtual System.Collections.ArrayList GetChildrenArrayList() { return null; }
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class GenericWorkUnit<T> : WorkUnit where T : AkInformation
|
||||
{
|
||||
public System.Collections.Generic.List<T> List = new System.Collections.Generic.List<T>();
|
||||
|
||||
public T Find(string name)
|
||||
{
|
||||
foreach (var item in List)
|
||||
if (item.Name == name)
|
||||
return item;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override System.Collections.ArrayList GetChildrenArrayList()
|
||||
{
|
||||
return System.Collections.ArrayList.Adapter(List);
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class AkInfoWorkUnit : GenericWorkUnit<AkInformation> { }
|
||||
|
||||
[System.Serializable]
|
||||
public class EventWorkUnit : GenericWorkUnit<Event> { }
|
||||
|
||||
[System.Serializable]
|
||||
public class GroupValWorkUnit : GenericWorkUnit<GroupValue>
|
||||
{
|
||||
public override void Migrate()
|
||||
{
|
||||
base.Migrate();
|
||||
|
||||
foreach (var item in List)
|
||||
item.Migrate();
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class PathElement
|
||||
{
|
||||
public string ElementName;
|
||||
public WwiseObjectType ObjectType;
|
||||
|
||||
[UnityEngine.SerializeField]
|
||||
[UnityEngine.HideInInspector]
|
||||
private byte[] guid = null;
|
||||
|
||||
public System.Guid ObjectGuid
|
||||
{
|
||||
get { return GetGuid(guid); }
|
||||
set { guid = value.ToByteArray(); }
|
||||
}
|
||||
|
||||
public PathElement(string Name, WwiseObjectType objType, System.Guid guid)
|
||||
{
|
||||
ElementName = Name;
|
||||
ObjectType = objType;
|
||||
ObjectGuid = guid;
|
||||
}
|
||||
|
||||
public static string GetProjectPathString(System.Collections.Generic.List<PathElement> pathElements, int index)
|
||||
{
|
||||
string path = "";
|
||||
for (int i = 0; i<=index && i < pathElements.Count; i++)
|
||||
{
|
||||
path += $"/{pathElements[i].ElementName}";
|
||||
|
||||
}
|
||||
return path;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user