mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-18 09:25:31 +00:00
Implemented functionality for editing, creating, and deleting script object links
This commit is contained in:
50
src/Editor/Undo/CEditLinkCommand.cpp
Normal file
50
src/Editor/Undo/CEditLinkCommand.cpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#include "CEditLinkCommand.h"
|
||||
|
||||
CEditLinkCommand::CEditLinkCommand(CWorldEditor *pEditor, CLink *pLink, CLink NewLink)
|
||||
: IUndoCommand("Edit Link")
|
||||
, mpEditor(pEditor)
|
||||
, mpEditLink(pLink)
|
||||
, mOldLink(*pLink)
|
||||
, mNewLink(NewLink)
|
||||
{
|
||||
mOldSenderIndex = pLink->SenderIndex();
|
||||
mOldReceiverIndex = pLink->ReceiverIndex();
|
||||
mAffectedInstances << pLink->Sender();
|
||||
if (pLink->Receiver() != pLink->Sender()) mAffectedInstances << pLink->Receiver();
|
||||
if (NewLink.Sender() != pLink->Sender()) mAffectedInstances << NewLink.Sender();
|
||||
if (NewLink.Receiver() != pLink->Receiver()) mAffectedInstances << NewLink.Receiver();
|
||||
}
|
||||
|
||||
void CEditLinkCommand::undo()
|
||||
{
|
||||
if (mOldLink.Sender() != mNewLink.Sender())
|
||||
{
|
||||
mNewLink.Sender()->RemoveLink(eOutgoing, mpEditLink);
|
||||
mOldLink.Sender()->AddLink(eOutgoing, mpEditLink, mOldSenderIndex);
|
||||
}
|
||||
if (mOldLink.Receiver() != mNewLink.Receiver())
|
||||
{
|
||||
mNewLink.Receiver()->RemoveLink(eIncoming, mpEditLink);
|
||||
mOldLink.Receiver()->AddLink(eIncoming, mpEditLink, mOldReceiverIndex);
|
||||
}
|
||||
|
||||
*mpEditLink = mOldLink;
|
||||
mpEditor->OnLinksModified(mAffectedInstances);
|
||||
}
|
||||
|
||||
void CEditLinkCommand::redo()
|
||||
{
|
||||
if (mOldLink.Sender() != mNewLink.Sender())
|
||||
{
|
||||
mOldLink.Sender()->RemoveLink(eOutgoing, mpEditLink);
|
||||
mNewLink.Sender()->AddLink(eOutgoing, mpEditLink);
|
||||
}
|
||||
if (mOldLink.Receiver() != mNewLink.Receiver())
|
||||
{
|
||||
mOldLink.Receiver()->RemoveLink(eIncoming, mpEditLink);
|
||||
mNewLink.Receiver()->AddLink(eIncoming, mpEditLink);
|
||||
}
|
||||
|
||||
*mpEditLink = mNewLink;
|
||||
mpEditor->OnLinksModified(mAffectedInstances);
|
||||
}
|
||||
Reference in New Issue
Block a user