mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-01-18 15:27:17 +01:00
Physics Interpolation - automatic resets for Camera2D and TileMap.
Extra reset required for Camera2D. TileMaps require resetting by quadrant.
This commit is contained in:
parent
a09c3891db
commit
994ae99f62
@ -135,6 +135,17 @@ void TileMap::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case NOTIFICATION_RESET_PHYSICS_INTERPOLATION: {
|
||||||
|
if (is_visible_in_tree() && is_physics_interpolated_and_enabled()) {
|
||||||
|
for (Map<PosKey, Quadrant>::Element *E = quadrant_map.front(); E; E = E->next()) {
|
||||||
|
Quadrant &q = E->get();
|
||||||
|
for (List<RID>::Element *F = q.canvas_items.front(); F; F = F->next()) {
|
||||||
|
VisualServer::get_singleton()->canvas_item_reset_physics_interpolation(F->get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -801,6 +812,13 @@ void TileMap::update_dirty_quadrants() {
|
|||||||
RenderingServerCanvasHelper::tilemap_end();
|
RenderingServerCanvasHelper::tilemap_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset physics interpolation for any recreated canvas items.
|
||||||
|
if (is_physics_interpolated_and_enabled() && is_visible_in_tree()) {
|
||||||
|
for (List<RID>::Element *F = q.canvas_items.front(); F; F = F->next()) {
|
||||||
|
VisualServer::get_singleton()->canvas_item_reset_physics_interpolation(F->get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dirty_quadrant_list.remove(dirty_quadrant_list.first());
|
dirty_quadrant_list.remove(dirty_quadrant_list.first());
|
||||||
quadrant_order_dirty = true;
|
quadrant_order_dirty = true;
|
||||||
}
|
}
|
||||||
|
@ -318,6 +318,15 @@ void Camera2D::_notification(int p_what) {
|
|||||||
make_current();
|
make_current();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note that NOTIFICATION_RESET_PHYSICS_INTERPOLATION
|
||||||
|
// is automatically called before this because Camera2D is inherited
|
||||||
|
// from CanvasItem. However, the camera transform is not up to date
|
||||||
|
// until this point, so we do an extra manual reset.
|
||||||
|
if (is_physics_interpolated_and_enabled()) {
|
||||||
|
_interpolation_data.xform_curr = get_camera_transform();
|
||||||
|
_interpolation_data.xform_prev = _interpolation_data.xform_curr;
|
||||||
|
}
|
||||||
|
|
||||||
first = true;
|
first = true;
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_EXIT_TREE: {
|
case NOTIFICATION_EXIT_TREE: {
|
||||||
|
Loading…
Reference in New Issue
Block a user