sincontri / steniko

Steven & Nikolas shared repository
0 stars 0 forks source link

Vision #15

Open sincontri opened 9 years ago

sincontri commented 9 years ago

Dunque all'avvio ricevi tutti i terreni e oggetti della mappa. Credo debba essere il server però a mandarti un nuovo tipo di messaggio, indicando gli id dei terreni/oggetti visibili, questo all'avvio e ad ogni spostamento.

Questo però può caricare un po' il server, ma penso nemmeno tanto; viceversa se lo facesse il client mancherebbero tutte le eventuali modifiche avvenute alla mappa e agli oggetti (presi da un altro o nuovi etc).

Poi tu devi tenerti un array nel localStorage in cui ci saranno gli oggetti/terreni già visualizzati e quelli li mostri sempre, oscurando quelli che non sono più in visuale, info che comunque ti arriva dal server. Nel caso tornando in una zona già visitata, non ti arrivi più un oggetto che avevi in localStorage, lo devi cancellare, significa che è stato raccolto o non c'è più.

Forse il carico sul server può essere eccessivo, bisogna provare, ma cmq si può pensare di fare questa operazione tipo una volta al secondo o cmq non ad ogni movimento.

NikolasMosca commented 9 years ago

e se invece ci pensasse il client ad avvisarti dei cambiamenti sulla mappa?

Mi spiego meglio :

Durante lo spostamento il client si tiene nell'array gli oggetti ma ogni tot ms manda al server quali di questi item può vedere grazie alla sua vision.

Magari in questo modo posso alleggerire il carico del server.. cosi che tu mi passi solo le new entry o gli oggetti che non esistono piu.. dimmi che ne pensi :-)

sincontri commented 9 years ago

Si in effetti sarebbe meglio; in sostanza devo farmi delle strutture parallele in memoria sul server (oppure aggiungere un flag di variazioni su quelle già esistenti, ma sarebbe più lento) che contengono le variazioni di terreni e oggetti, e poi ad ogni movimento (qui ci vuole per forza un nuovo timer apposito tipo a 100ms, perchè se anche non ti muovi devi comunque vedere le variazioni intorno a te) ti mando le sole variazioni, se sono nel tuo campo visivo.

L'unico problema rimane il possibile hack del client per vedere più in là, in ogni caso poco grave visto che le variazioni arrivano dal server. Invece che mandare al client gli oggetti visibili, penserei ad un meccanismo per verificare ogni tot che il client non sia stato manomesso, anche con comunicazioni col server; sarebbe bello un hash degli id degli oggetti visibili da mandare al server, il quale può verificare che corrisponda con la vision corretta.

Bravo, giusto, è la via migliore :+1:

NikolasMosca commented 9 years ago

Good sono felice! :+1: Per i possibili hack possiamo fare dei controlli come per le collisioni come dicevi bene tu :)

sincontri commented 9 years ago

Per calcolare la distanza tra un'icona e l'unità (nel ciclo Draw) puoi fare:

Math.sqrt(Math.pow(Math.abs(unit.x - img.x), 2) + Math.abs(unit.y - img.y), 2))

E' il teorema di Pitagora, la radice quadrata della somma dei quadrati delle distanze x e y :smile:

Poi se la distanza è > della vision imposti img.style.opacity = 0.3 altrimenti la imposti a 1.

sincontri commented 8 years ago

Mi piace com'è ora. Sarebbe bello spostare la telecamera con le frecce, in modo da vedere anche le zone fuori visibilità; cliccando col destro dovrebbe comunque muoversi. Non mi ricordo se ne avevamo già parlato, pensi si possa fare?

NikolasMosca commented 8 years ago

Ora con la modifica che ho fatto della telecamera è implentabile.. solo non possiamo usare le freccette dato che con quelle gia muovi il personaggio.. se vuoi posso provare a implementare che allo scontro del puntatore sul limite dello schermo la telecamera si muove.. .e implemento un pulsante che faccia tornare la telecamera sul personaggio. Che ne pensi?

sincontri commented 8 years ago

Può andare, ma mi piacerebbe di più usare le frecce, tanto il pg già lo muovi col mouse; però in effetti così leviamo movimenti di precisione che si possono fare con la tastiera, non so ci pensiamo un attimo. In ogni caso ci vorrà un tasto per centrare di nuovo la telecamera sul omino giusto?

sincontri commented 8 years ago

Ah si ok non avevo letto bene :) Shift + frecce può andare? Fa schifo perché devi usare entrambe le mani sulla tastiera, ma per adesso può andare. In ogni caso questa feature non è così importante, meglio fare prima le altre :smile:

NikolasMosca commented 8 years ago

Ok allora la lasciamo in standby per poi.. :smile:

NikolasMosca commented 8 years ago

O alltrimenti spostiamo il movimento su WASD e mettiamo le frecce per la telecamera..