diff --git a/MUNGA_L4/L4VB16.cpp b/MUNGA_L4/L4VB16.cpp index 5801e48..cb888e2 100644 --- a/MUNGA_L4/L4VB16.cpp +++ b/MUNGA_L4/L4VB16.cpp @@ -3981,7 +3981,15 @@ static RadarPlacement { "RIGHTCENTRE", RadarMidRight } }; - cached = RadarBottomCenter; + // + // The pod had it dead centre under the viewscreen, so that is the + // default for a pod. A Live Cam is a shot, not a cockpit: dead + // centre is the worst place to put a panel on a picture, so a + // camera station defaults to the bottom-left corner instead. + // L4RADARPOS still overrides either way. + // + cached = Application::IsCameraStation() + ? RadarBottomLeft : RadarBottomCenter; const char *text = getenv("L4RADARPOS"); if (text != NULL) diff --git a/RP_L4/RPL4GAUG.cpp b/RP_L4/RPL4GAUG.cpp index 55f80f8..65e5ad3 100644 --- a/RP_L4/RPL4GAUG.cpp +++ b/RP_L4/RPL4GAUG.cpp @@ -1557,6 +1557,21 @@ void DrawNames(worldToView); localView.DetachRecorder(); + // + // RP412CAMLOG: the sweep reached the drawing phase at all. If the + // counts above are non-zero and this never appears, the gauge + // slice is not getting this display as far as phase 3. + // + if (RPCameraLog()) + { + static int drew = 0; + if (drew < 3) + { + ++drew; + DEBUG_STREAM << "CamLog: nav drew (phase 3 reached)\n" << std::flush; + } + } + // deliberately falls through into default case default: @@ -1631,6 +1646,26 @@ void Test_Tell("x= " << xMin << "..." << xMax << "\n"); Test_Tell("y= " << yMin << "..." << yMax << "\n"); Test_Tell("z= " << zMin << "..." << zMax << "\n"); + + // + // RP412CAMLOG. Once, not per sweep - this runs at the gauge rate and + // would drown the log. Says whether the nav display has a sane centre + // and scale at all, which is the first question when the map comes up + // empty on a camera station. + // + if (RPCameraLog()) + { + static int said = 0; + if (!said) + { + said = 1; + DEBUG_STREAM << "CamLog: nav scale " << currentScale + << "m across, " << pixelsPerMeter << " px/m, centre " + << viewing_position.x << "," << viewing_position.z + << " bounds x " << xMin << ".." << xMax + << " z " << zMin << ".." << zMax << "\n" << std::flush; + } + } Check_Fpu(); } @@ -1661,6 +1696,25 @@ void xMin, yMin, zMin, xMax, yMax, zMax ); + + // + // RP412CAMLOG. The counts are the whole question: furniture with no + // content means either nothing fell inside the bounds above, or the + // drawing steps are not being reached. Reported for the first few + // sweeps only - the lists are rebuilt at the gauge rate. + // + if (RPCameraLog()) + { + static int sweeps = 0; + if (sweeps < 5) + { + ++sweeps; + ChainIteratorOf statics(staticEntityList.GetInstanceList()); + ChainIteratorOf movers(movingEntityList.GetInstanceList()); + DEBUG_STREAM << "CamLog: nav in bounds - " << statics.GetSize() + << " static, " << movers.GetSize() << " moving\n" << std::flush; + } + } Check_Fpu(); } @@ -2851,6 +2905,36 @@ void intercomEnabled = intercom->GetChannel() != Icom::undefinedChannel; } + // + // RP412CAMLOG. Says what the ranking widget can see: how many + // players are in the group and what rank and score each carries. + // A score that never moves is either not replicated to a camera + // host or simply has not changed - this tells the two apart. Every + // few seconds, not every sweep. + // + if (RPCameraLog()) + { + static Scalar next_say = 0.0f; + if ((Scalar) Now() >= next_say) + { + next_say = ((Scalar) Now()) + 5.0f; + + ChainIteratorOf say(all_players->groupMembers); + Player *seen; + int shown = 0; + DEBUG_STREAM << "CamLog: ranking sees " << say.GetSize() + << " player(s):"; + while ((seen = (Player*) say.ReadAndNext()) != NULL && shown < 8) + { + ++shown; + DEBUG_STREAM << " [bmp " << seen->playerBitmapIndex + << " rank " << seen->playerRanking + << " score " << (int) seen->currentScore << "]"; + } + DEBUG_STREAM << " ourRank=" << currentRanking << "\n" << std::flush; + } + } + //------------------------------------------- // Clear the current array //-------------------------------------------