Skip to content

Releases: MadMartian/hydrazine-path-finding

TLAB Pressure Relief

20 Jan 04:38
Compare
Choose a tag to compare

This release focuses on improving engine performance by relieving memory allocation pressure on Thread-Local Allocation Buffers (See issue #6 for context). The engine made excessive use of temporaries that incur significant performance costs that the JIT cannot optimize. This release has eliminated the use of most temporaries. This pressure manifested most often while attempting to retrieve A* nodes from the cache, but also during initial voxel world bitmap cache generation.

The image below illustrates the relative pressure that Hydrazine Path Engine was putting on TLABs in the context of a game that uses it.
image

Hydrazine Path Engine types have not been visible as hotspot contenders in new allocation profiling results since this release.

As a general reminder, Hydrazine Path Engine is not thread-safe, any unsynchronized execution of the engine will result in undefined behaviour.

Breaking Changes:

  • com.extollit.linalg.immutable.Vec3i is no more, com.extollit.gaming.ai.path.model.Coords is used in lieu where applicable
  • Contract of com.extollit.gaming.ai.path.model.INodeCalculator has changed

Gimme Log4Shelter

30 Dec 07:31
Compare
Choose a tag to compare

Plug Log4Shell vulnerability by removing dependency upon Log4j and leveraging SLF4J instead.

State Persistence for Troubleshooting

29 Oct 01:38
Compare
Choose a tag to compare

Primary new feature in this release is an API for saving the state (deeply) of path-finding information for an entity. This is useful for transmitting fine-grained technical troubleshooting data between machines, refer to com.extollit.gaming.ai.path.persistence.Persistence to get started.

Other enhancements in this release:

  • New medium path-finding scheduling priority introduced (sits between low and high)
  • Hydrazine Path Engine is now available on Maven Central
  • New property intractible used to describe doors that typically cannot be opened by NPCs but may by others somewhat frequently.
  • BREAKING CHANGE: Heads-up! consumers of this API must now check for null in calls to HydrazinePathFinder.updatePathFor, a null return value means that no path was possible given the requested details (an empty path by comparison is for paths with the same source as destination)
  • Incomplete paths can be truncated, this aids developers that want to prematurely "cancel" paths.

Path Options Introduction

15 Mar 21:53
Compare
Choose a tag to compare

Introducing path options, control how to determine a destination that is reachable from an arbitrary selection, this makes it possible to choose a random target up in the air for ground-based entities and have the path-finder select the nearest reachable location below it as an alternative to the best effort algorithm.

Additionally, this release includes rudimentary support for handling path-finding for entities that are constrained by an external force (e.g. a pathing entity that is being hauled by some other entity via a rope or chain).

See the README for full details.

NOTE: This release introduces breaking changes:

  1. The initiatePathTo method variants now take a PathObject instance instead of a boolean for bestEffort, best effort is now defined in PathOptions via targetingStrategy(PathOptions.TargetingStrategy.bestEffort)
  2. The interface property bound() was introduced on com.extollit.gaming.ai.path.model.IPathingEntity, implement to return false to remain backward compatible.

February Finale

28 Feb 22:43
Compare
Choose a tag to compare

Some minor performance and edge-case improvements since the last release. The primary purpose of this release is to close off 1.5.x paving the way for 1.6.x.

Progressive A* Graph Retention

31 Dec 04:04
Compare
Choose a tag to compare

In this update more of the A* graph is retained as a pathing entity moves from point to point. This results in more accurate and timely path-finding behaviour particularly for entities with low scheduling priority. Additionally, handling of doors was fixed in this release for entities capable of traversing through closed doors.

Second Lazy Pigs Update

26 Nov 10:24
Compare
Choose a tag to compare
  • Fixed an NPE caused by manually truncating path objects
  • Pathing fault timeouts were being ignored

Lazy Pigs Update

25 Nov 12:04
1811942
Compare
Choose a tag to compare

There was a bug where an entity (e.g. a pig) would give-up path-finding if there was a rather long wall in the way instead of finding a path around it. This was analogous to a buffer under-run scenario, it was sometimes mitigated by choosing high path-finding scheduling priority. This update requires a minor API consumer modification: change references to PathObject concrete class with the IPath interface instead.

  • Engine no longer returns a done or null path if there is no new path data, it returns an interim object instead to indicate path-finding is still in-progress
  • Fault timeout calculation was wrong causing entities to invalidate their caches more often than necessary
  • Introduce a new higher scheduling priority extreme for special circumstances where near-perfect path-finding is required.
  • When an entity commits too many path-finding faults the path-finding operation is aborted.
  • Minor performance improvements

Airborne and Aqueous Path-finding - API Update

30 Aug 03:40
Compare
Choose a tag to compare

Slight change to a couple APIs in this release, renamed a couple contracts.

Airborne and Aqueous Path-finding

29 Aug 00:52
Compare
Choose a tag to compare

This update includes path-finding for entities with flying and/or swimming (aqueous) capabilities. Additionally it provides new APIs for adding a graph node filter and a path processor for fine-grained path-finding tuning.