[Gcblue-commits] gcb_wx/src/sim Game.cpp,1.74,1.75 tcGameObjIterator.cpp,1.2,1.3 tcGameObject.cpp,1.
Status: Alpha
Brought to you by:
ddcforge
|
From: Dewitt C. <ddc...@us...> - 2004-04-09 03:21:29
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12869/src/sim Modified Files: Game.cpp tcGameObjIterator.cpp tcGameObject.cpp tcNetworkView.cpp tcSimState.cpp Log Message: multiplayer related changes Index: tcSimState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSimState.cpp,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** tcSimState.cpp 7 Apr 2004 00:41:08 -0000 1.37 --- tcSimState.cpp 9 Apr 2004 03:08:09 -0000 1.38 *************** *** 294,305 **** } } ! UpdateWeaponHits(); ! UpdateLandings(mfSimTime); ! RemoveDestroyedObjects(); UpdateLaunch(); ! mcSensorMap.Update(mfSimTime); ! UpdateSensors(); ! UpdateObjFormations(mfSimTime); ! UpdateObjEngagements(mfSimTime); // FC engagement list and auto launch if ((mfSimTime-mfLastTileAgeOut) > 25.4f) { --- 294,313 ---- } } ! ! if (multiplayerMode != MM_CLIENT) ! { ! UpdateWeaponHits(); ! UpdateLandings(mfSimTime); ! RemoveDestroyedObjects(); ! } UpdateLaunch(); ! ! if (multiplayerMode != MM_CLIENT) ! { ! mcSensorMap.Update(mfSimTime); ! UpdateSensors(); ! UpdateObjFormations(mfSimTime); ! UpdateObjEngagements(mfSimTime); // FC engagement list and auto launch ! } if ((mfSimTime-mfLastTileAgeOut) > 25.4f) { *************** *** 307,312 **** mpMapData->AgeOutTiles(mfSimTime); } ! UpdateAI(mfSimTime); ! goalTracker->Update(mfSimTime); #ifdef _DEBUG --- 315,324 ---- mpMapData->AgeOutTiles(mfSimTime); } ! ! if (multiplayerMode != MM_CLIENT) ! { ! UpdateAI(mfSimTime); ! goalTracker->Update(mfSimTime); ! } #ifdef _DEBUG *************** *** 1504,1507 **** --- 1516,1524 ---- pplat->mcKin.mfLat_rad*C_180OVERPI, pplat->mcKin.mfLon_rad*C_180OVERPI); file.WriteString(buff); + + std::stringstream test; + pplat->SaveToStream(test); + pplat->LoadFromStream(test); + idx++; } *************** *** 1839,1842 **** --- 1856,1894 ---- } + /** + * Sets multiplayer mode to MM_OFF, the default single-player state. + * Loads random scenario for the play button default. + */ + void tcSimState::SetMultiplayerOff() + { + multiplayerMode = MM_OFF; + RandInit(); + } + + /** + * Sets multiplayer mode to MM_CLIENT. In client mode sim state only + * performs updates necessary to predict game state in between server + * updates to reduce apparent lag. The real work is done on the server. + * Client updates are for visual smoothness only. + * + * Creates a single sensor map for client player's sensor tracks. + * Client player alliance is always set to 1 (for now). + */ + void tcSimState::SetMultiplayerClient() + { + Clear(); + mcSensorMap.CreateMapForAlliance(1); // alliance 1 is always own-alliance + multiplayerMode = MM_CLIENT; + } + + /** + * Sets multiplayer mode to MM_SERVER. Server mode performs all of + * the simulation done in single player / MM_OFF mode. + */ + void tcSimState::SetMultiplayerServer() + { + multiplayerMode = MM_SERVER; + RandInit(); + } void tcSimState::SetScenarioDescription(std::string s) *************** *** 1889,1893 **** /********************************************************************/ tcSimState::tcSimState() ! : dateZulu(2000,4,10,5,0,0) { mpCommandInterface = NULL; --- 1941,1946 ---- /********************************************************************/ tcSimState::tcSimState() ! : dateZulu(2000,4,10,5,0,0), ! multiplayerMode(MM_OFF) { mpCommandInterface = NULL; Index: tcNetworkView.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcNetworkView.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tcNetworkView.cpp 7 Apr 2004 00:41:08 -0000 1.10 --- tcNetworkView.cpp 9 Apr 2004 03:08:09 -0000 1.11 *************** *** 35,38 **** --- 35,39 ---- #include "network/tcMultiplayerInterface.h" #include "wxcommands.h" + #include "tcSimState.h" using namespace Gdiplus; *************** *** 179,190 **** // switching to client mode also terminates all connections ! if (mode <= 1) { tcMultiplayerInterface::Get()->MakeClient(); } - else if (mode == 2) { tcMultiplayerInterface::Get()->MakeServer(); } --- 180,197 ---- // switching to client mode also terminates all connections ! if (mode == 0) { tcMultiplayerInterface::Get()->MakeClient(); + tcSimState::Get()->SetMultiplayerOff(); + } + else if (mode <= 1) + { + tcMultiplayerInterface::Get()->MakeClient(); + tcSimState::Get()->SetMultiplayerClient(); } else if (mode == 2) { tcMultiplayerInterface::Get()->MakeServer(); + tcSimState::Get()->SetMultiplayerServer(); } *************** *** 192,195 **** --- 199,204 ---- networkMode = mode; + + event.Skip(); // send event on to application } Index: tcGameObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcGameObject.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** tcGameObject.cpp 21 Mar 2004 21:03:27 -0000 1.11 --- tcGameObject.cpp 9 Apr 2004 03:08:09 -0000 1.12 *************** *** 30,33 **** --- 30,59 ---- #include "tcSimState.h" + + void tsRelativePosition::LoadFromStream(std::stringstream& buffer) + { + buffer.read((char*)&dx, sizeof(dx)); + buffer.read((char*)&dy, sizeof(dy)); + buffer.read((char*)&dz, sizeof(dz)); + buffer.read((char*)&yaw, sizeof(yaw)); + buffer.read((char*)&pitch, sizeof(pitch)); + buffer.read((char*)&roll, sizeof(roll)); + buffer.read((char*)&isVisible, sizeof(isVisible)); + } + + void tsRelativePosition::SaveToStream(std::stringstream& buffer) + { + buffer.write((char*)&dx, sizeof(dx)); + buffer.write((char*)&dy, sizeof(dy)); + buffer.write((char*)&dz, sizeof(dz)); + buffer.write((char*)&yaw, sizeof(yaw)); + buffer.write((char*)&pitch, sizeof(pitch)); + buffer.write((char*)&roll, sizeof(roll)); + buffer.write((char*)&isVisible, sizeof(isVisible)); + } + + + + tcMapData* tcGameObject::mapData = NULL; Database::tcDatabase* tcGameObject::database = NULL; *************** *** 230,233 **** --- 256,307 ---- /** + * Loads object state from stream + */ + void tcGameObject::LoadFromStream(std::stringstream& buffer) + { + rel_pos.LoadFromStream(buffer); + + buffer.read((char*)&mnModelType, sizeof(mnModelType)); + buffer.read((char*)&mnID, sizeof(mnID)); + + mzClass << buffer; + + buffer.read((char*)&mnDBKey, sizeof(mnID)); + + mzUnit << buffer; + + buffer.read((char*)&mnAlliance, sizeof(mnAlliance)); + buffer.read((char*)&mfStatusTime, sizeof(mfStatusTime)); + + mcKin.LoadFromStream(buffer); + + buffer.read((char*)&mfDamageLevel, sizeof(mfDamageLevel)); + } + + /** + * Saves object state to stream + */ + void tcGameObject::SaveToStream(std::stringstream& buffer) + { + rel_pos.SaveToStream(buffer); + + buffer.write((char*)&mnModelType, sizeof(mnModelType)); + buffer.write((char*)&mnID, sizeof(mnID)); + + mzClass >> buffer; + + buffer.write((char*)&mnDBKey, sizeof(mnID)); + + mzUnit >> buffer; + + buffer.write((char*)&mnAlliance, sizeof(mnAlliance)); + buffer.write((char*)&mfStatusTime, sizeof(mfStatusTime)); + + mcKin.SaveToStream(buffer); + + buffer.write((char*)&mfDamageLevel, sizeof(mfDamageLevel)); + } + + /** * */ Index: tcGameObjIterator.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcGameObjIterator.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcGameObjIterator.cpp 12 Feb 2004 01:54:49 -0000 1.2 --- tcGameObjIterator.cpp 9 Apr 2004 03:08:09 -0000 1.3 *************** *** 44,47 **** --- 44,48 ---- currentPos = -1; currentObj = NULL; + nIterated = 1; return; } Index: Game.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/Game.cpp,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** Game.cpp 7 Apr 2004 00:41:08 -0000 1.74 --- Game.cpp 9 Apr 2004 03:08:08 -0000 1.75 *************** *** 81,84 **** --- 81,85 ---- EVT_COMMAND(ID_SECONDARYHOOK, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::SecondaryHook) EVT_COMMAND(ID_SETBRIEFING, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::SetBriefingMode) + EVT_COMMAND(ID_MULTIPLAYERMODE, wxEVT_COMMAND_BUTTON_CLICKED , tcGame::SetMultiplayerMode) EVT_COMMAND(ID_SETPAUSE, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::SetPauseMode) EVT_COMMAND(ID_SET3D, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::Set3D) *************** *** 136,139 **** --- 137,141 ---- directorTime = 0; nLastCount = 0; + multiplayerMode = 0; // single-player default mnBriefingWidth = 350; *************** *** 384,388 **** InitializeScenarioSelectView(); ! /*** Init edit control ***/ --- 386,390 ---- InitializeScenarioSelectView(); ! tcMultiplayerInterface::Get()->SetEvtHandler(this); /*** Init edit control ***/ *************** *** 943,946 **** --- 945,960 ---- /** + * Set multiplayer mode + */ + void tcGame::SetMultiplayerMode(wxCommandEvent& event) + { + int mode = event.m_extraLong; + + if (multiplayerMode == mode) return; + + multiplayerMode = mode; + } + + /** * Pause mode change through wxWindows event. * State stored in event.m_extraLong *************** *** 1089,1092 **** --- 1103,1107 ---- * Perform frame update applicable to current screen mode. * Update window status and draw windows. + * TODO: clean this up */ void tcGame::UpdateForScreenMode() *************** *** 1100,1103 **** --- 1115,1119 ---- briefingConsoleBottom->SetActive(false); optionsView->SetActive(false); + networkView->SetActive(false); tacticalMap->SetActive(drawTacticalMap); infoConsole->SetActive(drawEdgeWindows); *************** *** 1126,1129 **** --- 1142,1146 ---- briefingConsoleBottom->SetActive(drawEdgeWindows); optionsView->SetActive(false); + networkView->SetActive(false); tacticalMap->SetActive(drawTacticalMap); infoConsole->SetActive(false); *************** *** 1148,1151 **** --- 1165,1169 ---- briefingConsoleBottom->SetActive(false); optionsView->SetActive(true); + networkView->SetActive(false); tacticalMap->SetActive(false); infoConsole->SetActive(false); *************** *** 1156,1159 **** --- 1174,1191 ---- optionsView->Draw(); } + else if (meScreenMode == NETWORK) + { + briefingConsoleLeft->SetActive(false); + briefingConsoleBottom->SetActive(false); + optionsView->SetActive(false); + networkView->SetActive(true); + tacticalMap->SetActive(false); + infoConsole->SetActive(false); + hookInfo->SetActive(false); + oobView->SetActive(false); + objectControl->SetActive(false); + viewer->SetActive(false); + networkView->Draw(); + } } *************** *** 1219,1222 **** --- 1251,1257 ---- } + // update multiplayer interface at start and end of this method + tcMultiplayerInterface::Get()->Update(); + // periodically reset frame counter if (snFrameCount % 150 == 0) *************** *** 1292,1296 **** } ! director->Update(directorTime); mcGameView.Update(gameTime); --- 1327,1342 ---- } ! /* Skip director update for multiplayer until ! ** this is fixed. Currently there is no way to send briefing ! ** state over to client. ! */ ! if (multiplayerMode == 0) ! { ! director->Update(directorTime); ! } ! else ! { ! director->Update(1000); ! } mcGameView.Update(gameTime); *************** *** 1370,1373 **** --- 1416,1422 ---- } + // update multiplayer interface at start and end of this method + tcMultiplayerInterface::Get()->Update(); + return mbQuit; } *************** *** 1561,1569 **** return; case WXK_F5: if (meScreenMode == TACTICAL) { meScreenMode = TACTICALBRIEF; - // briefingConsoleLeft->Print("BRIEFING VIEW via F5"); - // briefingConsoleBottom->Print(" "); } else if (meScreenMode == TACTICALBRIEF) --- 1610,1617 ---- return; case WXK_F5: + // toggle briefing screen mode if (meScreenMode == TACTICAL) { meScreenMode = TACTICALBRIEF; } else if (meScreenMode == TACTICALBRIEF) *************** *** 1572,1575 **** --- 1620,1629 ---- } return; + case WXK_F6: + if (multiplayerMode != 0) + { + meScreenMode = NETWORK; + } + return; case WXK_F8: viewer->ToggleWireframe(); |