PathSprite: ja permet createPath amb temps o frames

This commit is contained in:
2025-10-17 14:02:40 +02:00
parent 5ff33ca6ca
commit 300edc90b5
2 changed files with 71 additions and 32 deletions

View File

@@ -56,29 +56,57 @@ void PathSprite::render() {
// Añade un recorrido
void PathSprite::addPath(Path path, bool centered) {
PathCentered path_centered = PathCentered::NONE;
if (centered) {
path_centered = (path.spots.back().x == path.spots.front().x) ? PathCentered::ON_X : PathCentered::ON_Y;
if (path.is_point_path) {
// Lógica de centrado para paths por PUNTOS (como antes)
if (!path.spots.empty()) {
// Si X es constante, es un path Vertical, centramos en X
path_centered = (path.spots.back().x == path.spots.front().x) ? PathCentered::ON_X : PathCentered::ON_Y;
}
} else {
// Lógica de centrado para paths GENERADOS (por duración)
// Si el tipo es Vertical, centramos en X
path_centered = (path.type == PathType::VERTICAL) ? PathCentered::ON_X : PathCentered::ON_Y;
}
}
switch (path_centered) {
case PathCentered::ON_X: {
const int X = path.spots.back().x - (pos_.w / 2);
for (auto &spot : path.spots) {
spot.x = X;
// Centrar en el eje X (para paths Verticales)
const float X_offset = pos_.w / 2.0f; // Asume que pos_.w está inicializado por el constructor de Sprite
if (path.is_point_path) {
const float X_base = !path.spots.empty() ? path.spots.front().x : 0.0f;
const float X = X_base - X_offset;
for (auto &spot : path.spots) {
spot.x = X;
}
} else {
// Es un path generado, ajustamos la posición fija (que es X)
path.fixed_pos -= X_offset;
}
paths_.emplace_back(path);
paths_.emplace_back(std::move(path)); // Usamos std::move
break;
}
case PathCentered::ON_Y: {
const int Y = path.spots.back().y - (pos_.h / 2);
for (auto &spot : path.spots) {
spot.y = Y;
// Centrar en el eje Y (para paths Horizontales)
const float Y_offset = pos_.h / 2.0f; // Asume que pos_.h está inicializado
if (path.is_point_path) {
const float Y_base = !path.spots.empty() ? path.spots.front().y : 0.0f;
const float Y = Y_base - Y_offset;
for (auto &spot : path.spots) {
spot.y = Y;
}
} else {
// Es un path generado, ajustamos la posición fija (que es Y)
path.fixed_pos -= Y_offset;
}
paths_.emplace_back(path);
paths_.emplace_back(std::move(path)); // Usamos std::move
break;
}
default:
paths_.emplace_back(path);
// Sin centrado
paths_.emplace_back(std::move(path)); // Usamos std::move
break;
}
}