Add own-body spectator camera and player names; record Workshop 0.0.139
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-11-03 21:16:05 +01:00
parent 4f02ad64b4
commit 828bb0a1a7
17 changed files with 1048 additions and 35 deletions
+9 -3
View File
@@ -84,11 +84,17 @@ int main(){
Spawn mixed;assert(mixed.SpawnPosition(&mode,p)&&p==other.origin&&mixed.m_Placement.last==&other);
Observer mixedFollow;mixedFollow.m_ERRServerObserved=&replacement;mixedFollow.ERR_UpdateObserverServer();assert(mixedFollow.m_ERRServerObserved==&other&&mixedFollow.releases==1);
manager.controlled[1]=&original;Observer cycling;cycling.ERR_UpdateObserverServer();assert(cycling.m_ERRServerObserved==&original);cycling.ERR_UpdateObserverServer(1);assert(cycling.m_ERRServerObserved==&other);cycling.ERR_UpdateObserverServer(1);assert(cycling.m_ERRServerObserved==&original);cycling.ERR_UpdateObserverServer(-1);assert(cycling.m_ERRServerObserved==&other);
// Unconscious player keeps possession and follows only conscious canonical teammates.
// Unconscious player keeps possession and cycles conscious teammates plus their own body.
Observer casualty;casualty.own=&original;casualty.m_ERRObserverReason=0;original.conscious=false;
casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRObserverReason==4&&casualty.m_ERRServerObserved==&other&&casualty.own==&original);
other.conscious=false;casualty.ERR_UpdateObserverServer();assert(!casualty.m_ERRServerObserved&&casualty.m_ERRObserverAnchor==original.origin);
other.conscious=true;casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRServerObserved==&other);
casualty.ERR_UpdateObserverServer(1);assert(casualty.m_ERRServerObserved==&original&&casualty.own==&original);
casualty.ERR_UpdateObserverServer(0);assert(casualty.m_ERRServerObserved==&original); // polling retains own body
casualty.ERR_UpdateObserverServer(1);assert(casualty.m_ERRServerObserved==&other);
casualty.ERR_UpdateObserverServer(-1);assert(casualty.m_ERRServerObserved==&original);
other.conscious=false;casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRServerObserved==&original&&casualty.m_ERRObserverAnchor==original.origin);
casualty.ERR_UpdateObserverServer(1);assert(casualty.m_ERRServerObserved==&original); // no duplicate own-body entries
other.conscious=true;casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRServerObserved==&original); // do not switch automatically
casualty.ERR_UpdateObserverServer(1);assert(casualty.m_ERRServerObserved==&other);
original.conscious=true;casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRObserverReason==0&&!casualty.m_ERRServerObserved&&casualty.own==&original);
original.conscious=false;life.Connected=false;casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRObserverReason==0);
life.Connected=true;casualty.ERR_UpdateObserverServer();assert(casualty.m_ERRObserverReason==4);