local function WipeDeleted() local to_delete = {} ForEachPreset("AnimMetadata", function(preset) local entity, anim = preset.group, preset.id if not (IsValidEntity(entity) and HasState(entity, anim)) then to_delete[#to_delete + 1] = preset end end) for _, preset in ipairs(to_delete) do preset:delete() end end DefineClass.AnimMoment = { __parents = { "PropertyObject" }, properties = { { id = "Type", name = "Type", editor = "choice", default = "Moment", items = ActionMomentNamesCombo }, { id = "Time", name = "Time (ms)", editor = "number", default = 0 }, { id = "FX", name = "FX", editor = "choice", default = false, items = ActionFXClassCombo }, { id = "Actor", name = "Actor", editor = "choice", default = false, items = ActorFXClassCombo }, { id = "AnimRevision", name = "Animation Revision", editor = "number", default = 0, read_only = true }, { id = "Reconfirm", editor = "buttons", default = false, no_edit = function(obj) return not (obj:GetWarning() or obj:GetError()) end, buttons = { { name = "Reconfirm", func = function(self, root, prop_id, ged) self.AnimRevision = GetAnimationMomentsEditorObject().AnimRevision ObjModified(self) ObjModified(ged:ResolveObj("AnimationMetadata")) ObjModified(ged:ResolveObj("Animations")) end, } } }, }, } function AnimMoment:GetEditorView() if GetParentTableOfKind(self, "AnimMetadata").SpeedModifier ~= 100 then local character = GetAnimationMomentsEditorObject() return T{Untranslated(" at