# Migrating From v0.2.X to v0.3.X
## GridSettings → GridSettingsBuilder
`GridSettings` has been replaced with `GridSettingsBuilder`.
Replace
```rust,no_run
let grid_settings = GridSettings {
width: 16,
height: 16,
chunk_size: 4,
collision: true,
..Default::default()
}
let grid = CardinalGrid::new(&grid_settings);
```
with
```rust,no_run
let grid_settings = GridSettingsBuilder::new_2d(16, 16)
.chunk_size(4)
.enable_collision()
.build()
let grid = CardinalGrid::new(&grid_settings);
```
## GridPos → AgentPos
`GridPos` has been renamed to `AgentPos`. This is just a simple rename for clarity.
## Point → NavCell, Nav | Wall -> Passable, Impassable
`Point` has been reworked for clarity. `Point` has been renamed to `NavCell` but the API has been updated to remove user's need to interact with `NavCell` for normal use.
`Grid` functions now take the `Nav` enum to definite mobility and movement cost for a `Grid` cell.
Replace
```rust,no_run
// Creates a wall at grid cell 8,8,0
grid.set_point(UVec3::new(8, 8, 0), Point::new(u32::MAX, true));
// Set the cost for a passable grid cell
grid.set_point(UVec3::new(4, 4, 0), Point::new(4, false));
```
with
```rust,no_run
grid.set_nav(UVec3::new(8, 8, 0), Nav::Impassable);
grid.set_nav(UVec3::new(4, 4, 0), Nav::Passable(4));
```
## Pathfind Component Rework, New PathfindMode
The `Pathfind` component has been reworked with chaining setup functions to ensure configuration can be added in the future without breaking changes.
`PathfindMode` enum was added set which pathfinding method is desired.
Before
```rust,no_run
// You may have forced an A* path like this before
.insert(Pathfind {
goal: UVec3::new(8, 8, 0),
use_astar: true,
})
// or the shorthand for regular HPA*
.insert(Pathfind::new(UVec3::new(8, 8, 0)))
// shorthand A*
.insert(Pathfind::new_astar(UVec3::new(8, 8, 4)))
```
Is now
```rust,no_run
.insert(Pathfind::new(UVec3::(8, 8, 0).mode(PathfindMode::AStar)))
// You can use the new_2d and new_3d constructors without creating a UVec as well
.insert(Pathfind::new_2d(8, 8))
.insert(Pathfind::new_3d(8, 8, 4).mode(PathfindMode::AStar))
```
## DebugMap → DebugGrid, DebugGridBuilder, & DebugOffset
`DebugMap` has been renamed to `DebugGrid` for clarity and a builder pattern has been added to make it cleaner to configure.
It was recommended before to put `DebugMap` as the child of your `Grid` entity, but it is now **required**.
Change
```rust,no_run
grid_entity.with_child((
DebugMap {
tile_width: 8,
tile_height: 8,
map_type: DebugMapType::Square,
draw_chunks: true,
draw_points: false,
draw_entrances: true,
draw_cached_paths: false,
},
Transform::from_translation(offset.extend(0.0)),
));
```
to
```rust,no_run
grid_entity.with_child((
DebugGridBuilder::new(8, 8)
.enable_chunks()
.enable_entrances()
.build(),
// Add the offset to the debug gizmo so that it aligns with your tilemap.
DebugOffset(Vec2::new(-360.0, -500.0)),
));
```
`DebugMapType` has been renamed to `DebugTilemapType`. You only need to set it if you're using isometric. `DebugGridBuilder::new(8, 8).isometric().build()`.
## DebugPath
`tile_width`, `tile_height`, and `map_type` has been removed from the `DebugPath` component.
These fields are now determined by getting the attached `DebugGrid` based on the entities relationship to the `Grid` component. Ensure that you add the `AgentOfGrid` relationship to your pathfinding (player/npc etc) entities.
Replace
```rust,no_run
.insert(DebugPath {
tile_width: 8,
tile_height: 8,
map_type: DebugMapType::Square,
color,
draw_unrefined: false,
})
```
with
```rust,no_run
.insert(DebugPath::new(color))
.insert(AgentOfGrid(grid_entity))
```