using System; using Svelto.DataStructures; namespace Svelto.ECS { public static class ExclusiveGroupStructExtensions { public static ExclusiveBuildGroup RemoveTag(this ExclusiveGroupStruct group) where T : GroupTag { if (ExclusiveBuildGroupExtensions._removeTransitions.TryGetValue(@group, out var transitions)) { var type = new RefWrapper(typeof(T)); if (transitions.TryGetValue(type, out var result)) { return result; } } throw new ECSException("No remove transition found for type " .FastConcat(typeof(T).ToString()) .FastConcat(" in group ").FastConcat(@group.ToString()) ); } public static ExclusiveBuildGroup AddTag(this ExclusiveGroupStruct group) where T : GroupTag { if (ExclusiveBuildGroupExtensions._addTransitions.TryGetValue(group, out var transitions)) { var type = new RefWrapper(typeof(T)); if (transitions.TryGetValue(type, out var result)) { return result; } } throw new ECSException("No add transition found for type " .FastConcat(typeof(T).ToString()) .FastConcat(" in group ").FastConcat(@group.ToString()) ); } public static ExclusiveBuildGroup SwapTag(this ExclusiveGroupStruct group) where TTarget : GroupTag { var type = new RefWrapper(typeof(TTarget)); if (ExclusiveBuildGroupExtensions._swapTransitions.TryGetValue(@group, out var transitions)) { if (transitions.TryGetValue(type, out var result)) { return result; } } throw new ECSException("No swap transition found for type " .FastConcat(typeof(TTarget).ToString()) .FastConcat(" in group ").FastConcat(@group.ToString()) ); } } }