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

1810 lines
48 KiB
C++

#include "stdafx.h"
#include <Stuff\StuffHeaders.hpp>
#include "EditorWaypoint.h"
#include <Adept\Mission.hpp>
#include <ElementRenderer\StateChange.hpp>
#include <Adept\EntityManager.hpp>
#include "MW4GameEd.h"
#include <Adept\Map.hpp>
#include <Adept\LightManager.hpp>
#include "DisplayWindow.h"
#include "ResourceWindow.h"
#include <MW4\MWTool.hpp>
#include "LightWnd.h"
EditorWaypoint::ClassData*
EditorWaypoint::DefaultData = NULL;
extern CMW4GameEdApp theApp;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorWaypoint::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorWaypointClassID,
"EditorWaypoint",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorWaypoint::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorWaypoint*
EditorWaypoint::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorWaypoint *new_entity = new EditorWaypoint(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorWaypoint::EditorWaypoint(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
Entity(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorWaypoint::~EditorWaypoint()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorWaypoint::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorPathNode::ClassData*
EditorPathNode::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorPathNode::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorPathNodeClassID,
"EditorPathNode",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorPathNode::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorPathNode*
EditorPathNode::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorPathNode *new_entity = new EditorPathNode(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorPathNode::EditorPathNode(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorWaypoint(class_data, message, base_id, element),
pathSlot(NULL)
{
Check_Pointer(this);
Check_Object(message);
m_PathLinkLineCloud = NULL;
m_PathLinkPointCount = 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorPathNode::~EditorPathNode()
{
if (m_PathLinkLineCloud)
{
Unregister_Object(m_PathLinkLineCloud);
delete m_PathLinkLineCloud;
m_PathLinkLineCloud = NULL;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorPathNode::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorPathNode::InsertNode(EditorPathNode* node)
{
// node is inserted in front of this
Point3D point,prevPoint;
point = GetLocalToWorld();
prevPoint = (prevnode) ? prevnode->GetLocalToWorld() : LinearMatrix4D::Identity;
point.x += (point.x > prevPoint.x) ? -5.0f : 5.0f;
point.z += (point.z > prevPoint.z) ? -5.0f : 5.0f;
point.y = theApp.displayWindow->GetMapPointVertical(point.x,point.z) + 1.0f;
LinearMatrix4D matrix = LinearMatrix4D::Identity;
matrix.BuildTranslation(point);
node->SetNewLocalToParent(matrix);
node->SyncMatrices(true);
pathSlot.GetCurrent()->pathSlot.GetCurrent()->pathPoints.push_back(point);
node->pathSlot.Remove();
node->pathSlot.Add(pathSlot.GetCurrent());
node->prevnode = prevnode;
node->nextnode = this;
if (prevnode)
prevnode->nextnode = node;
prevnode = node;
EditorPathNode* n = node;
int newIndex = index;
while (n)
{
n->index = newIndex++;
point = n->GetLocalToWorld();
pathSlot.GetCurrent()->pathSlot.GetCurrent()->pathPoints[n->index] = point;
n = n->nextnode;
}
node->CreateLink();
if (node->prevnode)
node->prevnode->UpdateLinkPointData();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorPathNode::UpdateLinkPointData(bool calledFromOtherNode)
{
m_PathLinkPointData[0] = pathSlot.GetCurrent()->pathSlot.GetCurrent()->pathPoints[index];
m_PathLinkPointData[0].y += 0.6f;
if (nextnode)
m_PathLinkPointData[1] = pathSlot.GetCurrent()->pathSlot.GetCurrent()->pathPoints[index + 1];
else
m_PathLinkPointData[1] = pathSlot.GetCurrent()->pathSlot.GetCurrent()->pathPoints[index];
m_PathLinkPointData[1].y += 0.65f;
if (prevnode && !calledFromOtherNode)
prevnode->UpdateLinkPointData(true);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorBoundaryNode::ClassData*
EditorBoundaryNode::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorBoundaryNode::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorBoundaryNodeClassID,
"EditorBoundaryNode",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorBoundaryNode::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorBoundaryNode*
EditorBoundaryNode::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorBoundaryNode *new_entity = new EditorBoundaryNode(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorBoundaryNode::EditorBoundaryNode(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorWaypoint(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
myBoundary=NULL;
firstBoundaryNode=NULL;
m_PathLinkLineCloud = NULL;
m_PathLinkPointCount = 0;
index = -1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorBoundaryNode::~EditorBoundaryNode()
{
if (m_PathLinkLineCloud)
{
Unregister_Object(m_PathLinkLineCloud);
delete m_PathLinkLineCloud;
m_PathLinkLineCloud = NULL;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorBoundaryNode::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorBoundaryNode::UpdateLinkPointData(bool calledFromOtherNode)
{
Verify(myBoundary);
m_PathLinkPointData[0].x = (*myBoundary)[index].x;
m_PathLinkPointData[0].z = (*myBoundary)[index].y;
m_PathLinkPointData[0].y = theApp.displayWindow->GetMapPointVertical(m_PathLinkPointData[0].x,m_PathLinkPointData[0].z) + 0.6f;
int i = nextnode->index;
m_PathLinkPointData[1].x = (*myBoundary)[i].x;
m_PathLinkPointData[1].z = (*myBoundary)[i].y;
m_PathLinkPointData[1].y = theApp.displayWindow->GetMapPointVertical(m_PathLinkPointData[1].x,m_PathLinkPointData[1].z) + 0.6f;
// Adept::Mission::Instance->SetMissionPolygon(theApp.missionBoundary);
if (!calledFromOtherNode)
prevnode->UpdateLinkPointData(true);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorBoundaryNode::InsertNode(EditorBoundaryNode* node)
{
// node is inserted in front of this
Point3D point,prevPoint;
point = GetLocalToWorld();
prevPoint = (prevnode) ? prevnode->GetLocalToWorld() : LinearMatrix4D::Identity;
point.x += (point.x > prevPoint.x) ? -5.0f : 5.0f;
point.z += (point.z > prevPoint.z) ? -5.0f : 5.0f;
point.y = theApp.displayWindow->GetMapPointVertical(point.x,point.z) + 1.0f;
LinearMatrix4D matrix = LinearMatrix4D::Identity;
matrix.BuildTranslation(point);
node->SetNewLocalToParent(matrix);
node->SyncMatrices(true);
Verify(myBoundary);
int length = myBoundary->GetLength();
myBoundary->SetLength(length + 1);
(*myBoundary)[length].x = point.x;
(*myBoundary)[length].y = point.z;
node->prevnode = prevnode;
node->nextnode = this;
prevnode->nextnode = node;
prevnode = node;
EditorBoundaryNode* n = node->firstBoundaryNode;
for (int newIndex = 0; newIndex <= length; newIndex++)
{
n->index = newIndex;
point = n->GetLocalToWorld();
(*myBoundary)[n->index].x = point.x;
(*myBoundary)[n->index].y = point.z;
n = n->nextnode;
}
node->CheckValidPos();
// Adept::Mission::Instance->SetMissionPolygon(theApp.missionBoundary);
node->CreateLink();
node->prevnode->UpdateLinkPointData();
}
bool EditorBoundaryNode::CheckValidPos()
{
if (index < 0)
return false;
Verify(myBoundary);
bool valid = true;
Vector2DOf<Scalar> leg1, leg2;
leg1.Subtract((*myBoundary)[index], (*myBoundary)[prevnode->index]);
leg2.Subtract((*myBoundary)[nextnode->index], (*myBoundary)[index]);
Scalar area = leg1.y*leg2.x - leg1.x*leg2.y;
if (area < 0.0f)
valid = false;
leg1.Subtract((*myBoundary)[prevnode->index], (*myBoundary)[prevnode->prevnode->index]);
leg2.Subtract((*myBoundary)[index], (*myBoundary)[prevnode->index]);
area = leg1.y*leg2.x - leg1.x*leg2.y;
if (area < 0.0f)
valid = false;
leg1.Subtract((*myBoundary)[nextnode->index], (*myBoundary)[index]);
leg2.Subtract((*myBoundary)[nextnode->nextnode->index], (*myBoundary)[nextnode->index]);
area = leg1.y*leg2.x - leg1.x*leg2.y;
if (area < 0.0f)
valid = false;
if (valid)
{
GetElement()->SetCallbackIndex(ElementRenderer::Element::DrawGreenBounds);
}
else
{
GetElement()->SetCallbackIndex(ElementRenderer::Element::DrawRedBounds);
}
return (valid);
}
EditorLatticeNode::ClassData*
EditorLatticeNode::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorLatticeNode::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorLatticeNodeClassID,
"EditorLatticeNode",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorLatticeNode::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorLatticeNode*
EditorLatticeNode::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorLatticeNode *new_entity = new EditorLatticeNode(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorLatticeNode::EditorLatticeNode(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorWaypoint(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
railNode = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorLatticeNode::~EditorLatticeNode()
{
railNode = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorLatticeNode::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
void
EditorPathNode::CreateLink()
{
gos_PushCurrentHeap(ElementRenderer::g_Heap);
m_PathLinkPointCount = 2;
m_PathLinkLineCloud = new ElementRenderer::LineCloudElement(m_PathLinkPointCount);
Register_Object(m_PathLinkLineCloud);
UpdateLinkPointData();
SetLinkColor(Stuff::RGBAColor(192,192,192,0));
m_PathLinkLineCloud->SetDataPointers(&m_PathLinkPointCount, m_PathLinkPointData, m_PathLinkColorData);
m_PathLinkLineCloud->m_localOBB.localToParent = LinearMatrix4D::Identity;
Vector3D vector;
Point3D point0(m_PathLinkPointData[0].x,m_PathLinkPointData[0].y,m_PathLinkPointData[0].z);
Point3D point1(m_PathLinkPointData[1].x,m_PathLinkPointData[1].y,m_PathLinkPointData[1].z);
vector.Subtract(point0,point1);
Scalar length = vector.GetLength();
m_PathLinkLineCloud->m_localOBB.sphereRadius = length;
Check_Object(Mission::Instance);
Mission::Instance->GetElement()->AttachChild(m_PathLinkLineCloud);
// m_PathLinkLineCloud->SetName("Path Link Line Cloud");
m_PathLinkLineCloud->m_localOBB.localToParent(3,0) = (m_PathLinkPointData[0].x + m_PathLinkPointData[1].x) / 2;
m_PathLinkLineCloud->m_localOBB.localToParent(3,1) = (m_PathLinkPointData[0].y + m_PathLinkPointData[1].y) / 2;
m_PathLinkLineCloud->m_localOBB.localToParent(3,2) = (m_PathLinkPointData[0].z + m_PathLinkPointData[1].z) / 2;
m_PathLinkLineCloud->NeedNewBounds();
m_PathLinkLineCloud->NeedMatrixSync();
ShowLink(false);
ElementRenderer::StateChange *state = new ElementRenderer::StateChange();
Check_Object(state);
state->DisableZBufferCompare();
m_PathLinkLineCloud->AdoptStateChange(state);
m_PathLinkLineCloud->Sync();
gos_PopCurrentHeap();
}
void
EditorBoundaryNode::CreateLink()
{
gos_PushCurrentHeap(ElementRenderer::g_Heap);
m_PathLinkPointCount = 2;
m_PathLinkLineCloud = new ElementRenderer::LineCloudElement(m_PathLinkPointCount);
Register_Object(m_PathLinkLineCloud);
UpdateLinkPointData();
SetLinkColor(Stuff::RGBAColor(192,192,192,0));
m_PathLinkLineCloud->SetDataPointers(&m_PathLinkPointCount, m_PathLinkPointData, m_PathLinkColorData);
m_PathLinkLineCloud->m_localOBB.localToParent = LinearMatrix4D::Identity;
Vector3D vector;
Point3D point0(m_PathLinkPointData[0].x,m_PathLinkPointData[0].y,m_PathLinkPointData[0].z);
Point3D point1(m_PathLinkPointData[1].x,m_PathLinkPointData[1].y,m_PathLinkPointData[1].z);
vector.Subtract(point0,point1);
Scalar length = vector.GetLength();
m_PathLinkLineCloud->m_localOBB.sphereRadius = length;
Check_Object(Mission::Instance);
Mission::Instance->GetElement()->AttachChild(m_PathLinkLineCloud);
// m_PathLinkLineCloud->SetName("Path Link Line Cloud");
m_PathLinkLineCloud->m_localOBB.localToParent(3,0) = (m_PathLinkPointData[0].x + m_PathLinkPointData[1].x) / 2;
m_PathLinkLineCloud->m_localOBB.localToParent(3,1) = (m_PathLinkPointData[0].y + m_PathLinkPointData[1].y) / 2;
m_PathLinkLineCloud->m_localOBB.localToParent(3,2) = (m_PathLinkPointData[0].z + m_PathLinkPointData[1].z) / 2;
m_PathLinkLineCloud->NeedNewBounds();
m_PathLinkLineCloud->NeedMatrixSync();
ShowLink(false);
ElementRenderer::StateChange *state = new ElementRenderer::StateChange();
Check_Object(state);
state->DisableZBufferCompare();
m_PathLinkLineCloud->AdoptStateChange(state);
m_PathLinkLineCloud->Sync();
gos_PopCurrentHeap();
}
EditorDropNode::ClassData*
EditorDropNode::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorDropNode::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorDropNodeClassID,
"EditorDropNode",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorDropNode::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorDropNode*
EditorDropNode::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorDropNode *new_entity = new EditorDropNode(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorDropNode::EditorDropNode(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorWaypoint(class_data, message, base_id, element),
pointChain(NULL)
{
Check_Pointer(this);
Check_Object(message);
dropZone = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorDropNode::SetDropZone(Adept::DropZone* zone)
{
if (zone)
{
Check_Object(zone);
dropZone = zone;
}
else
{
Page *dropzone_page = theApp.resourceWindow->objectInformation->SetPage("DropZone");
Check_Object(dropzone_page);
dropzone_page->SetEntry("Model", "misc\\DropZone.data");
DynamicMemoryStream entity_stream;
ReplicatorID entity_id = ReplicatorID::Null;
Tool::Instance->ConstructCreateMessage(
&entity_stream,
dropzone_page,
&entity_id
);
entity_stream.Rewind();
entity_id = Connection::Local->GetNextReplicatorID();
Entity *entity = Entity::CreateEntity(
&entity_stream,
&entity_id,
false
);
//
//--------------------------------------------
//Make some initial assignments for the entity
//--------------------------------------------
//
Check_Object(entity);
EntityManager::Instance->GetNameSocket()->Remove(entity);
entity->instanceName = "DropZone_";
char string[32];
entity->instanceName += itoa(theApp.resourceWindow->numEntitiesAdded,string,10);
// EntityManager::Instance->GetNameSocket()->AddValue(entity, entity->instanceName);
NameTable::Instance->AddEntry(entity, NameTable::DropZoneArray);
NameTable::Instance->IsValid();
theApp.resourceWindow->numEntitiesAdded++;
Map::Instance->AddChild(entity);
MLRTexturePool::Instance->LoadImages();
entity->SetPropType(Entity::MissionPropType);
entity->SyncMatrices(true);
entity->GetElement()->Sync();
dropZone = Cast_Object(Adept::DropZone*,entity);
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorDropNode::~EditorDropNode()
{
dropZone = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorDropNode::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorDropNode::UpdatePoints()
{
Check_Object(this);
Check_Object(dropZone);
EditorDropZonePoint* point;
LinearMatrix4D loc;
PlugOf<LinearMatrix4D> *plug;
ChainIteratorOf<PlugOf<LinearMatrix4D>*> dropIterator(&dropZone->dropMats);
ChainIteratorOf<EditorDropZonePoint*> pointIterator(&pointChain);
dropIterator.DeletePlugs();
while((point = pointIterator.ReadAndNext()) != NULL)
{
loc = point->GetLocalToWorld();
plug = new PlugOf<LinearMatrix4D>(loc);
dropZone->dropMats.Add(plug);
}
LinearMatrix4D new_position = GetLocalToWorld();
dropZone->SetNewLocalToParent(new_position);
dropZone->SyncMatrices(true);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
/*
void EditorDropNode::MakePointsResource(const char *resource_name)
{
Check_Object(this);
ChainIteratorOf<DropZone::PointPlug*> iterator(&dropZone->dropPoints);
int num_points = iterator.GetSize();
if(num_points > 0)
{
Resource drop_point_resource(resource_name);
DynamicMemoryStream drop_stream;
DropZone::PointPlug *drop_point;
drop_stream << num_points;
while((drop_point = iterator.ReadAndNext()) != NULL)
{
Check_Object(drop_point);
drop_stream << drop_point->GetItem();
}
drop_point_resource.Save(&drop_stream, NULL);
dropZone->dropPointsResourceID = drop_point_resource.GetResourceID();
}
else
{
dropZone->dropPointsResourceID = ResourceID::Null;
}
}
*/
EditorDropZonePoint::ClassData* EditorDropZonePoint::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorDropZonePoint::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorDropZonePointClassID,
"EditorDropZonePoint",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorDropZonePoint::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorDropZonePoint*
EditorDropZonePoint::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorDropZonePoint *new_entity = new EditorDropZonePoint(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorDropZonePoint::EditorDropZonePoint(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorWaypoint(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
dropNode = NULL;
m_PointLineCloud = NULL;
m_PointCount = 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorDropZonePoint::~EditorDropZonePoint()
{
dropNode = NULL;
if (m_PointLineCloud)
{
Unregister_Object(m_PointLineCloud);
delete m_PointLineCloud;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorDropZonePoint::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorDropZonePoint::CreateLink()
{
gos_PushCurrentHeap(ElementRenderer::g_Heap);
m_PointCount = 2;
m_PointLineCloud = new ElementRenderer::LineCloudElement(m_PointCount);
Register_Object(m_PointLineCloud);
UpdateLinkPointData();
SetLinkColor(Stuff::RGBAColor(255,0,0,0));
m_PointLineCloud->SetDataPointers(&m_PointCount, m_PointData, m_PointColorData);
m_PointLineCloud->m_localOBB.localToParent = LinearMatrix4D::Identity;
Vector3D vector;
Point3D point0(m_PointData[0].x,m_PointData[0].y,m_PointData[0].z);
Point3D point1(m_PointData[1].x,m_PointData[1].y,m_PointData[1].z);
vector.Subtract(point0,point1);
Scalar length = vector.GetLength();
m_PointLineCloud->m_localOBB.sphereRadius = length;
Check_Object(Mission::Instance);
Mission::Instance->GetElement()->AttachChild(m_PointLineCloud);
// m_PointLineCloud->SetName("Drop Point Line Cloud");
m_PointLineCloud->m_localOBB.localToParent(3,0) = (m_PointData[0].x + m_PointData[1].x) / 2;
m_PointLineCloud->m_localOBB.localToParent(3,1) = (m_PointData[0].y + m_PointData[1].y) / 2;
m_PointLineCloud->m_localOBB.localToParent(3,2) = (m_PointData[0].z + m_PointData[1].z) / 2;
m_PointLineCloud->NeedNewBounds();
m_PointLineCloud->NeedMatrixSync();
ShowLink(true);
ElementRenderer::StateChange *state = new ElementRenderer::StateChange();
Check_Object(state);
state->DisableZBufferCompare();
m_PointLineCloud->AdoptStateChange(state);
m_PointLineCloud->Sync();
gos_PopCurrentHeap();
}
void EditorDropZonePoint::UpdateLinkPointData()
{
m_PointData[0] = GetLocalToWorld();
m_PointData[0].y += 0.3f;
m_PointData[1] = dropNode->GetLocalToWorld();
m_PointData[1].y += 0.3f;
}
EditorObjectiveMarker::ClassData*
EditorObjectiveMarker::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorObjectiveMarker::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorObjectiveMarkerClassID,
"EditorObjectiveMarker",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorObjectiveMarker::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorObjectiveMarker*
EditorObjectiveMarker::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorObjectiveMarker *new_entity = new EditorObjectiveMarker(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorObjectiveMarker::EditorObjectiveMarker(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorWaypoint(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
objective = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void EditorObjectiveMarker::SetObjective(MechWarrior4::Objective* obj)
{
if (obj)
{
Check_Object(obj);
objective = obj;
}
else
{
Page *objective_page = theApp.resourceWindow->objectInformation->SetPage("Objective");
Check_Object(objective_page);
objective_page->SetEntry("Model", "Misc\\Objective.data");
DynamicMemoryStream entity_stream;
ReplicatorID entity_id = ReplicatorID::Null;
Tool::Instance->ConstructCreateMessage(
&entity_stream,
objective_page,
&entity_id
);
entity_stream.Rewind();
entity_id = Connection::Local->GetNextReplicatorID();
Entity *entity = Entity::CreateEntity(
&entity_stream,
&entity_id,
false
);
//
//--------------------------------------------
//Make some initial assignments for the entity
//--------------------------------------------
//
Check_Object(entity);
EntityManager::Instance->GetNameSocket()->Remove(entity);
entity->instanceName = "Objective_";
char string[32];
entity->instanceName += itoa(theApp.resourceWindow->numEntitiesAdded,string,10);
// EntityManager::Instance->GetNameSocket()->AddValue(entity, entity->instanceName);
NameTable::Instance->AddEntry(entity, NameTable::ObjectiveArray);
NameTable::Instance->IsValid();
theApp.resourceWindow->numEntitiesAdded++;
Map::Instance->AddChild(entity);
MLRTexturePool::Instance->LoadImages();
entity->SetPropType(Entity::MissionPropType);
entity->SyncMatrices(true);
entity->GetElement()->SetAlwaysCullMode();
entity->GetElement()->Sync();
objective = Cast_Object(MechWarrior4::Objective*,entity);
objective->m_ObjectiveID = theApp.m_NumObjectives++;
objective->SetName (entity->instanceName,true);
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorObjectiveMarker::~EditorObjectiveMarker()
{
objective = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorObjectiveMarker::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorMovementPath::ClassData*
EditorMovementPath::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorMovementPath::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorMovementPathClassID,
"EditorMovementPath",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorMovementPath::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorMovementPath*
EditorMovementPath::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorMovementPath *new_entity = new EditorMovementPath(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorMovementPath::EditorMovementPath(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
Entity(class_data, message, base_id, element),
pathNodes(NULL),
pathSlot(NULL)
{
Check_Pointer(this);
Check_Object(message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorMovementPath::~EditorMovementPath()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorMovementPath::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorLight::ClassData*
EditorLight::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorLight::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorLightClassID,
"EditorLight",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorLight::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorLight*
EditorLight::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorLight *new_entity = new EditorLight(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorLight::EditorLight(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
Entity(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
lightInfo.m_color.red = 1.0f;
lightInfo.m_color.green = 0.0f;
lightInfo.m_color.blue = 0.0f;
lightInfo.m_origin = LinearMatrix4D::Identity;
lightInfo.m_intensity = 1.0f;
lightInfo.m_inner = 25.0f;
lightInfo.m_outer = 50.0f;
lightInfo.m_spread = Radians_Per_Degree * 20.0f;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorLight::~EditorLight()
{
if (theApp.lightDlg && theApp.lightDlg->GetLight() == this)
theApp.lightDlg->ShowWindow(SW_HIDE);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorLight::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorAmbientLight::ClassData*
EditorAmbientLight::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorAmbientLight::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorAmbientLightClassID,
"EditorAmbientLight",
EditorLight::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorAmbientLight::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorAmbientLight*
EditorAmbientLight::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorAmbientLight *new_entity = new EditorAmbientLight(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorAmbientLight::EditorAmbientLight(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorLight(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorAmbientLight::~EditorAmbientLight()
{
// Adept::TiledLightManager::Instance->DeleteLight(light);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorAmbientLight::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorInfiniteLight::ClassData*
EditorInfiniteLight::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorInfiniteLight::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorInfiniteLightClassID,
"EditorInfiniteLight",
EditorLight::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorInfiniteLight::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorInfiniteLight*
EditorInfiniteLight::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorInfiniteLight *new_entity = new EditorInfiniteLight(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorInfiniteLight::EditorInfiniteLight(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorLight(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorInfiniteLight::~EditorInfiniteLight()
{
// Adept::TiledLightManager::Instance->DeleteLight(light);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorInfiniteLight::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorPointLight::ClassData*
EditorPointLight::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorPointLight::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorPointLightClassID,
"EditorPointLight",
EditorLight::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorPointLight::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorPointLight*
EditorPointLight::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorPointLight *new_entity = new EditorPointLight(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorPointLight::EditorPointLight(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorLight(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorPointLight::~EditorPointLight()
{
// Adept::TiledLightManager::Instance->DeleteLight(light);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorPointLight::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
EditorSpotLight::ClassData*
EditorSpotLight::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorSpotLight::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorSpotLightClassID,
"EditorSpotLight",
EditorLight::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorSpotLight::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorSpotLight*
EditorSpotLight::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorSpotLight *new_entity = new EditorSpotLight(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorSpotLight::EditorSpotLight(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
EditorLight(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorSpotLight::~EditorSpotLight()
{
// Adept::TiledLightManager::Instance->DeleteLight(light);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorSpotLight::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}
void EditorLight::SetColor(Scalar Red, Scalar Green, Scalar Blue)
{
lightInfo.m_color.red = Red;
lightInfo.m_color.green = Green;
lightInfo.m_color.blue = Blue;
light->ChangeLight(&lightInfo);
}
void EditorLight::SetLightToWorldMatrix(LinearMatrix4D matrix)
{
lightInfo.m_origin = matrix;
light->ChangeLight(&lightInfo);
}
void EditorLight::UpdateLight()
{
light->ChangeLight(&lightInfo);
}
void EditorLight::LightSwitch()
{
if (lightInfo.m_intensity == 0) // are we off?
{
lightInfo.m_intensity = lastIntensity;
}
else
{
lastIntensity = lightInfo.m_intensity;
lightInfo.m_intensity = 0;
}
light->ChangeLight(&lightInfo);
}
void EditorLight::SetLight(gosFX::Light* gosLight)
{
if (gosLight)
{
light = gosLight;
return;
}
if (IsDerivedFrom(EditorAmbientLight::DefaultData))
light = Adept::TiledLightManager::Instance->MakeAmbientLight();
else if (IsDerivedFrom(EditorInfiniteLight::DefaultData))
light = Adept::TiledLightManager::Instance->MakeInfiniteLight();
else if (IsDerivedFrom(EditorPointLight::DefaultData))
light = Adept::TiledLightManager::Instance->MakePointLight();
else if (IsDerivedFrom(EditorSpotLight::DefaultData))
light = Adept::TiledLightManager::Instance->MakeSpotLight();
light->ChangeLight(&lightInfo);
}
EditorCameraShip::ClassData*
EditorCameraShip::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorCameraShip::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
EditorCameraShipClassID,
"EditorCameraShip",
Entity::DefaultData,
NULL, NULL,
(Entity::Factory)Make,
(Entity::CreateMessage::Factory)CreateMessage::ConstructCreateMessage,
ExecutionStateEngine::DefaultData,
(Entity::GameModel::Factory)GameModel::ConstructGameModel,
(Entity::GameModel::Factory)GameModel::ConstructOBBStream,
(Entity::GameModel::ReadAndVerifier)GameModel::ReadAndVerify,
(Entity::GameModel::ModelWrite)GameModel::WriteToText,
(Entity::GameModel::ModelSave)GameModel::SaveGameModel
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorCameraShip::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorCameraShip*
EditorCameraShip::Make(
CreateMessage *message,
ReplicatorID *base_id
)
{
EditorCameraShip *new_entity = new EditorCameraShip(DefaultData, message, base_id, NULL);
Check_Object(new_entity);
return new_entity;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorCameraShip::EditorCameraShip(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
):
Entity(class_data, message, base_id, element)
{
Check_Pointer(this);
Check_Object(message);
cameraShip = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EditorCameraShip::~EditorCameraShip()
{
cameraShip = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorCameraShip::SetCameraShip(MechWarrior4::CameraShip* ship)
{
if (ship == NULL)
{
Page *camera_page = theApp.resourceWindow->objectInformation->SetPage("CameraShip");
Check_Object(camera_page);
camera_page->SetEntry("Model", "misc\\CameraShip.data");
DynamicMemoryStream entity_stream;
ReplicatorID entity_id = ReplicatorID::Null;
Tool::Instance->ConstructCreateMessage(
&entity_stream,
camera_page,
&entity_id
);
entity_stream.Rewind();
entity_id = Connection::Local->GetNextReplicatorID();
Entity *entity = Entity::CreateEntity(
&entity_stream,
&entity_id,
false
);
//
//--------------------------------------------
//Make some initial assignments for the entity
//--------------------------------------------
//
Check_Object(entity);
EntityManager::Instance->GetNameSocket()->Remove(entity);
entity->instanceName = "EditorCameraShip_";
char string[32];
entity->instanceName += itoa(theApp.resourceWindow->numEntitiesAdded,string,10);
EntityManager::Instance->GetNameSocket()->AddValue(entity, entity->instanceName);
NameTable::Instance->AddEntry(entity, NameTable::DefaultArray);
NameTable::Instance->IsValid();
theApp.resourceWindow->numEntitiesAdded++;
Map::Instance->AddChild(entity);
MLRTexturePool::Instance->LoadImages();
entity->SetPropType(Entity::MissionPropType);
entity->SyncMatrices(true);
entity->GetElement()->Sync();
cameraShip = Cast_Object(MechWarrior4::CameraShip*,entity);
}
else
{
Check_Object(ship);
cameraShip = ship;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
EditorCameraShip::TestInstance()
{
Verify(IsDerivedFrom(DefaultData));
}