Portiamo alla luce alcune questioni che riguardano questo importantissimo refactoring:
Il nostro obiettivo è quello di far sparire la differenziazione dei comportamenti di Grid/GridController nei confronti di BigGem ed i vari Droppable.
Il problema nasce dal fatto che è un refactoring più grosso del previsto in quanto richiede il cambiamento di molte parti del codice (Grid, GridController, BigGem, le varie DroppableAction e gli State) che non è semplice da eseguire a piccoli passi e la scorsa settimana mi sono ritrovato a tentare alcune strade per poi revertare quando mi accorgevo che prima bisognava essere fatto qualcos'altro.
La strada che attualmente ho scelto è quella di eliminare ogni riferimento a Gem all'interno di BigGem.
Ho notato che per fare ciò bisogna rivedere i comportamenti di canMoveDown e moveDown di BigGem. Qui si rivela un problema. Il comportamento di canMoveDown e moveDown di Droppable non è per niente chiaro e nonostante qualche refactoring ancora ci da dei problemi:
Innanzitutto Droppable non deve dipendere dalla posizione della Sprite (pixel) nello schermo e dalla posizione della griglia (sempre pixel) per determinare se ci si può muovere verso il basso. Questo comportamento va assolutamente chiarito perchè in BigGem non vorrei riprodurre comportamenti ambigui che darebbero problemi in futuro.
Il cuore del problema risiede nel fatto che gli oggetti si muovono non solo a livello di "cella" ma anche a livello di "pixel" durante la caduta e questa gestione deve essere indipendente da Sprite.
Se avete proposte in merito sarò lieto di valutarle