1
Fork 0
mirror of https://github.com/Steffo99/nanogolf.git synced 2024-11-24 09:04:19 +00:00
This commit is contained in:
Steffo 2024-03-22 06:44:33 +01:00
parent b479498729
commit 989dff6332
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
3 changed files with 47 additions and 0 deletions

View file

@ -155,7 +155,20 @@ Inoltre, ogni volta che una `GolfBall` da esso istanziata entra nella buca, `Gol
## [`GolfBall`](../scenes/golf_ball.gd) ## [`GolfBall`](../scenes/golf_ball.gd)
Il `Node2D` `GolfBall` usa il segnale `possessed` di un `PlayerNode` per imitarne i cambi di `multiplayer_authority`; in condizioni di connessione normali, ogni client controlla una sua `GolfBall`.
Ad ogni `physics_process`, il client che ha autorità su ciascuna `GolfBall` effettua un quanto di simulazione fisica, spostando la pallina secondo il vettore velocità salvato nella variabile `velocity` e applicando un attrito dissipativo per farla lentamente fermare.
Successivamente, il client con autorità chiama `rpc_set_global_position`, una remote procedure call che sposta **su tutti i peer che non stanno eseguendo la simulazione fisica** la pallina alla posizione fornita come valore.
Questa remote procedure call è l'unica in tutto il gioco che fa uso di un **canale di comunicazione diverso**: usando `unreliable_ordered`, ci si può permettere di effettuare la chiamata anche 60 volte al secondo, senza che sia un problema se alcune chiamate vengono perse, in quanto si è interessati solamente al valore più recente di posizione, e non ai valori storici che ha avuto nel passato.
Infine, sempre il client con autorità controlla se l'`HoleController` della pallina è sovrapposto ad un'area di tipo `GolfHole`: in caso affermativo, viene chiamato `rpc_do_enter_hole`, in modo che la pallina entrata in buca possa riprodurre un suono ed essere nascosta su tutti i client.
![](img/golfballs.png)
## [`PuttController`](../scenes/putt_controller.gd) ## [`PuttController`](../scenes/putt_controller.gd)
Il `Node2D` `PuttController` infine segue i cambi di `multiplayer_authority` di `GolfBall`, e ha una singola funzione: quella di trasformare gli input del giocatore locale in un vettore che `GolfBall` possa usare per applicare un impulso alla pallina.
Ha una singola RPC, `rpc_play_putt_sound`, che viene attivata ogni volta che viene terminato l'input per dare un colpo alla pallina, e riproduce un suono su tutti i client connessi.

BIN
docs/img/golfballs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c4ka6i35jnly"
path="res://.godot/imported/golfballs.png-d53fed87d69a06b76513da168c441b98.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://docs/img/golfballs.png"
dest_files=["res://.godot/imported/golfballs.png-d53fed87d69a06b76513da168c441b98.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1