Port of Recast Navigation into Delphi and Freepascal
Original Recast Source code location:
Requirements:
- For demos:
- https://github.com/SaschaWillems/dglOpenGL.git
- Kromster80 specific:
Source code version: Around 01 Nov 2014
Freepascal:
Compiled demo works - tested using Lazarus 4.99 and FPC 3.3.1 x86_64-win64-win32/win64

Porting guidelines:
- RecastNavigationDelphi is a straight clone of RecastNavigation with as little changes as possible, to allow to keep projects synced in the future.
- Any changes/improvements to the lib functionality should be first included into C++ master to avoid separation.
- RND follows RN structure very closely, except for GUI stuff, which is VCL for simplicity instead of imGUI RN solution.
- All file names are the same, but with an "RN_" prefix.
- Some units were split to avoid circular dependencies, they are called RN_UnitNameHelper.
Hints about the code:
- Multi-condition "for" loops and loops where iterator gets changed inside the loop, were converted to while/repeat loops. Loop code needs to be repeated before any "continue".
- Move method first two arguments (Src, Dst) need to be swapped in Delphi.
- Delphi needs to wrap overflowing manipulations with a {$O} directive to supress errors.
- Delphi needs manual disposal of objects created within record , as they dont have built-in destructor support in them.
- To simplify the pointer trickery, {$POINTERMATH ON} had to be enabled almost in every unit.
- Typed @ operator setting is great help, but sadly it does not work sometimes.
Common pitfalls during porting:
- Passing argument @SomePointer instead of SomePointer. Typed @ helps to catch those, but not always.
- Calling Move/FillChar methods without swapping arguments places.
- Writing for .. to .. do loop instead of for .. downto .. do in rare cases.
Todos:
- Fix plethora of memory leaks around the code.
- TempObstacles demo.
- Some parts are commented out, waiting to be ported.
- Sync with current state of the source code.