using Svelto.DataStructures; namespace Svelto.ECS.Experimental { public struct ECSResources { internal uint id; public static implicit operator T(ECSResources ecsString) { return ResourcesECSDB.FromECS(ecsString.id); } } static class ResourcesECSDB { internal static readonly FasterList _resources = new FasterList(); internal static uint ToECS(T resource) { _resources.Add(resource); return (uint)_resources.Count; } public static T FromECS(uint id) { if (id - 1 < _resources.Count) return _resources[(int) id - 1]; return default(T); } } public static class ResourceExtensions { public static void Set(ref this ECSResources resource, T newText) { if (resource.id != 0) ResourcesECSDB._resources[(int) resource.id] = newText; else resource.id = ResourcesECSDB.ToECS(newText); } public static void Set(ref this ECSString resource, string newText) { if (resource.id != 0) ResourcesECSDB._resources[(int) resource.id] = newText; else resource.id = ResourcesECSDB.ToECS(newText); } } }