SetNet.Mobs.Locomotion 1.2.0

dotnet add package SetNet.Mobs.Locomotion --version 1.2.0
                    
NuGet\Install-Package SetNet.Mobs.Locomotion -Version 1.2.0
                    
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="SetNet.Mobs.Locomotion" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SetNet.Mobs.Locomotion" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="SetNet.Mobs.Locomotion" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SetNet.Mobs.Locomotion --version 1.2.0
                    
#r "nuget: SetNet.Mobs.Locomotion, 1.2.0"
                    
#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.
#:package SetNet.Mobs.Locomotion@1.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SetNet.Mobs.Locomotion&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=SetNet.Mobs.Locomotion&version=1.2.0
                    
Install as a Cake Tool

<p align="center"> <img src="https://raw.githubusercontent.com/Povstalez/SetNet/master/assets/icon.png" alt="SetNet" width="96"> </p>

SetNet.Mobs.Locomotion

Make SetNet.Mobs move through the unified SetNet.Locomotion tick.

By default a mob steps its own position with its built-in path-follower. This opt-in bridge hands that stepping to a shared LocomotionSystem instead — so players and mobs move in the same tick, and both fire the system's Started hook, letting you replicate them the same way (send just the destination, L2-style). The mob AI, perception, threat, combat and replication are all unchanged; only where the position advances moves out.

Use

var loco = server.UseLocomotion(geo);                 // the one unified movement system

var mobs = server.UseMobs(new MobOptions
{
    GeoData = geo,
    // …perception seams…
    Mover = loco.AsMobMover(),                        // ← mobs now advance through Locomotion
});

// players create Movers on the same system, so one hook replicates everything:
loco.Started += m => SendMoveTo(m.Owner, m.Destination!.Value);   // m.Owner is the MobInstance for a mob

Leave MobOptions.Mover unset to keep the built-in mob movement — nothing else changes either way.

How it works

AsMobMover() wraps the LocomotionSystem as an IMobMover (the movement seam in SetNet.Mobs). Per mob it:

  • spawns a Mover at the mob's position with MobOptions.MoveSpeed, owned by the MobInstance;
  • on a new brain move-goal, calls mover.GoTo(goal) (which fires Started);
  • reads mover.Position back into mob.Position each AI tick;
  • disposes the Mover when the mob dies / despawns.

Notes

  • Two ticks, one purpose. Mobs still runs its AI tick (decisions); Locomotion runs the movement tick (stepping). The mob's position lags the mover by at most one tick — fine, and exactly how L2 separates AI from movement.
  • Unified replication. Because a mob is now a Mover with the mob as Owner, LocomotionSystem.Started gives you one place to send "move to point" for players and mobs alike.
  • Uses SetNet.GeoData.Vec3.

License

MIT

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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 was computed.  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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.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)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 95 8/5/2026