r4139 - in trunk/data/qcsrc: client common server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Aug 21 12:20:23 EDT 2008
Author: div0
Date: 2008-08-21 12:20:23 -0400 (Thu, 21 Aug 2008)
New Revision: 4139
Modified:
trunk/data/qcsrc/client/Main.qc
trunk/data/qcsrc/common/constants.qh
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/race.qc
trunk/data/qcsrc/server/race.qh
Log:
race: completed spectator support
Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc 2008-08-21 16:03:05 UTC (rev 4138)
+++ trunk/data/qcsrc/client/Main.qc 2008-08-21 16:20:23 UTC (rev 4139)
@@ -609,6 +609,9 @@
race_checkpointtime = 0;
break;
+ case RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING:
+ race_laptime = ReadCoord();
+ // fall through
case RACE_NET_CHECKPOINT_NEXT_QUALIFYING:
race_nextcheckpoint = ReadByte();
Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh 2008-08-21 16:03:05 UTC (rev 4138)
+++ trunk/data/qcsrc/common/constants.qh 2008-08-21 16:20:23 UTC (rev 4139)
@@ -211,6 +211,7 @@
const float RACE_NET_CHECKPOINT_NEXT_QUALIFYING = 2; // byte nextcheckpoint, short recordtime, string recordholder
const float RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent
const float RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent
+const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder
/**
* Lower scores are better (e.g. suicides)
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2008-08-21 16:03:05 UTC (rev 4138)
+++ trunk/data/qcsrc/server/cl_client.qc 2008-08-21 16:20:23 UTC (rev 4139)
@@ -2202,6 +2202,8 @@
WriteByte(MSG_ONE, SVC_TEMPENTITY);
WriteByte(MSG_ONE, TE_CSQC_SPECTATING);
WriteByte(MSG_ONE, self.spectatee_status);
+ if(g_race)
+ race_InitSpectator();
}
}
Modified: trunk/data/qcsrc/server/race.qc
===================================================================
--- trunk/data/qcsrc/server/race.qc 2008-08-21 16:03:05 UTC (rev 4138)
+++ trunk/data/qcsrc/server/race.qc 2008-08-21 16:20:23 UTC (rev 4139)
@@ -32,7 +32,7 @@
return f - 1;
}
-void race_SendNextCheckpoint(entity e)
+void race_SendNextCheckpoint(entity e, float spec)
{
float recordtime;
string recordholder;
@@ -51,17 +51,30 @@
if(recordholder == e.netname)
recordholder = "";
- msg_entity = e;
+ if(!spec)
+ msg_entity = e;
WRITESPECTATABLE_MSG_ONE({
WriteByte(MSG_ONE, SVC_TEMPENTITY);
WriteByte(MSG_ONE, TE_CSQC_RACE);
- WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_NEXT_QUALIFYING);
+ if(spec)
+ {
+ WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING);
+ WriteCoord(MSG_ONE, e.race_laptime);
+ }
+ else
+ WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_NEXT_QUALIFYING);
WriteByte(MSG_ONE, cp); // checkpoint the player will be at next
WriteShort(MSG_ONE, recordtime);
WriteString(MSG_ONE, recordholder);
});
}
+void race_InitSpectator()
+{
+ if(self.enemy.race_laptime)
+ race_SendNextCheckpoint(self.enemy, 1);
+}
+
void race_SendTime(entity e, float cp, float t, float tvalid)
{
float snew, l;
@@ -162,7 +175,7 @@
entity p;
FOR_EACH_REALPLAYER(p)
if(p.race_checkpoint == cp)
- race_SendNextCheckpoint(p);
+ race_SendNextCheckpoint(p, 0);
}
}
}
@@ -276,7 +289,7 @@
other.race_laptime = time;
if(g_race_qualifying)
- race_SendNextCheckpoint(other);
+ race_SendNextCheckpoint(other, 0);
}
else if(other.race_checkpoint == race_NextCheckpoint(self.race_checkpoint))
{
Modified: trunk/data/qcsrc/server/race.qh
===================================================================
--- trunk/data/qcsrc/server/race.qh 2008-08-21 16:03:05 UTC (rev 4138)
+++ trunk/data/qcsrc/server/race.qh 2008-08-21 16:20:23 UTC (rev 4139)
@@ -1,3 +1,4 @@
+void race_InitSpectator();
void race_PreSpawnObserver();
void race_PreSpawn();
void race_PostSpawn(entity spot);
More information about the nexuiz-commits
mailing list