feat: Changes Spawner HomeRange to SpawnBounds (#2290)
### Summary This PR transitions the spawner system from a simple radius-based model to a flexible 3D boundary system. ### Core Changes * **Replaced `HomeRange` with `SpawnBounds`**: Spawners now use a `Rectangle3D` to define spawn areas instead of a circular integer range. * **Backward Compatibility**: * The `HomeRange` property remains as a helper that generates square `SpawnBounds` centered on the spawner. * Included a migration path (v10 to v11) that automatically converts old range data into new bounds during deserialization. * **Dynamic Bounds Shifting**: If a spawner is moved, its `SpawnBounds` will automatically shift with it, provided the bounds are currently configured as a centered square. * **New Spawn Logic**: Added `SpawnLocationIsHome` toggle. If enabled, spawned mobiles treat their exact spawn coordinates as their "Home" rather than the spawner's location. ### Implementation Details * **Interface Updates**: Updated `ISpawner` to include `WalkingRange`, `SpawnBounds`, and `IsInSpawnBounds()`. * **UI Enhancements**: The Spawner Controller Gump now displays "Custom" for complex bounds and allows copying of the new boundary properties between spawners. * **Refactored Constructors**: Streamlined `BaseSpawner`, `ProximitySpawner`, and `RegionSpawner` constructors to support the new data types.
This commit is contained in:
parent
bde072f81c
commit
0b34cc4417
16 changed files with 502 additions and 196 deletions
|
|
@ -879,15 +879,15 @@ public abstract partial class BaseAI
|
|||
_timer.Stop();
|
||||
}
|
||||
|
||||
if (ShouldReturnToHome(Mobile.Spawner as Spawner))
|
||||
if (ShouldReturnToHome(Mobile.Spawner))
|
||||
{
|
||||
Timer.StartTimer(ReturnToHome);
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldReturnToHome(Spawner spawner) =>
|
||||
private bool ShouldReturnToHome(ISpawner spawner) =>
|
||||
spawner?.ReturnOnDeactivate == true && !Mobile.Controlled &&
|
||||
(spawner.HomeLocation == Point3D.Zero || !Mobile.InRange(spawner.HomeLocation, spawner.HomeRange));
|
||||
!spawner.IsInSpawnBounds(Mobile.Location);
|
||||
|
||||
private void ReturnToHome()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue