fix: chat input isolation, mouse lock, multi spawn
- PlayerController: block WASD/jump callbacks when ChatUI is open - PlayerController: clic droit = unlock souris, clic gauche = re-lock (n'est plus un toggle) - PlayerController: ajoute ResetInputs() appelé à l'ouverture du chat - ChatUI: appelle ResetInputs() quand le panel s'ouvre pour éviter les touches collées - NetworkManager: seed les joueurs déjà présents dans la room à la connexion (les OnAdd Colyseus peuvent être manqués si l'état est décodé avant l'enregistrement des callbacks) - NetworkManager: garde anti-doublon dans OnPlayerAdd - NetworkManager: fallback sphere si remotePlayerPrefab est null Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -163,6 +163,13 @@ public class NetworkManager : MonoBehaviour
|
||||
_room.OnMessage<ChatUI.ChatMessage>("chat", msg => { ChatUI.Instance?.ReceiveChatMessage(msg); });
|
||||
_room.OnLeave += OnRoomLeave;
|
||||
|
||||
// Seed players already present in the room (state decoded before callbacks were registered)
|
||||
if (_room.State.players != null)
|
||||
{
|
||||
foreach (var kvp in _room.State.players)
|
||||
OnPlayerAdd(kvp.Key, kvp.Value);
|
||||
}
|
||||
|
||||
OnConnected?.Invoke();
|
||||
}
|
||||
|
||||
@@ -257,11 +264,14 @@ public class NetworkManager : MonoBehaviour
|
||||
PlayerCount = _room.State.players?.Count ?? 0;
|
||||
|
||||
if (sessionId == LocalSessionId) return;
|
||||
if (_remotePlayers.ContainsKey(sessionId)) return; // prevent duplicate spawn
|
||||
|
||||
if (remotePlayerPrefab != null)
|
||||
{
|
||||
Vector3 spawnPos = new Vector3(player.x, player.y, player.z);
|
||||
GameObject remoteBall = Instantiate(remotePlayerPrefab, spawnPos, Quaternion.identity);
|
||||
GameObject remoteBall = remotePlayerPrefab != null
|
||||
? Instantiate(remotePlayerPrefab, spawnPos, Quaternion.identity)
|
||||
: GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
||||
remoteBall.transform.position = spawnPos;
|
||||
remoteBall.name = $"RemotePlayer_{player.name}_{sessionId[..6]}";
|
||||
|
||||
var controller = remoteBall.GetComponent<RemotePlayerController>()
|
||||
|
||||
Reference in New Issue
Block a user