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

175 lines
4.9 KiB
C++

#include "stdafx.h"
#include "MW4GameEd.h"
#include "InsertPathNodeCommand.h"
#include <Adept\Player.hpp>
#include <Adept\Interface.hpp>
#include <Adept\Entity.hpp>
#include <Adept\EntityManager.hpp>
#include <Adept\Map.hpp>
#include "TransDlg.h"
#include "DisplayWindow.h"
#include "OverviewWindow.h"
#include "InstanceWindow.h"
#include "ResourceWindow.h"
#include "Selection.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
extern CMW4GameEdApp theApp;
InsertPathNodeCommand::InsertPathNodeCommand(EditorPathNode *beforeMe)
: Command()
{
Check_Object(beforeMe);
Entity* entity = theApp.resourceWindow->CreateNewInstance("Content\\Editor\\Reserved\\PathNode\\PathNode.data",
"PathNode","PathNode");
SPEW(("scottjan","Hey! These should probably not be hardcoded"));
if (entity)
{
insertedNode = Cast_Object(EditorPathNode*,entity);
beforeMe->InsertNode(insertedNode);
insertedNode->SetLinkColor(Stuff::RGBAColor(1.0f,1.0f,0.0f,0.0f));
insertedNode->ShowLink(true);
insertedNode->GetElement()->SetVolumeCullMode();
insertedNode->GetElement()->Sync();
Time till = gos_GetElapsedTime();
insertedNode->PostCollisionExecute(till);
CSelectionList::Instance->ClearSelectionList();
CSelectionList::Instance->AddSelection(entity);
CSelectionList::Instance->RemoveCollision();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
InsertPathNodeCommand::~InsertPathNodeCommand()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void InsertPathNodeCommand::Undo()
{
Check_Object(insertedNode);
CSelectionList::Instance->ClearSelectionList();
EditorPathNode* n = insertedNode->nextnode;
while (n)
{
n->index--;
n = n->nextnode;
}
insertedNode->pathSlot.GetCurrent()->pathSlot.GetCurrent()->ErasePoint (insertedNode->index);
if (insertedNode->prevnode)
{
insertedNode->prevnode->nextnode = insertedNode->nextnode;
insertedNode->prevnode->UpdateLinkPointData();
}
if (insertedNode->nextnode)
{
insertedNode->nextnode->prevnode = insertedNode->prevnode;
insertedNode->nextnode->UpdateLinkPointData();
}
insertedNode->SentenceToDeathRow();
theApp.overviewWindow->DrawWindow();
Check_Pointer(theApp.instanceWindow);
theApp.instanceWindow->RemoveInstance(insertedNode);
theApp.displayWindow->translationDlg->CheckObject(insertedNode);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
InsertBoundaryNodeCommand::InsertBoundaryNodeCommand(EditorBoundaryNode *beforeMe)
: Command()
{
Check_Object(beforeMe);
Entity* tmpentity = theApp.resourceWindow->CreateNewInstance("Content\\Editor\\Reserved\\BoundaryNode\\BoundaryNode.data","MovementPath","MovementPath");
EditorBoundaryNode *entity = Cast_Object(EditorBoundaryNode*,tmpentity);
SPEW(("scottjan","Hey! I am an idiot. You guys will never make this thing work"));
if (entity)
{
insertedNode = Cast_Object(EditorBoundaryNode*,entity);
insertedNode->myBoundary=beforeMe->myBoundary;
insertedNode->firstBoundaryNode=beforeMe->firstBoundaryNode;
beforeMe->InsertNode(insertedNode);
insertedNode->SetLinkColor(Stuff::RGBAColor(1.0f,1.0f,1.0f,0.0f));
insertedNode->ShowLink(true);
insertedNode->GetElement()->SetVolumeCullMode();
insertedNode->GetElement()->Sync();
Time till = gos_GetElapsedTime();
insertedNode->PostCollisionExecute(till);
CSelectionList::Instance->ClearSelectionList();
CSelectionList::Instance->AddSelection(entity);
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
InsertBoundaryNodeCommand::~InsertBoundaryNodeCommand()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void InsertBoundaryNodeCommand::Undo()
{
Check_Object(insertedNode);
CSelectionList::Instance->ClearSelectionList();
EditorBoundaryNode* n = insertedNode->nextnode;
while (n->index != 0)
{
n->index--;
n = n->nextnode;
}
if (insertedNode->prevnode)
{
insertedNode->prevnode->nextnode = insertedNode->nextnode;
insertedNode->prevnode->UpdateLinkPointData();
}
if (insertedNode->nextnode)
{
insertedNode->nextnode->prevnode = insertedNode->prevnode;
insertedNode->nextnode->UpdateLinkPointData();
}
insertedNode->myBoundary->SetLength(insertedNode->myBoundary->GetLength() - 1);
Point3D point;
n = insertedNode->firstBoundaryNode;
do
{
point = n->GetLocalToWorld();
(*(insertedNode->myBoundary))[n->index].x = point.x;
(*(insertedNode->myBoundary))[n->index].y = point.z;
n = n->nextnode;
}
while (n->index != 0);
insertedNode->SentenceToDeathRow();
theApp.overviewWindow->DrawWindow();
Check_Pointer(theApp.instanceWindow);
theApp.instanceWindow->RemoveInstance(insertedNode);
theApp.displayWindow->translationDlg->CheckObject(insertedNode);
}