Skip to content

Releases: bryanedds/Nu

Final design changes for v2.0.0.0.

31 Dec 20:41
Compare
Choose a tag to compare

As remarked on in #162, the Group concept was renamed to Layer. This should mostly only cause static breakage, so that shouldn't be a big issue for end users.

With that change, I have concluded that Nu's design is solidified enough to finally release v2.0.0.0!

Additionally, there have been a lot of small optimizations to make the engine run as fast as possible given its pure functional implementation.

API Changes with New Naming Convention

28 Nov 22:06
Compare
Choose a tag to compare

So, for a while I've known I would need to change the 'opt' prefix naming convention to a suffix. This is because the prefix naming convention is ambiguous when you have a sequence that is either itself optional or contains optional items.

So I've gone through the code and made this change. Obviously, this creates a lot of breakage in the API, and may affect your serialized data if it uses properties with the previous naming convention.

Apologies if this is an inconvenience - the semantics of the previous convention were too ambiguous and broken to not address.

Improved Nu programming model and API simplification.

24 Oct 22:16
Compare
Choose a tag to compare

This release adds a few things to Nu -

Run-time checking to ensure unrelated simulants can't transform one another - EG, an Entity in Group A can't transform an Entity in Group B. This is a modularity constraint that will allow game code to scale more reliably. More detail here - #159

There were actually several API simplifications that also incurred some minor breaking changes. The first is the removal of the 'Tag' prefix from all property tags. This makes IFRP with Nu much more palatable. Another is an improvement in the simulant creation functions, which now have fewer parameters. Finally, the Assets module in the Constants module has been moved out directly to the Nu namespace, and the content of FileNames module has moved into the Assets module.

Also introduced were some hyper-optimized collections in Prime, and used in Nu for even better performance.

See below for the rest of the detail -

Removed 'Tag' prefix from PropertyTag members. BREAKING CHANGE 5953823
Added change function to property tag. 543067e
First pass of implement Tlist. 63b7b2d
Fixed parameter name typo. c0a9cda
Removed T/Ulist indexing operator. 626a208
Added proper index accessor to Ulist. 3e2b065
Removed allocation from T/U/Vmap lookup. a2c17ed
Fixed leftover allocation in Vmap.find. 0c204e0
Less allocation in Umap.find. 70b4262
Fixed for map and filter functions. 4d58e41
Add some generative tests for Ulist 42ca8aa
More fixes to optimized collections. 0cd7dbd
Switch gen tests from List to ResizeArray 552c521
Add parameter for checking backwards 9353ffb
Split up failing gen tests 4624403
Made Ulist unit test pass with Tlist bug fix. 3a99dbb
Created Prime.1.8.2.0.nupkg. 21e93b2
Replaced FSharpx Queues with Ulists. fd48c94
Added an important TODO. 9bdc8e3
Added sorting to T/Ulist. 52f9573
Updated nupkg with latest code before release. b1070a7
Made T/Ulist sort stable (like it should be!) f9ee566
Some code de-duplication. d594221
More optimizations for T/Ulist. 92092e2
Renamed dictC to dictPlus. BREAKING CHANGE e07de60
Added more functionality to T/Ulist. 0a47cb3
Updated Prime.1.8.2.0.nupkg. d78677c
Optimized T/Ulist.addMany. ef3eafb
Simplified world tests. 94fef9b
World test clean-up. ad47465
Simplified simulant creation interfaces. BREAKING CHANGE 37a8fd1
Updated Nu documentation to API changes. fae6547
Changed ifrp cyclic unit test to be more realistic. 9bcee6a
Gaia interface clean-up. 37ccdf1
Simplified splash / dissolve screen creation. BREAKING CHANGE 413fc2f
Made Stream.until operate on stream rather than event. ae3a468
Demeter-izing simulant updates. b3fbec7
Completed demeter implementation. 1bd316b
Removed NullParticipant design hack. 2af3a5e
Elided more event context code in Release mode. c9f7538
Improved code organization for world module. c8a20c8
Moved Assets module out of Constants. BREAKING CHANGE 624d65e
Created Prime.1.9.0.0.nupkg. 537890e

Additional clean up of the Stream interface, and more potentially-efficient publishing API, and more.

02 Oct 07:18
Compare
Choose a tag to compare

No terribly exciting changes this release, just some refinements to API, functionality, and completeness.

First, I had to make yet another change to the stream interface. Now instead of calling stream functions that can process the full event data blahPlus (EG, mapPlus), I call them blahEvent (EG, mapEvent).

Secondly, as a performance enhancement, I change the event publishing API to allow the user to specify that a given publish call shall not deal with subscriptions with a wildcard. This makes a lot of sense in certain circumstances where a wildcard in an event is not actually sensibly useful.

I also have a more complete render order sorting strategy where entities at the same depth level overlap. Now they are sorted by Y position if there depth levels are equal.

Here are the changes in detail -

Some event trace fixes. 9470eec
Yet another change to the Stream interface. BREAKING CHANGE b62df22
Cleaned up several superfluous open statements. 031571d
Made event publishing able to disallow wildcard usage. BREAKING CHANGE 9bd708a
Now rendering entities at the same depth in order of their Y-position. c629370
Made OverlayRouter take Specializations into consideration. BREAKING CHANGE 4c38042
Added Prime 1.8.1.0 nupkg. c63d1ca

Improvements to Stream and IFRP interfaces.

18 Sep 21:28
Compare
Choose a tag to compare

The IFRP interface was not very flexible, and it turned out to not be so due to the fact that the PropertyTag type is an InvariantFunctor (https://pursuit.purescript.org/packages/purescript-invariant/1.0.0/docs/Data.Functor.Invariant).

So now I no longer recommend composing IFRP expression with the PropertyTag interface directly, and to that end, I removed the -!> operator and changed the semantics of the -/>operator.

The biggest breaking change was in the Stream interface. Stream.map, for example, included the event as well as the world as parameters, and frankly, that's more information to deal with than the typical usage requires. So, I renamed Stream.map to Stream.mapPlus, and created a new Stream.map that only deals with the values directly.

Taken together, these changes make it much easier to compose IFRP expressions with property tags and streams directly.

For an example of the new usage pattern, check out the updated IFRP document - https://github.com/bryanedds/Nu/blob/master/Nu/Nu.Documentation/Iterative%20Functional%20Reactive%20Programming%20with%20the%20Nu%20Game%20Engine.pdf?raw=true

Cheers!

Added mounting for all gui entities.

14 Sep 16:12
Compare
Choose a tag to compare

...and made render order consistent with picking when two overlapping entities are at the same depth.

Fixed a bug where Visible property was having no effect.

Also, fixed and improved the MountFacet itself.

Large repository restructuring, and a couple of bug fixes.

13 Sep 20:30
Compare
Choose a tag to compare

From the previous release, you've heard that the repository had some major restructuring performed on it. This release includes that restructuring.

Otherwise, not much else but an important bug fix for group loading in Gaia scrubbing over the loaded group's name, and some fixes to some converters.

Final release before repository restructuring.

31 Aug 20:44
Compare
Choose a tag to compare

It's been a known issue for a while that Nu's repository structure is unnecessarily deep. Unfortunately, fixing this requires nearly every code file in the repository to be moved. So before undertaking this restructuring, I'm putting up this release with a few minor fixes.

If you have some PRs you wish to post, you should be able to post them against this release without any merge issues that you will come upon after said restructuring.

Cheers!

Bug fix for T/Umap containers.

21 Aug 08:16
Compare
Choose a tag to compare

A subtle bug that surfaced was fixed and prompted me to ship another engine release due to how widespread its containing type is used - again, thanks for writing the tests that surfaced this bug to @isaksky!

Other than that, nothing to report!

Cheers!

Significant performance boost, putting performance on par with imperative game engines.

20 Aug 18:02
Compare
Choose a tag to compare

In this release, we got some unit tests for Umap together thanks to @isaksky, which gave me enough confidence to try some experimental performance enhancements in the engine itself.

So I replaced all uses of Vmap with Umap, and the performance profile of Nu's pure functional mechanisms almost entirely fell off the profiling radar! Because of this, I think Nu's ability to theoretically compete in the arena of AAA game development looks promising!

Cheers!