Skip to content

Substitueix la variable manual d’escala per una matriu de transformació

jordi fita mas requested to merge jfita/tramposillu:fit-viewport into master

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.

Merge request reports