TheSadRogue.Primitives 1.6.0-rc1

This is a prerelease version of TheSadRogue.Primitives.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package TheSadRogue.Primitives --version 1.6.0-rc1
NuGet\Install-Package TheSadRogue.Primitives -Version 1.6.0-rc1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TheSadRogue.Primitives" Version="1.6.0-rc1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TheSadRogue.Primitives --version 1.6.0-rc1
#r "nuget: TheSadRogue.Primitives, 1.6.0-rc1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install TheSadRogue.Primitives as a Cake Addin
#addin nuget:?package=TheSadRogue.Primitives&version=1.6.0-rc1&prerelease

// Install TheSadRogue.Primitives as a Cake Tool
#tool nuget:?package=TheSadRogue.Primitives&version=1.6.0-rc1&prerelease

A collection of primitive data structures for working with a 2-dimensional grid.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 3.1

    • No dependencies.
  • .NETStandard 2.1

    • No dependencies.
  • net5.0

    • No dependencies.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on TheSadRogue.Primitives:

Package Downloads

A library that emulates old-school console and command prompt style graphics. Targets .NET 6.


Roguelike/2D game utility library.


A collection of extension methods that allow TheSadRogue.Primitives types to easily interface with MonoGame's equivalents.


A collection of extension methods that allow TheSadRogue.Primitives types to easily interface with SFML's equivalents.

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on TheSadRogue.Primitives:

Repository Stars
A .NET ascii/ansi console engine written in C# for MonoGame and XNA. Create your own text roguelike (or other) games!
.NET Standard roguelike library in C#. Features many algorithms and data structures pertinent to roguelike/2D game developers, specifically designed to be minimally intrusive upon the developer's architecture.
Version Downloads Last updated
1.6.0-rc3-debug 1,804 6/18/2023
1.6.0-rc3 5,300 6/18/2023
1.6.0-rc2-debug 1,668 5/11/2023
1.6.0-rc2 1,155 5/11/2023
1.6.0-rc1-debug 135 3/18/2023
1.6.0-rc1 1,636 3/18/2023
1.5.1 1,275 1/31/2023
1.5.1-debug 122 1/31/2023
1.5.0 1,374 1/27/2023
1.5.0-debug 116 1/27/2023
1.4.1 2,037 10/8/2022
1.4.1-debug 136 10/8/2022
1.4.0 376 10/7/2022
1.4.0-debug 120 10/7/2022
1.3.2 468 9/25/2022
1.3.2-debug 149 9/25/2022
1.3.1 517 5/13/2022
1.3.1-debug 150 5/13/2022
1.3.0 3,116 2/12/2022
1.3.0-debug 139 2/12/2022
1.2.0 1,193 1/8/2022
1.2.0-debug 155 1/8/2022
1.1.1 10,762 9/30/2021
1.1.1-debug 172 9/30/2021
1.1.0 379 8/21/2021
1.1.0-debug 199 8/21/2021
1.0.0 11,805 3/23/2021
1.0.0-debug 258 3/23/2021
1.0.0-alpha9-debug 208 1/25/2021
1.0.0-alpha9 198 1/25/2021
1.0.0-alpha8-debug 1,436 12/11/2020
1.0.0-alpha8 921 12/11/2020
1.0.0-alpha7-debug 1,380 11/23/2020
1.0.0-alpha7 271 11/23/2020
1.0.0-alpha6-debug 295 10/25/2020
1.0.0-alpha6 822 10/25/2020
1.0.0-alpha5-debug 2,291 7/14/2020
1.0.0-alpha5 851 7/14/2020
1.0.0-alpha4-debug 1,787 6/28/2020
1.0.0-alpha4 1,009 6/28/2020
1.0.0-alpha3-debug 1,767 5/23/2020
1.0.0-alpha3 333 5/23/2020
1.0.0-alpha2-debug 1,600 4/18/2020
1.0.0-alpha2 311 4/18/2020
1.0.0-alpha1-debug 1,822 12/8/2019
1.0.0-alpha1 990 12/8/2019

- Added spatial maps, which are an efficient way to represent items on a grid, particularly when the items are sparse relative to the number of cells.
     - Added interfaces for common concepts found in data structures/objects that reside on 2D grids
         - IHasID: A structure that has a unique or pseudo-unique integer identifier
         - IHasLayer: A structure that has a z-index (aka layer) on which it resides
         - IPositionable: A structure that has a 2D position, and fires events when that position changes.
     - Added `LayerMasker` which is a helper class for creating 32-bit integer-based masks of specific z-indices/rendering layers.
     - Added more custom iterators, and changed iterator paradigm in library to allow for increased performance
         - Changes apply to classes/functions including: Rectangle.Positions(), Rectangle.PerimeterPositions(), all line and shape algorithms, LayerMasker functions, BisectionResult, and Area
         - Custom enumerables now implement `IEnumerator` and `IEnumerable` directly; therefore their `ToEnumerable()` function is obsolete.  You should simply remove the call to that function since the same behavior is obtained without it.
         - This also applies to Area; FastEnumerator()` is now deprecated as its behavior is achieved by default when iterating over IReadOnlyArea implementations.
         - Iteration over a value known to be of type `Area` is now faster
     - Added a ListEnumerator type which is functionally identical to C#'s built-in enumerator for lists, but also implements IEnumerable so supports being returned from functions like the primitives library typically does for functions such as Rectangle.Positions()
     - Added `Box` shape algorithm
     - Modified default hashing algorithm for Point to one with better performance
         - New hashing algorithm collides less and remains viable over a very large range of points; see Point.GetHashCode() documentation for details
     - Optimized spatial maps compared to the GoRogue implementation
         - The result of MultiSpatialMap.GetItemsAt is now significantly faster to iterate over if the value is of known type MultiSpatialMap
     - Added auto-syncing variants of spatial maps
         - Anything implementing IPositionable can be used with the auto-syncing variants
         - With these variants, if you change the Position field of an object within the spatial map, OR if you call a movement function on the spatial map, both the spatial map and the Position field update and remain in sync
     - Modified SpatialMap API slightly
         - Move functions (and variants) now tolerate the current position and target position being the same without failing
     - Fixed bugs in LayeredSpatialMap
         - LayeredSpatialMap.TryMoveAll guarantees that objects aren't moved at all if one or more can't be moved
         - LayeredSpatialMap.GetLayersInMask now returns the correct layers