Files
coa-ai-voiceover/AI_VoiceOver/Common/Enums.lua
T
andrew6180 1e9fa2aaca init
2023-04-16 00:31:14 -07:00

114 lines
2.5 KiB
Lua

setfenv(1, VoiceOver)
---@type table<string, Enum>
Enums = {}
---@enum SoundEvent
Enums.SoundEvent =
{
QuestAccept = 1,
QuestProgress = 2,
QuestComplete = 3,
QuestGreeting = 4,
Gossip = 5,
}
function Enums.SoundEvent:IsQuestEvent(event)
return event == self.QuestAccept or event == self.QuestProgress or event == self.QuestComplete
end
function Enums.SoundEvent:IsGossipEvent(event)
return event == self.Gossip or event == self.QuestGreeting
end
function Enums.SoundEvent:ToString(event)
if event == self.QuestAccept then
return "accept"
elseif event == self.QuestProgress then
return "progress"
elseif event == self.QuestComplete then
return "complete"
elseif event == self.QuestGreeting then
return "greeting"
elseif event == self.Gossip then
return "gossip"
else
return nil
end
end
---@enum GossipFrequency
Enums.GossipFrequency =
{
Always = 1,
OncePerQuestNPC = 2,
OncePerNPC = 3,
Never = 4,
}
---@enum SoundChannel
Enums.SoundChannel =
{
Master = 1,
Sound = 2,
Music = 3,
Ambience = 4,
Dialog = 5,
}
---@enum GUID
Enums.GUID =
{
Player = 2,
Item = 3,
Creature = 8,
Vehicle = 9,
GameObject = 11,
}
function Enums.GUID:IsCreature(type)
return type == self.Creature or type == self.Vehicle
end
function Enums.GUID:CanHaveID(type)
return type == self.Creature or type == self.Vehicle or type == self.GameObject
end
---@class Enum
local Enum = {}
Enum.__index = Enum
---@param value number Enum element value
---@return string|nil name Enum element name
function Enum:GetName(value)
for k, v in pairs(self) do
if v == value then
return k
end
end
end
---@return table<number, string>
function Enum:GetValueToNameMap()
local result = {}
for k, v in pairs(self) do
result[v] = k
end
return result
end
for name, enum in pairs(Enums) do
if type(enum) == "table" then
local metatable
for k, v in pairs(enum) do
-- Move all functions from the enum to its metatable (which also "inherits" from Enum)
if type(v) == "function" then
if not metatable then
metatable = setmetatable({}, { __index = Enum })
metatable.__index = metatable
end
metatable[k] = v
enum[k] = nil
end
end
Enums[name] = setmetatable(enum, metatable or Enum)
end
end