The podium arrived as a hard cut: the race was still on screen one frame and the stand was there the next. The race has its own fade-to-black already, and it was being suppressed to keep the fade from blacking out the podium behind it - which threw away the transition along with the problem. Now the two are sequenced. StopMission lets the race fade out as it always did and posts the podium to itself for when that fade has landed on black; the handler stands the finishers up behind the black and ramps back in. The fade-in is the end-of-mission fade run backwards - the same multiply on the fog colour and both fog distances, from nothing up to what the Winners Circle asked for. Timings: 0.7s of fade-out and black, then a 0.45s fade in. Both come out of the 11 second hold, leaving about ten seconds of podium. RP412PODIUMFADEIN sets the ramp. Verified by measuring frame brightness across the transition. The race falls away and the screen reaches black, then the stand comes up - and with the ramp stretched to 3s to make it resolvable at a half-second sampling interval, it climbs 71.8, 77, 78.7, 79.7, 80.5 rather than stepping, so it is a real fade and not a cut arriving late. The camera also comes down and tilts up across the tiers, which is how a podium wants to be shot. It is a balance in both directions: drop it further or tilt harder and the sky takes the top half while the winner's spot slides off the bottom of the frame; tilt down instead and the shot turns into a floor plan. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "..\munga_l4\l4app.h"
|
|
|
|
//##########################################################################
|
|
//###################### RP4L4Application ############################
|
|
//##########################################################################
|
|
|
|
class RPL4Application : public L4Application
|
|
{
|
|
public:
|
|
RPL4Application(HINSTANCE hInstance, HWND hWnd, ResourceFile *resource_file, ClassID class_ID=L4ApplicationClassID, SharedData &shared_data=DefaultData);
|
|
~RPL4Application();
|
|
|
|
private:
|
|
Registry* MakeRegistry();
|
|
|
|
VideoRenderer* MakeVideoRenderer();
|
|
|
|
AudioRenderer* MakeAudioRenderer();
|
|
|
|
GaugeRenderer* MakeGaugeRenderer(int *secondaryIndex, int *aux1Index, int *aux2Index);
|
|
|
|
ModeManager* MakeModeManager();
|
|
|
|
Mission* MakeMission(NotationFile *notation_file, ResourceFile *resources);
|
|
|
|
Entity* MakeViewpointEntity(Entity__MakeMessage *);
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// The Winners Circle.
|
|
//
|
|
// The podium is engine content that only the mission-review build ever
|
|
// ran: geometry, the eight ranked dropzones and the presentation code all
|
|
// ship, but the sequence lived on RPL4PlaybackApplication behind a spool
|
|
// file. This is the same sequence on the path the pods actually race.
|
|
//
|
|
public:
|
|
enum
|
|
{
|
|
// posted at the buzzer, fires once the race has faded out
|
|
WinnersCircleMessageID = L4Application::NextMessageID,
|
|
NextMessageID
|
|
};
|
|
|
|
static const HandlerEntry
|
|
MessageHandlerEntries[];
|
|
static MessageHandlerSet& GetMessageHandlers();
|
|
static Derivation *GetClassDerivations();
|
|
static SharedData DefaultData;
|
|
|
|
void
|
|
StopMissionMessageHandler(StopMissionMessage *message);
|
|
|
|
// the podium proper, once the screen is already black
|
|
void
|
|
WinnersCircleMessageHandler(Receiver::Message *message);
|
|
|
|
private:
|
|
// stand the finishers on their ranked spots and frame the shot
|
|
void
|
|
ShowWinnersCircle();
|
|
};
|