[Gcblue-commits] gcb_wx/src/sim tcAeroAirObject.cpp,1.7,1.8 tcAirObject.cpp,1.12,1.13 tcMissileObjec
Status: Alpha
Brought to you by:
ddcforge
|
From: Dewitt C. <ddc...@us...> - 2004-11-07 03:42:06
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4233/src/sim Modified Files: tcAeroAirObject.cpp tcAirObject.cpp tcMissileObject.cpp tcObjectControl.cpp tcRadar.cpp tcSimState.cpp Log Message: Added optical sensor model, fixed generic model display for sensor tracks Index: tcSimState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSimState.cpp,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** tcSimState.cpp 6 Nov 2004 15:13:42 -0000 1.56 --- tcSimState.cpp 7 Nov 2004 03:40:45 -0000 1.57 *************** *** 174,178 **** mcDefaultRadar.SetMountAz(afSensorAz); ! if (mcDefaultRadar.IsSemiactive()) { mcDefaultRadar.SetIlluminator(fcID, fcIdx); --- 174,178 ---- mcDefaultRadar.SetMountAz(afSensorAz); ! if (mcDefaultRadar.IsSemiactive() || mcDefaultRadar.IsCommandReceiver()) { mcDefaultRadar.SetIlluminator(fcID, fcIdx); *************** *** 1187,1195 **** } AddPlatform(child); } if (launch_count) { gameObj->toLaunch.clear(); - tcSound::Get()->PlayEffect(SEFFECT_JETLAUNCH); } } --- 1187,1209 ---- } AddPlatform(child); + + // sound effects + if (mpUserInfo->IsOwnAlliance(gameObj->mnAlliance)) + { + if (dynamic_cast<tcHeloObject*>(child)) + { + tcSound::Get()->PlayEffect(SEFFECT_HELOLAUNCH); + } + else if (dynamic_cast<tcAirObject*>(child)) + { + tcSound::Get()->PlayEffect(SEFFECT_JETLAUNCH); + } + + } + } if (launch_count) { gameObj->toLaunch.clear(); } } *************** *** 1768,1773 **** } ! /********************************************************************/ ! // returns track associated with FIRST sensor only int tcSimState::GetSeekerTrack(long anKey, tcTrack& track) { --- 1782,1788 ---- } ! /** ! * @returns track associated with FIRST sensor only ! */ int tcSimState::GetSeekerTrack(long anKey, tcTrack& track) { *************** *** 1778,1782 **** if (tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(pplat)) { ! tcSensorState *pSS = pMissileObj->GetSensorState(); if ((pSS==NULL)||(pSS->mnMode != SSMODE_SEEKERTRACK)) {return 0;} track = pSS->mcTrack; --- 1793,1799 ---- if (tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(pplat)) { ! if (pMissileObj->GetCurrentGuidanceMode() == GM_COMMAND) return 0; ! ! tcSensorState* pSS = pMissileObj->GetSensorState(); if ((pSS==NULL)||(pSS->mnMode != SSMODE_SEEKERTRACK)) {return 0;} track = pSS->mcTrack; Index: tcMissileObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcMissileObject.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** tcMissileObject.cpp 6 Nov 2004 15:13:42 -0000 1.19 --- tcMissileObject.cpp 7 Nov 2004 03:40:45 -0000 1.20 *************** *** 167,171 **** mcSensorState.mnMode = SSMODE_SEEKERACQUIRE; mcSensorState.mcTrack.mnID = pLauncher->mnTargetID; ! if (mcSensorState.IsSemiactive()) { mcSensorState.SetIlluminator( --- 167,172 ---- mcSensorState.mnMode = SSMODE_SEEKERACQUIRE; mcSensorState.mcTrack.mnID = pLauncher->mnTargetID; ! mcSensorState.mfLastScan = -10; // ensure rapid update to get a valid track for guidance ! if (mcSensorState.IsSemiactive() || mcSensorState.IsCommandReceiver()) { mcSensorState.SetIlluminator( *************** *** 199,202 **** --- 200,211 ---- /** + * @return time remaining in seconds for rocket motor thrust + */ + float tcMissileObject::RuntimeRemaining() + { + return mpDBObject->mfBoostTime_s + mpDBObject->mfSustTime_s - msKState.mfFlightTime; + } + + /** * */ *************** *** 338,354 **** mfInterceptTime = tti_s; - - //interceptPitch_rad = atanf(0.001f*(msWaypoint.mfAlt_m - mcKin.mfAlt_m)/ - // mfRangeToObjective_km); useInterceptPitch = true; } break; case GM_SENSOR1: ! if (!mcSensorState.GetActive()) { mcSensorState.SetActive(true); ! mcSensorState.mnMode = SSMODE_SEEKERSEARCH; ! mfGuidanceUpdateInterval = 0.5f; ! } if (mcSensorState.mnMode == SSMODE_SEEKERTRACK) { --- 347,392 ---- mfInterceptTime = tti_s; useInterceptPitch = true; } break; + case GM_COMMAND: + { + // command uses the sensor + tcTrack predictedtrack; + float tti_s; + mcSensorState.mcTrack.GetPrediction(predictedtrack, afStatusTime); + + mcKin.GetInterceptData3D(predictedtrack, mfGoalHeading_rad, + interceptPitch_rad, tti_s, mfRangeToObjective_km); + + mfRangeToObjective_km *= C_RADTOKM; // convert to km + + if (msKState.mfAltitude_m <= 4.0) + { + if (interceptPitch_rad < 0) {interceptPitch_rad = 0;} + } + + useInterceptPitch = (pSegmentInfo->meAltitudeMode == AM_INTERCEPT); + mfInterceptTime = tti_s; + } + break; case GM_SENSOR1: ! if (mcSensorState.IsCommandReceiver()) ! { ! /* Switching from command guidance to seeker track. ! ** This does not support a transition where command link ! ** is still active while the seeker attempts to acquire */ ! mcSensorState.SetCommandState(false); // clear command mode ! mcSensorState.mnMode = SSMODE_SEEKERTRACK; ! } ! else if (!mcSensorState.GetActive()) { mcSensorState.SetActive(true); ! mcSensorState.mnMode = SSMODE_SEEKERSEARCH; ! } ! ! mfGuidanceUpdateInterval = 0.5f; ! ! if (mcSensorState.mnMode == SSMODE_SEEKERTRACK) { *************** *** 356,362 **** float tti_s; mcSensorState.mcTrack.GetPrediction(predictedtrack,afStatusTime); ! //mcKin.GetInterceptData2D(predictedtrack, mfGoalHeading_rad, tti_s); mcKin.GetInterceptData3D(predictedtrack, mfGoalHeading_rad, interceptPitch_rad, tti_s, mfRangeToObjective_km); mfRangeToObjective_km *= C_RADTOKM; // convert to km --- 394,401 ---- float tti_s; mcSensorState.mcTrack.GetPrediction(predictedtrack,afStatusTime); ! mcKin.GetInterceptData3D(predictedtrack, mfGoalHeading_rad, interceptPitch_rad, tti_s, mfRangeToObjective_km); + mfRangeToObjective_km *= C_RADTOKM; // convert to km *************** *** 420,423 **** --- 459,463 ---- if (useInterceptPitch) { + wxASSERT(!_isnan(interceptPitch_rad)); mfGoalPitch_rad = interceptPitch_rad; } Index: tcAeroAirObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcAeroAirObject.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tcAeroAirObject.cpp 2 Nov 2004 04:23:56 -0000 1.7 --- tcAeroAirObject.cpp 7 Nov 2004 03:40:45 -0000 1.8 *************** *** 30,33 **** --- 30,35 ---- #include "tcAero.h" #include "math_constants.h" + #include "tc3DModel.h" + #include "tcParticleEffect.h" #ifdef _DEBUG *************** *** 103,106 **** --- 105,128 ---- } + void tcAeroAirObject::UpdateEffects() + { + if (model) + { + if (mfDamageLevel > 0.1f) + { + model->SetSmokeMode(tcParticleEffect::DAMAGE); + } + else if (throttleFraction > 1.0f) + { + model->SetSmokeMode(tcParticleEffect::AFTERBURNER); + } + else + { + model->SetSmokeMode(tcParticleEffect::OFF); + } + model->UpdateEffects(); + } + } + void tcAeroAirObject::UpdateHeading(float dt_s) { *************** *** 118,121 **** --- 140,145 ---- wxASSERT(mpDBObject); + + UpdateEffects(); UpdateFormationGuidance(); // formation heading/speed calculation Index: tcObjectControl.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcObjectControl.cpp,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** tcObjectControl.cpp 6 Nov 2004 15:13:42 -0000 1.21 --- tcObjectControl.cpp 7 Nov 2004 03:40:45 -0000 1.22 *************** *** 1250,1257 **** } bool bAccepted = ProcessSensorPanelButton(nSensor, nCol); - if (bAccepted) - { - tcSound::Get()->PlayEffect(SEFFECT_PING3); - } } else if (msHOI.mrectArc.ContainsPoint((float)point.x,(float)point.y)) --- 1250,1253 ---- *************** *** 1402,1405 **** --- 1398,1411 ---- const tcSensorState* pSensorState = pPlatformObj->GetSensor(sensorIdx); pPlatformObj->SetSensorState((unsigned)sensorIdx, !pSensorState->GetActive()); + + if (pSensorState->GetActive()) + { + tcSound::Get()->PlayEffect(SEFFECT_RADARON); + } + else + { + tcSound::Get()->PlayEffect(SEFFECT_RADAROFF); + } + return true; } Index: tcAirObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcAirObject.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** tcAirObject.cpp 2 Nov 2004 04:23:56 -0000 1.12 --- tcAirObject.cpp 7 Nov 2004 03:40:45 -0000 1.13 *************** *** 1,4 **** /** ! ** @file tcAirObject.cpp */ /* Copyright (C) 2003-2004 Dewitt Colclough (de...@tw...) --- 1,5 ---- /** ! ** @file tcAirObject.cpp ! ** Basic aircraft model */ /* Copyright (C) 2003-2004 Dewitt Colclough (de...@tw...) *************** *** 28,31 **** --- 29,34 ---- #include "tcAirObject.h" #include "tcGenericDBObject.h" + #include "tc3DModel.h" + #include "tcParticleEffect.h" #include "common/tcObjStream.h" *************** *** 240,243 **** --- 243,262 ---- } + void tcAirObject::UpdateEffects() + { + if (model) + { + if (mfDamageLevel > 0.1f) + { + model->SetSmokeMode(tcParticleEffect::DAMAGE); + } + else + { + model->SetSmokeMode(tcParticleEffect::OFF); + } + model->UpdateEffects(); + } + } + void tcAirObject::UpdateHeading(float dt_s) { *************** *** 302,305 **** --- 321,334 ---- } + /** + * Limits speed to 100 kts min + */ + void tcAirObject::UpdateSpeed(float dt_s) + { + tcPlatformObject::UpdateSpeed(dt_s); + + if (mcKin.mfSpeed_kts < 100) mcKin.mfSpeed_kts = 100; + } + void tcAirObject::Update(double afStatusTime) { Index: tcRadar.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcRadar.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** tcRadar.cpp 6 Nov 2004 15:13:42 -0000 1.15 --- tcRadar.cpp 7 Nov 2004 03:40:45 -0000 1.16 *************** *** 89,93 **** wxASSERT(mpDBObj); ! if (!mbActive) return false; float illuminatorTargetRange_km = 1e8; --- 89,93 ---- wxASSERT(mpDBObj); ! if (!mbActive && !isCommandReceiver) return false; float illuminatorTargetRange_km = 1e8; *************** *** 185,193 **** /** * @return semi-active illuminator object */ tcRadar* tcRadar::GetSemiactiveIlluminator() { ! wxASSERT(isSemiactive); wxASSERT(simState); --- 185,195 ---- /** + * Also currently used for command guidance, may want to separate these * @return semi-active illuminator object */ tcRadar* tcRadar::GetSemiactiveIlluminator() { ! // !mpDBObj to avoid probs with destuctor ! wxASSERT(isSemiactive || !mpDBObj || mpDBObj->isCommandReceiver); wxASSERT(simState); *************** *** 234,237 **** --- 236,248 ---- /** + * Sets command state of radar. + * @param state true to use command track from "illuminator" platform, false to use seeker + */ + void tcRadar::SetCommandState(bool state) + { + isCommandReceiver = state; + } + + /** * Sets illuminator info for semi-active radars and command receivers. * isCommandReceiver indicates the "radar" is a simple receiver of command *************** *** 490,494 **** mcTrack.mnFlags = (TRACK_HEADING_VALID | TRACK_SPEED_VALID | TRACK_ALT_VALID | TRACK_CLIMB_VALID); ! if (mnMode == SSMODE_SEEKERACQUIRE) { mnMode = SSMODE_SEEKERTRACK; --- 501,505 ---- mcTrack.mnFlags = (TRACK_HEADING_VALID | TRACK_SPEED_VALID | TRACK_ALT_VALID | TRACK_CLIMB_VALID); ! if ((mnMode == SSMODE_SEEKERACQUIRE) && !isCommandReceiver) { mnMode = SSMODE_SEEKERTRACK; *************** *** 548,552 **** { // release fire control track ! if (isSemiactive || isCommandReceiver) { if (tcRadar *illuminator = GetSemiactiveIlluminator()) --- 559,563 ---- { // release fire control track ! if (illuminatorID != -1) { if (tcRadar *illuminator = GetSemiactiveIlluminator()) |