static string GenerateCustomPlacement(PlacementAttribute placement) { var properties = placement.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly) .Where(x => x.CanRead); var setters = properties.Select(x => new { Property = x, Setter = GenerateAttributePropertySetter(x, placement) }) .Where(x => x.Setter != null) .Select(x => $"{char.ToLowerInvariant(x.Property.Name[0]) + x.Property.Name.Substring(1)}:{x.Setter}") .ToList(); return("global::" + placement.GetType().FullName + $"({string.Join(",", setters)})"); }
static string GetActorPlacement(PlacementAttribute placement) { switch (placement) { case RandomPlacementAttribute rand: return(typeof(RandomPlacementAttribute).Name); case PreferLocalPlacementAttribute local: return(typeof(PreferLocalPlacementAttribute).Name); case ActivationCountBasedPlacementAttribute count: return(typeof(ActivationCountBasedPlacementAttribute).Name); case HashBasedPlacementAttribute hash: return(typeof(HashBasedPlacementAttribute).Name); default: return(GenerateCustomPlacement(placement)); } }