Files
TeslaRel410/CODE/RP/MUNGA/SIMULATE.TCP
T
CydandClaude Fable 5 fdd9ac9d97 Initial import: Tesla Release 4.10 (Tesla:BattleTech & Tesla:Red Planet)
Archival snapshot of the Virtual World Entertainment Tesla cockpit
software, 1994-1996: MUNGA engine and L4 pod layer source (Borland
C++ 5.0), BT/RP game code, and game content (models, audio, maps,
gauges, Division renderer data). Includes third-party libraries:
Division dVS/DPL graphics, HMI SOS audio, WATTCP networking.

Files are preserved byte-for-byte (.gitattributes disables all
line-ending conversion). README.md documents the layout, target
hardware, and toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:21:58 -05:00

202 lines
5.5 KiB
Plaintext

//===========================================================================//
// File: model.tst //
// Project: MUNGA Brick: Entity Manager //
// Contents: Implementation details of the entity class //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 12/28/94 JMA Initial coding. //
//---------------------------------------------------------------------------//
// Copyright (C) 1994, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#include "model.thh"
//#############################################################################
// Shared Data Support
//
Derivation
TestEntity::ClassDerivations(Entity::ClassDerivations,"TestEntity");
TestEntity::SharedData
TestEntity::DefaultData(
TestEntity::ClassDerivations,
TestEntity::MessageHandlers,
TestEntity::AttributeIndex,
(Entity::MakeHandler)TestEntity::Make
);
//#############################################################################
// Message Support
//
const Receiver::HandlerEntry
TestEntity::MessageHandlerEntries[]=
{
{
TestEntity::TestMessageID,
(TestEntity::Handler)&TestEntity::TestMessageHandler
}
};
TestEntity::MessageHandlerSet
TestEntity::MessageHandlers(
ELEMENTS(TestEntity::MessageHandlerEntries),
TestEntity::MessageHandlerEntries,
Entity::MessageHandlers
);
void
TestEntity::TestMessageHandler(TestEntity::Message *)
{
localOrigin = Point3D(2.0,2.0,2.0);
};
void
TestEntity::Tester()
{
TestEntity::Message message(
TestEntity::TestMessageID,
sizeof(TestEntity::Message)
);
Dispatch(&message);
}
//#############################################################################
// Attribute Support
//
const TestEntity::IndexEntry
TestEntity::AttributePointers[]=
{
{
TestEntity::VelocityVectorAttributeID,
(Entity::AttributePointer)&TestEntity::velocityVector
}
};
TestEntity::AttributeIndexSet
TestEntity::AttributeIndex(
ELEMENTS(TestEntity::AttributePointers),
TestEntity::AttributePointers,
Entity::AttributeIndex
);
//#############################################################################
// Model Support
//
Logical
TestEntity::Model(Scalar time_slice)
{
Vector3D diff;
diff.Multiply(velocityVector,time_slice);
localOrigin.translation += diff;
localToWorld = localOrigin.translation;
return diff.LengthSquared() >= 0.009f;
}
//#############################################################################
// Construction and Destruction
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
TestEntity::TestEntity(
TestEntity::MakeMessage *creation_message,
TestEntity::SharedData &virtual_data
):
Entity(creation_message,virtual_data)
{
SetValidFlag();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
TestEntity*
TestEntity::Make(TestEntity::MakeMessage *creation_message)
{
return new TestEntity(creation_message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
TestEntity::~TestEntity()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Logical
Entity::TestClass()
{
DEBUG_STREAM << "Starting Entity test...\n";
//
//------------------
// Test construction
//------------------
//
TestEntity::MakeMessage
message1(
TestEntity::MakeMessageID,
sizeof(TestEntity::MakeMessage),
TestEntity::TrivialEntityClassID,
0,
TestEntity::DefaultFlags,
LinearOrigin::Identity
);
TestEntity *test_entity = TestEntity::Make(&message1);
Register_Object(test_entity);
//
//------------------------
// Test attribute pointers
//------------------------
//
test_entity->localOrigin = Point3D(1.0f,1.0f,1.0f);
LinearOrigin *origin =
(LinearOrigin*)test_entity->GetAttributePointer(LocalOriginAttributeID);
Test(origin->translation == Point3D(1.0f,1.0f,1.0f));
test_entity->velocityVector = Vector3D(0.0f,0.0f,1.0f);
Vector3D *velocity =
(Vector3D*)test_entity->
GetAttributePointer(TestEntity::VelocityVectorAttributeID);
Test(*velocity == Vector3D(0.0f,0.0f,1.0f));
//
//---------------------
// Test Model execution
//---------------------
//
test_entity->RunSimulation(0.1f);
Test(origin->translation == Point3D(1.0f,1.0f,1.0f));
test_entity->SetSimulation((Model::Simulation)&TestEntity::Model);
Test(!test_entity->RunSimulation(0.05f));
Test(origin->translation == Point3D(1.0f,1.0f,1.05f));
//
//-------------------------------
// Test Update message generation
//-------------------------------
//
t = test_entity->creationTime;
t += 0.1f;
UpdateMessage *update = test_entity->Execute(t);
Test(update);
Test(update->localOrigin.translation == Point3D(1.0f,1.0f,1.15f));
Unregister_Object(update);
delete update;
//
//-----------------
// Test destruction
//-----------------
//
Unregister_Object(test_entity);
delete test_entity;
return True;
}