Files
RP411/RP_L4/RPL4GRND.cpp
T
CydandClaude Opus 4.8 4abbf8879f Initial import of Red Planet v4.10 Win32 source
Imports the current Win32 source for the pod-racing game 'Red Planet',
built on the MUNGA engine and its L4 (Win32/DirectX) platform layer:

- MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend
- RP / RP_L4: Red Planet game logic and Win32 application
- DivLoader, Setup1: asset loader and installer project
- lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies

Removed stale Subversion metadata and added .gitignore/.gitattributes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 07:59:51 -05:00

271 lines
7.6 KiB
C++

#include "rpl4.h"
#pragma hdrstop
#include "rpl4grnd.h"
#include "..\munga_l4\l4lamp.h"
#include "..\munga\terrain.h"
#include "..\rp\demopack.h"
#include "rpl4gaug.h"
#include "rpl4mssn.h"
#include "..\munga\app.h"
#include <iostream>
// #define LOCAL_TEST
#if defined(LOCAL_TEST)
# define Test_Tell(n) std::cout << n << std::flush
#else
# define Test_Tell(n)
#endif
//
//#############################################################################
// RPL4MethodDescription list
//#############################################################################
//
//STUBBED: UNKNOWN RB 1/15/07
extern
MethodDescription
*L4MethodDescription[];
MethodDescription
RPL4ChainToPrevious = METHOD_DESCRIPTION_CHAIN(L4MethodDescription);
MethodDescription
*RPL4MethodDescription[] =
{
&Compass::methodDescription,
&ThreatIndicator::methodDescription,
&NavDisplay::methodDescription,
&GPS::methodDescription,
&Ranking::methodDescription,
&ConfigMap::methodDescription,
&MessageBoard::methodDescription,
&RPL4ChainToPrevious
};
//
//#############################################################################
// RPL4GaugeRenderer
//#############################################################################
//
RPL4GaugeRenderer::RPL4GaugeRenderer(bool windowed, int *secondaryIndex, int *aux1Gauge, int *aux2Gauge)
:
L4GaugeRenderer(windowed, secondaryIndex, aux1Gauge, aux2Gauge)
{
Check_Pointer(this);
static unsigned char
mask_list[] =
{ 0xFF, 0xBF, 0x7F, 0x3F };
//----------------------------------------
// Create lamp manager
//----------------------------------------
Check(application);
LBE4ControlsManager
*controls_manager = (LBE4ControlsManager*)
(application->GetControlsManager());
Check(controls_manager);
lampManager = new L4LampManager(controls_manager);
Register_Object(lampManager);
//----------------------------------------
// create warehouse
//----------------------------------------
warehousePointer = new L4Warehouse();
Register_Object(warehousePointer);
//----------------------------------------
// Initialize interpreter
//----------------------------------------
BuildConfigurationFile(
"gauge\\l4gauge.cfg",
RPL4MethodDescription
);
//----------------------------------------
// Enable secondary palette flashing
//----------------------------------------
((SVGA16 *) graphicsDisplay)->FlashPalette(
SVGA16::SecondaryPalette,
2.0, // two cycles (8 changes) per second
mask_list
);
Check_Fpu();
}
//
//#############################################################################
// ~RPL4GaugeRenderer
//#############################################################################
//
RPL4GaugeRenderer::~RPL4GaugeRenderer()
{
Check(this);
//----------------------------------------
// Make sure all gauges removed BEFORE
// we destroy the warehouse!!
//----------------------------------------
Remove(0);
//----------------------------------------
// destroy warehouse
//----------------------------------------
Check(warehousePointer);
Unregister_Object(warehousePointer);
delete warehousePointer;
warehousePointer = NULL;
Check_Fpu();
}
//
//#############################################################################
// TestInstance
//#############################################################################
//
Logical
RPL4GaugeRenderer::TestInstance() const
{
return GaugeRenderer::TestInstance();
}
//
//#############################################################################
// NotifyOfNewInterestingEntity
//#############################################################################
//
void
RPL4GaugeRenderer::NotifyOfNewInterestingEntity(Entity *entity)
{
Test_Tell("RPL4GaugeRenderer::NotifyOfNewInterestingEntity\n");
Check(this);
Check(entity);
//------------------------------------------------------
// If the entity has no gauge representation, discard it
//------------------------------------------------------
Check(application);
Check(application->GetResourceFile());
ResourceDescription
*resource_description =
application->GetResourceFile()->SearchList(
entity->GetResourceID(),
ResourceDescription::GaugeImageStreamResourceType
);
Test_Tell("resource_description = " << resource_description << "\n");
if (resource_description != NULL)
{
//
//---------------------------------------------------------
// Place object in either moving list or static array
//---------------------------------------------------------
//
if (entity->IsDerivedFrom(*Mover::GetClassDerivations()))
{
movingEntities.Add(entity);
}
else if (entity->IsDerivedFrom(*Terrain::GetClassDerivations()))
{
staticEntities.Add(entity);
}
}
//------------------------------------------------------
// Chain to "ancestor" method
//------------------------------------------------------
L4GaugeRenderer::NotifyOfNewInterestingEntity(entity);
Check_Fpu();
}
//
//#############################################################################
// StartImplementation
//#############################################################################
//
void
RPL4GaugeRenderer::LoadMissionImplementation(Mission *mission)
{
Check(this);
# if defined (LOCAL_TEST)
Tell("RPL4GaugeRenderer::LoadMissionImplementation()\n");
# endif
//------------------------------------------------------
// Chain to "ancestor" method
//------------------------------------------------------
L4GaugeRenderer::LoadMissionImplementation(mission);
Check_Fpu();
}
//
//#############################################################################
// StopImplementation
//#############################################################################
//
void
RPL4GaugeRenderer::ShutdownImplementation()
{
Check(this);
# if defined (LOCAL_TEST)
Tell("RPL4GaugeRenderer::ShutdownImplementation()\n");
# endif
//------------------------------------------------------
// Chain to "ancestor" method
//------------------------------------------------------
L4GaugeRenderer::ShutdownImplementation();
Check_Fpu();
}
//
//#############################################################################
// NotifyOfNewUninterestingEntity
//#############################################################################
//
void
RPL4GaugeRenderer::NotifyOfBecomingUninterestingEntity(Entity *entity)
{
Test_Tell("RPL4GaugeRenderer::NotifyOfBecomingUninterestingEntity\n");
Check(this);
Check(entity);
//------------------------------------------------------
// If the entity has no gauge representation, discard it
//------------------------------------------------------
Check(application);
Check(application->GetResourceFile());
ResourceDescription
*resource_description =
application->GetResourceFile()->SearchList(
entity->GetResourceID(),
ResourceDescription::GaugeImageStreamResourceType
);
Test_Tell("resource_description = " << resource_description << "\n");
if (resource_description != NULL)
{
//---------------------------------------------------------
// Place entity from either moving list or static array
//---------------------------------------------------------
if (entity->IsDerivedFrom(*Mover::GetClassDerivations()))
{
movingEntities.Remove(entity);
}
else if (entity->IsDerivedFrom(*DemolitionPack::GetClassDerivations()))
{
movingEntities.Remove(entity);
}
else if (entity->IsDerivedFrom(*Terrain::GetClassDerivations()))
{
staticEntities.Remove(entity);
}
}
//------------------------------------------------------
// Chain to "ancestor" method
//------------------------------------------------------
L4GaugeRenderer::NotifyOfBecomingUninterestingEntity(entity);
Check_Fpu();
}