making network things work...
This commit is contained in:
parent
1071358140
commit
bd5aa2e112
|
@ -163,7 +163,7 @@ Game::Game() : ProgramState(NULL) {
|
||||||
inJoinGameLoading = false;
|
inJoinGameLoading = false;
|
||||||
|
|
||||||
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
||||||
frameWhenMessageWasReceived[i]==-1;
|
receivedTooEarlyInFrames[i]==-1;
|
||||||
framesNeededToWaitForServerMessage[i]==-1;
|
framesNeededToWaitForServerMessage[i]==-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@ void Game::resetMembers() {
|
||||||
inJoinGameLoading = false;
|
inJoinGameLoading = false;
|
||||||
|
|
||||||
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
||||||
frameWhenMessageWasReceived[i]==-1;
|
receivedTooEarlyInFrames[i]==-1;
|
||||||
framesNeededToWaitForServerMessage[i]==-1;
|
framesNeededToWaitForServerMessage[i]==-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1773,29 +1773,29 @@ void Game::update() {
|
||||||
//get stats of received/waiting for packages
|
//get stats of received/waiting for packages
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
// calculate current receive Index slot:
|
// calculate current receive Index slot:
|
||||||
int index = (world.getFrameCount()
|
int index = ((world.getFrameCount()
|
||||||
- (world.getFrameCount()
|
- (world.getFrameCount()
|
||||||
% gameSettings.getNetworkFramePeriod())
|
% gameSettings.getNetworkFramePeriod()))
|
||||||
/ gameSettings.getNetworkFramePeriod())
|
/ gameSettings.getNetworkFramePeriod())
|
||||||
% GameConstants::networkSmoothInterval;
|
% GameConstants::networkSmoothInterval;
|
||||||
|
|
||||||
// clean the next frame slot
|
// clean the next frame slot
|
||||||
frameWhenMessageWasReceived[(index+1)%GameConstants::networkSmoothInterval]=-1;
|
receivedTooEarlyInFrames[(index+1)%GameConstants::networkSmoothInterval]=-1;
|
||||||
framesNeededToWaitForServerMessage[(index+1)%GameConstants::networkSmoothInterval]=-1;
|
framesNeededToWaitForServerMessage[(index+1)%GameConstants::networkSmoothInterval]=-1;
|
||||||
|
|
||||||
if(frameWhenMessageWasReceived[index]==-1){
|
if(receivedTooEarlyInFrames[index]==-1){
|
||||||
// we need to check if we already received something for next frame
|
// we need to check if we already received something for next frame
|
||||||
if(lastNetworkFrameFromServer > 0 && lastNetworkFrameFromServer > world.getFrameCount()) {
|
if(lastNetworkFrameFromServer > 0 && lastNetworkFrameFromServer > world.getFrameCount()) {
|
||||||
frameWhenMessageWasReceived[index]= lastNetworkFrameFromServer-world.getFrameCount();
|
receivedTooEarlyInFrames[index]= lastNetworkFrameFromServer-world.getFrameCount();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(frameWhenMessageWasReceived[index]==-1){
|
if(framesNeededToWaitForServerMessage[index]==-1){
|
||||||
// calc time waiting for message in milliseconds to frames
|
// calc time waiting for message in milliseconds to frames
|
||||||
int64 timeClientWaitedForLastMessage=clientInterface->getTimeClientWaitedForLastMessage();
|
int64 timeClientWaitedForLastMessage=clientInterface->getTimeClientWaitedForLastMessage();
|
||||||
if(timeClientWaitedForLastMessage>0){
|
if(timeClientWaitedForLastMessage>0){
|
||||||
printf("Client waited:%d ms\n",(int)timeClientWaitedForLastMessage);
|
printf("world.getFrameCount():%d index %d Client waited:%d ms\n",world.getFrameCount(),index,(int)timeClientWaitedForLastMessage);
|
||||||
framesNeededToWaitForServerMessage[index]=timeClientWaitedForLastMessage/1000/GameConstants::updateFps;
|
framesNeededToWaitForServerMessage[index]=timeClientWaitedForLastMessage/1000/GameConstants::updateFps;
|
||||||
|
printf("ClienttimeClientWaitedForLastMessage:%d ms\n",world.getFrameCount(),(int)timeClientWaitedForLastMessage);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
framesNeededToWaitForServerMessage[index]=0;
|
framesNeededToWaitForServerMessage[index]=0;
|
||||||
|
@ -1817,10 +1817,10 @@ void Game::update() {
|
||||||
|
|
||||||
|
|
||||||
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
||||||
if(frameWhenMessageWasReceived[i]>allowedMaxFallback){
|
if(receivedTooEarlyInFrames[i]>allowedMaxFallback){
|
||||||
countOfMessagesReceivedTooEarly++;
|
countOfMessagesReceivedTooEarly++;
|
||||||
if ( minimum == 0 || minimum > frameWhenMessageWasReceived[i] ){
|
if ( minimum == 0 || minimum > receivedTooEarlyInFrames[i] ){
|
||||||
minimum=frameWhenMessageWasReceived[i];
|
minimum=receivedTooEarlyInFrames[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(framesNeededToWaitForServerMessage[i]>0){
|
if(framesNeededToWaitForServerMessage[i]>0){
|
||||||
|
@ -1847,7 +1847,7 @@ void Game::update() {
|
||||||
if(cleanupStats==true) {
|
if(cleanupStats==true) {
|
||||||
// Once we decided to use the stats to do some correction, we reset/cleanup our recorded stats
|
// Once we decided to use the stats to do some correction, we reset/cleanup our recorded stats
|
||||||
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
for( int i=0;i<GameConstants::networkSmoothInterval;i++){
|
||||||
frameWhenMessageWasReceived[i]=-1;
|
receivedTooEarlyInFrames[i]=-1;
|
||||||
framesNeededToWaitForServerMessage[index]=-1;
|
framesNeededToWaitForServerMessage[index]=-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ private:
|
||||||
int updateFps, lastUpdateFps, avgUpdateFps;
|
int updateFps, lastUpdateFps, avgUpdateFps;
|
||||||
int framesToCatchUpAsClient;
|
int framesToCatchUpAsClient;
|
||||||
int framesToSlowDownAsClient;
|
int framesToSlowDownAsClient;
|
||||||
int frameWhenMessageWasReceived[GameConstants::networkSmoothInterval];
|
int receivedTooEarlyInFrames[GameConstants::networkSmoothInterval];
|
||||||
int framesNeededToWaitForServerMessage[GameConstants::networkSmoothInterval];
|
int framesNeededToWaitForServerMessage[GameConstants::networkSmoothInterval];
|
||||||
int totalRenderFps, renderFps, lastRenderFps, avgRenderFps,currentAvgRenderFpsTotal;
|
int totalRenderFps, renderFps, lastRenderFps, avgRenderFps,currentAvgRenderFpsTotal;
|
||||||
uint64 tickCount;
|
uint64 tickCount;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user