Skip to content

C# SDK Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

  • SDK: Renamed the single/multiple mapping strategies to variant/many in atlas.json.
  • Unity Editor: ArchmageEditorTools now binds CfgId drawers to the runtime atlas once it appears instead of loading a separate editor copy.
  • SDK: Added SampleWith and SampleIndexWith methods to WeightedPool<T>.
  • SDK: Added WeightedPool<T> for weighted random sampling, with WeightedPoolExtensions.
  • I18n: Annotated GetText out parameter with [NotNullWhen(true)].
  • SDK: Added MinMax<T> struct for representing a numeric range with Min and Max values.
  • SDK: Added MinMaxExtensions containing System.Random-based Sample overloads for all numeric types.
  • Unity: Added UnityMinMaxExtensions containing Sample overloads using Unity’s global Random generator.
  • Unity: Renamed RgbaExtensions to UnityRgbaExtensions and VecExtensions to UnityVecExtensions for consistency.
  • SDK: Made Tup1–7 mutable by restoring setters ({ get; }{ get; set; }) to all ItemX properties.
  • SDK: Removed IEquatable interface implementation from Tup1 through Tup7 classes.
  • SDK: Deleted custom Equals, GetHashCode, and equality operator overloads in Tup1 through Tup7.
  • SDK: Made Tup1–7 item properties read-only ({ get; set; }{ get; }).
  • SDK: Replaced custom Newtonsoft.Json converters for Vec2/3/4 with [JsonProperty] attributes.
  • Unity: Simplified UnityVector2/3/4JsonConverter to delegate serialization through Vec2/3/4, removing manual property-by-property read/write logic.
  • Logger: Implement ARCHMAGE_DISABLE_DEFAULT_LOGGER conditional compilation symbol to allow manual suppression of default console logging (automatically disabled in Unity environments).
  • SDK: Changed vector (Vec2/3/4) and Unity vector types to use object-based JSON serialization instead of arrays, ensuring null deserializes to zero vectors.
  • SDK: Added unmanaged constraint to vector types and optimized equality comparisons.
  • Unity: Vec2/3/4 extension methods to convert to UnityEngine.Vector2/3/4 and Vector2/3Int with zero-allocation support for 10 numeric types.
  • Docs: Documentation for Unity Inspector dropdowns and ArchmageEditorTools.cs examples.
  • Unity Editor: CfgIdDrawer<TValue> abstract base, IntCfgIdDrawer<TId, TValue>, StrCfgIdDrawer<TId> property drawers, and EasyDropdown<TValue> IMGUI dropdown for config ID selection.
  • AtlasLoadEvent.ItemsQueued stage to report total item count before loading begins.
  • WithOverrideFS: optional rootPath parameter to resolve override files relative to a subdirectory within a custom filesystem.
  • Unity: flattened SDK files from Runtime/Sdk/ to Runtime/.
  • Rgba struct with hex string parsing (#RRGGBB / #RRGGBBAA), equality, IZero support, and RgbaJsonConverter for Newtonsoft.Json; alpha is omitted from output when A == 0xFF.
  • Unity: RgbaExtensions.ToColor() maps Rgba channels [0, 255] to UnityEngine.Color [0, 1].
  • Renamed namespace and assembly from Shadop.Archmage to Shadop.Archmage.Sdk.
  • Docs: GitHub Package Manager git URL as primary Unity install method.
  • Renamed XRef.RawValue to XRef.CfgId.
  • Unity: Removed Samples~ directory; integration adapters are now first-class Runtime assemblies.
  • Config tables now include Id in JSON serialization output.
  • Added NullLogger that discards all log output.
  • Added UnityJsonSettingsFactory for JSON serialization of Unity types.
  • Refactored JSON settings handling: renamed CreateJsonSerializerSettings() to CreateJsonDumpSettings().
  • Fixed typo GetPreferredLanguge to GetPreferredLanguage in L10n.
  • Added IZero interface and ValueWrapperJsonConverter / ValueWrapperTypeConverter for better primitive wrapper support.
  • Added IFS support and MergeL10nFileAsync variant to MergeL10nFile in I18n.
  • New documentation site built with Astro and Starlight.
  • Improved L10n API: replaced Text(lang) with a Text property that uses GetPreferredLanguage.
  • Removed [Archmage] prefix from UnityAtlasLogger for cleaner logs.
  • Unity: Resources, StreamingAssets, and Addressables file system implementations
  • Unity: Integration samples and changelogUrl added to package.json
  • NuGet package publishing support: package metadata, Source Link, and XML documentation generation
  • Clarified override merge rules in documentation
  • Updated OpenUPM scoped registry configuration in installation docs
  • Initial release
  • Atlas loading system with sync/async support, layered overrides, and whitelist/blacklist filtering
  • JSON serialization via Newtonsoft.Json (com.unity.nuget.newtonsoft-json)
  • Duration type with nanosecond precision
  • Vec2, Vec3, Vec4 typed vectors
  • Tup1–Tup7 heterogeneous tuples
  • XRef type for cross-table references
  • I18n internationalization with language fallback
  • DateTimeOffset JSON converter