Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

263 lines
6.9 KiB
C++

//===========================================================================//
// File: Driver.cpp //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 03/08/99 DPB Created file //
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Fasa Interactive //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#include "AdeptHeaders.hpp"
#include "Driver.hpp"
#include "DropZone.hpp"
#include "EntityManager.hpp"
#include "Map.hpp"
#include "Mover.hpp"
//#############################################################################
//############################### Driver ##############################
//#############################################################################
Driver::ClassData*
Driver::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Driver::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
DriverClassID,
"Adept::Driver",
BaseClass::DefaultData,
0, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
NULL,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Driver::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Driver*
Driver::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
gos_PushCurrentHeap(g_LibraryHeap);
Driver *new_entity = new Driver(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
gos_PopCurrentHeap();
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Replicator::CreateMessage*
Driver::SaveMakeMessage(MemoryStream *stream, ResourceFile *res_file)
{
Check_Object(this);
Check_Object(stream);
stream->AllocateBytes(sizeof(CreateMessage));
BaseClass::SaveMakeMessage(stream, res_file);
CreateMessage *message =
Cast_Pointer(CreateMessage*, stream->GetPointer());
message->messageLength = sizeof(*message);
Verify(message->initialAge != 0.0f);
message->dropZone = dropZone;
return message;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Driver::Driver(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
Entity(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
isDropped = false;
//
//------------------------------------------------------------------------
//Vehicle needs to be set at a higher level. Player creates and AI links.
//------------------------------------------------------------------------
//
vehicle = NULL;
UsePostCollision();
dropZone = message->dropZone;
//
//---------------------------------------------------
// Only ask for a dropzone if we haven't executed yet
//---------------------------------------------------
//
if (owningConnection == Connection::Local)
{
if (message->initialAge != 0.0f)
{
ElementRenderer::Element *element = vehicle->GetElement();
Check_Object(element);
ReceiveDropZone(element->GetNewLocalToParent());
}
else
{
if(dropZone != NameTable::NullObjectID)
{
DropZone *zone;
zone = EntityManager::GetInstance()->GetDropZone(dropZone);
Check_Object(zone);
Stuff::LinearMatrix4D drop_location = Stuff::LinearMatrix4D::Identity;
drop_location = zone->RequestDrop();
ReceiveDropZone(drop_location);
}
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Driver::Respawn(Entity::CreateMessage *message)
{
Check_Object(this);
Check_Object(message);
BaseClass::Respawn(message);
CreateMessage *driver_message = Cast_Pointer(CreateMessage *, message);
isDropped = false;
//
//------------------------------------------------------------------------
//Vehicle needs to be set at a higher level. Player creates and AI links.
//------------------------------------------------------------------------
//
UsePostCollision();
dropZone = driver_message->dropZone;
//
//---------------------------------------------------
// Only ask for a dropzone if we haven't executed yet
//---------------------------------------------------
//
if (owningConnection == Connection::Local)
{
if (message->initialAge != 0.0f)
{
ElementRenderer::Element *element = vehicle->GetElement();
Check_Object(element);
ReceiveDropZone(element->GetNewLocalToParent());
}
else
{
if(dropZone != NameTable::NullObjectID)
{
DropZone *zone;
zone = EntityManager::GetInstance()->GetDropZone(dropZone);
Check_Object(zone);
Stuff::LinearMatrix4D drop_location = Stuff::LinearMatrix4D::Identity;
drop_location = zone->RequestDrop();
ReceiveDropZone(drop_location);
}
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Driver::~Driver()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Driver::ReceiveDropZone(const Stuff::LinearMatrix4D& drop_location)
{
STOP(("Driver::ReceiveDropZoneMessageHandler : NOT IMPLIMENTED"));
Check_Object(this);
isDropped = true;
vehicle->SetNewLocalToParent(drop_location);
SyncMatrices(true);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Driver::PostCollisionExecute(Time till)
{
Check_Object(this);
POSTCOLLISION_LOGIC("Driver");
SetNewLocalToParent(vehicle->GetLocalToWorld());
SyncMatrices(true);
BaseClass::PostCollisionExecute(till);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Stuff::LinearMatrix4D
Driver::GetEyePoint()
{
return vehicle->GetLocalToWorld();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Driver::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}