Backend (ArenaRoom.js):
- Strip race state machine (lobby/countdown/playing/round/qualify). Persistent
"playing" phase, no rounds, no checkpoints. Free-roam multi.
- Spawn lowered to y=1.5 (was 5) + MIN_DIST raised to 5 (was 3) to avoid
ejecting overlapping players at connect.
- Schema kept intact (handshake-safe); deprecated fields default-valued.
- npm run schema:gen wired (anti-drift codegen).
Unity client:
- C# schema generated by schema-codegen into RolldSchema namespace
(Generated/GameState.cs, Generated/Player.cs). NetworkSchema.cs removed —
handshake no longer scans global namespace.
- NetworkManager: typed Room<GameState>, callbacks rebound, seeds players
already in room on join.
- RemotePlayerController:
* Post-spawn 1.5s grace window (BumpReady) — local PlayerController.HandleBump
ignores remotes during grace.
* Solid SphereCollider disabled during grace, re-enabled afterwards — fixes
the kinematic-vs-dynamic eject when a new client spawns inside someone.
* NPCBall prefab material switched from invisible-in-URP Default-Material to
BallShader.shadergraph.
* TrailRenderer added, tinted with player's chosen color.
* Name label distance-scales (1x-8x) so pseudos remain readable far away.
- GameHUD: OnGUI emptied — race UI (rounds, mode, timer, playersAlive) gone.
- GameCanvas.jsx: BUILD_PREFIX/VERSION bumped for cache-bust.
Frontend WebGL build (pretty_build): final build with all the above.
86 lines
1.7 KiB
C#
86 lines
1.7 KiB
C#
//
|
|
// THIS FILE HAS BEEN GENERATED AUTOMATICALLY
|
|
// DO NOT CHANGE IT MANUALLY UNLESS YOU KNOW WHAT YOU'RE DOING
|
|
//
|
|
// GENERATED USING @colyseus/schema 4.0.15
|
|
//
|
|
|
|
using Colyseus.Schema;
|
|
#if UNITY_5_3_OR_NEWER
|
|
using UnityEngine.Scripting;
|
|
#endif
|
|
|
|
namespace RolldSchema {
|
|
public partial class Player : Schema {
|
|
#if UNITY_5_3_OR_NEWER
|
|
[Preserve]
|
|
#endif
|
|
public Player() { }
|
|
[Type(0, "float32")]
|
|
public float x = default(float);
|
|
|
|
[Type(1, "float32")]
|
|
public float y = default(float);
|
|
|
|
[Type(2, "float32")]
|
|
public float z = default(float);
|
|
|
|
[Type(3, "float32")]
|
|
public float vx = default(float);
|
|
|
|
[Type(4, "float32")]
|
|
public float vy = default(float);
|
|
|
|
[Type(5, "float32")]
|
|
public float vz = default(float);
|
|
|
|
[Type(6, "float32")]
|
|
public float rx = default(float);
|
|
|
|
[Type(7, "float32")]
|
|
public float ry = default(float);
|
|
|
|
[Type(8, "float32")]
|
|
public float rz = default(float);
|
|
|
|
[Type(9, "float32")]
|
|
public float rw = default(float);
|
|
|
|
[Type(10, "float64")]
|
|
public double t = default(double);
|
|
|
|
[Type(11, "string")]
|
|
public string name = default(string);
|
|
|
|
[Type(12, "float32")]
|
|
public float colorR = default(float);
|
|
|
|
[Type(13, "float32")]
|
|
public float colorG = default(float);
|
|
|
|
[Type(14, "float32")]
|
|
public float colorB = default(float);
|
|
|
|
[Type(15, "float32")]
|
|
public float avx = default(float);
|
|
|
|
[Type(16, "float32")]
|
|
public float avy = default(float);
|
|
|
|
[Type(17, "float32")]
|
|
public float avz = default(float);
|
|
|
|
[Type(18, "boolean")]
|
|
public bool isEliminated = default(bool);
|
|
|
|
[Type(19, "boolean")]
|
|
public bool isQualified = default(bool);
|
|
|
|
[Type(20, "boolean")]
|
|
public bool isReady = default(bool);
|
|
|
|
[Type(21, "int8")]
|
|
public sbyte checkpointIndex = default(sbyte);
|
|
}
|
|
}
|