Substitueix la variable manual d’escala per una matriu de transformació
Tenir la variable d’scale
per dibuixar tots els gràfics
proporcionalment a la mida real de la pantalla funcionava correctament
però penso que ens portava masses mals de cap a l’hora de comprovar
si un punt era o no dins el rectangle de la guillotina, perquè mai
podíem tenir el rectangle desat per si de cas canviava la mida de la
pantalla i les coordenaves canviaven.
He pensat que seria millor treballar sempre amb una «pantalla virtual», amb una mida que nosaltres decidim, i deixar que sigui l’OpenGL escali aquesta pantalla virtual a la mida real de la finestra/pantalla. D’aquesta manera el rectangle de la guillotina és constant i es pot desar a la pròpia classe de Guillotine i fer servir el seu mètode Contains per comprovar si el punt del touch és dins o no.
He separat tot el càlcul d’aquesta matriu de transformació a una classe separada que està basada en la classe de la LibGDX que fa la mateixa funció, fins i tot he agafat els mateixos noms.
Com que ara les coordenades que es mostren a la pantalla del mòbil —la pantalla «real»— poden no correspondre amb les coordenades de la pantalla virtual, he hagut de fer també el càlcul de la matriu inversa per convertir de mòbil a virtual.
El mètode Unproject retorna un ref
perquè Vector2 és una struct
i C#
crear una còpia quan es retorna una estructura des d’una funció. No he
verificat si es nota cap canvi o no, però he pensat evitar fer tants
new
com sigui possible a aquesta classe i per això retorno la ref
i
faig el càlcul dins un Vector2
temporal.
A la classe del Tramposillu no me n’he preocupat tant perquè acabava fent molta més feina de la necessària i m’ha semblat que el codi quedava força més complicat.
Com que ara la coordenada X de les guillotines es desa a la pròpia
classe Guillotine
, no fa falta l’índex de l’array de Guillotine
i
he canviat el mapa de touches perquè desi directament la guillotina.