mirror of
				https://github.com/AxioDL/PrimeWorldEditor.git
				synced 2025-10-25 19:20:34 +00:00 
			
		
		
		
	Merge branch 'master' of https://github.com/arukibree/primeworldeditor
This commit is contained in:
		
						commit
						ca40d34739
					
				| @ -32,10 +32,10 @@ | |||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "name": "lzokay", |             "name": "lzokay", | ||||||
|             "url": "https://github.com/sfuller/lzokay", |             "url": "https://github.com/jackoalan/lzokay", | ||||||
|             "type": "git", |             "type": "git", | ||||||
|             "head": "cmake", |             "head": "master", | ||||||
|             "ref": "87467048df10e72540a5abcac9dd5c0c4df3a712" |             "ref": "343f9707f6ab2143d3455c93d8b7570a0ffcee97" | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             "name": "tinyxml2", |             "name": "tinyxml2", | ||||||
|  | |||||||
| @ -102,11 +102,11 @@ namespace CompressionUtil | |||||||
|         else return true; |         else return true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool DecompressLZO(uint8 *pSrc, uint32 SrcLen, uint8 *pDst, uint32& rTotalOut) |     bool DecompressLZO(uint8 *pSrc, uint32 SrcLen, uint8 *pDst, uint32 DstLen, uint32& rTotalOut) | ||||||
|     { |     { | ||||||
| #if USE_LZOKAY | #if USE_LZOKAY | ||||||
|         size_t TotalOut = rTotalOut; |         size_t TotalOut; | ||||||
|         lzokay::EResult Result = lzokay::decompress(pSrc, (size_t) SrcLen, pDst, TotalOut); |         lzokay::EResult Result = lzokay::decompress(pSrc, (size_t) SrcLen, pDst, DstLen, TotalOut); | ||||||
|         rTotalOut = TotalOut; |         rTotalOut = TotalOut; | ||||||
| 
 | 
 | ||||||
|         if (Result < lzokay::EResult::Success) |         if (Result < lzokay::EResult::Success) | ||||||
| @ -172,7 +172,7 @@ namespace CompressionUtil | |||||||
|                 // No zlib magic - this is LZO
 |                 // No zlib magic - this is LZO
 | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     bool Success = DecompressLZO(pSrc, Size, pDst, TotalOut); |                     bool Success = DecompressLZO(pSrc, Size, pDst, (uint32) (pDstEnd - pDst), TotalOut); | ||||||
|                     if (!Success) return false; |                     if (!Success) return false; | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
| @ -220,8 +220,9 @@ namespace CompressionUtil | |||||||
|     bool CompressLZO(uint8 *pSrc, uint32 SrcLen, uint8 *pDst, uint32 DstLen, uint32& rTotalOut) |     bool CompressLZO(uint8 *pSrc, uint32 SrcLen, uint8 *pDst, uint32 DstLen, uint32& rTotalOut) | ||||||
|     { |     { | ||||||
| #if USE_LZOKAY | #if USE_LZOKAY | ||||||
|         rTotalOut = DstLen; |         size_t TotalOut; | ||||||
|         lzokay::EResult Result = lzokay::compress(pSrc, (size_t) SrcLen, pDst, (size_t&) rTotalOut); |         lzokay::EResult Result = lzokay::compress(pSrc, (size_t) SrcLen, pDst, DstLen, TotalOut); | ||||||
|  |         rTotalOut = TotalOut; | ||||||
| 
 | 
 | ||||||
|         if (Result < lzokay::EResult::Success) |         if (Result < lzokay::EResult::Success) | ||||||
|         { |         { | ||||||
|  | |||||||
| @ -16,6 +16,19 @@ enum class ELinkType | |||||||
|     Outgoing |     Outgoing | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | class CInstanceID | ||||||
|  | { | ||||||
|  |     uint32 mId = 0; | ||||||
|  | public: | ||||||
|  |     operator uint32() const { return mId; } | ||||||
|  |     CInstanceID() = default; | ||||||
|  |     CInstanceID(uint32 id) : mId(id) {} | ||||||
|  |     CInstanceID& operator=(uint32 id) { mId = id; return *this; } | ||||||
|  |     uint8 Layer() const { return uint8((mId >> 26u) & 0x3fu); } | ||||||
|  |     uint16 Area() const { return uint16((mId >> 16u) & 0x3ffu); } | ||||||
|  |     uint16 Id() const { return uint16(mId & 0xffffu); } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| class CScriptObject | class CScriptObject | ||||||
| { | { | ||||||
|     friend class CScriptLoader; |     friend class CScriptLoader; | ||||||
| @ -26,7 +39,7 @@ class CScriptObject | |||||||
|     CScriptLayer *mpLayer; |     CScriptLayer *mpLayer; | ||||||
|     uint32 mVersion; |     uint32 mVersion; | ||||||
| 
 | 
 | ||||||
|     uint32 mInstanceID; |     CInstanceID mInstanceID; | ||||||
|     std::vector<CLink*> mOutLinks; |     std::vector<CLink*> mOutLinks; | ||||||
|     std::vector<CLink*> mInLinks; |     std::vector<CLink*> mInLinks; | ||||||
|     std::vector<char> mPropertyData; |     std::vector<char> mPropertyData; | ||||||
| @ -75,7 +88,7 @@ public: | |||||||
|     CScriptLayer* Layer() const                                     { return mpLayer; } |     CScriptLayer* Layer() const                                     { return mpLayer; } | ||||||
|     uint32 Version() const                                          { return mVersion; } |     uint32 Version() const                                          { return mVersion; } | ||||||
|     uint32 ObjectTypeID() const                                     { return mpTemplate->ObjectID(); } |     uint32 ObjectTypeID() const                                     { return mpTemplate->ObjectID(); } | ||||||
|     uint32 InstanceID() const                                       { return mInstanceID; } |     CInstanceID InstanceID() const                                  { return mInstanceID; } | ||||||
|     uint32 NumLinks(ELinkType Type) const                           { return (Type == ELinkType::Incoming ? mInLinks.size() : mOutLinks.size()); } |     uint32 NumLinks(ELinkType Type) const                           { return (Type == ELinkType::Incoming ? mInLinks.size() : mOutLinks.size()); } | ||||||
|     CLink* Link(ELinkType Type, uint32 Index) const                 { return (Type == ELinkType::Incoming ? mInLinks[Index] : mOutLinks[Index]); } |     CLink* Link(ELinkType Type, uint32 Index) const                 { return (Type == ELinkType::Incoming ? mInLinks[Index] : mOutLinks[Index]); } | ||||||
|     void* PropertyData() const                                      { return (void*) mPropertyData.data(); } |     void* PropertyData() const                                      { return (void*) mPropertyData.data(); } | ||||||
|  | |||||||
| @ -70,7 +70,7 @@ public: | |||||||
|     virtual void Destruct(void* pData) const |     virtual void Destruct(void* pData) const | ||||||
|     { |     { | ||||||
|         RevertToDefault(pData); |         RevertToDefault(pData); | ||||||
|         TTypedProperty::Destruct(pData); |         _GetInternalArray(pData).~SScriptArray(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     virtual bool MatchesDefault(void* pData) const |     virtual bool MatchesDefault(void* pData) const | ||||||
|  | |||||||
| @ -280,7 +280,8 @@ CDependencyTree* CStringTable::BuildDependencyTree() const | |||||||
|                 { |                 { | ||||||
|                     if (Game() >= EGame::CorruptionProto) |                     if (Game() >= EGame::CorruptionProto) | ||||||
|                     { |                     { | ||||||
|                         ASSERT(ParamString.StartsWith("0x")); |                         if (!ParamString.StartsWith("0x")) | ||||||
|  |                             continue; | ||||||
|                         ParamString = ParamString.ChopFront(2); |                         ParamString = ParamString.ChopFront(2); | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -84,7 +84,7 @@ public: | |||||||
| 
 | 
 | ||||||
| class CInstancePtr | class CInstancePtr | ||||||
| { | { | ||||||
|     uint32 mInstanceID; |     CInstanceID mInstanceID; | ||||||
|     CGameArea *mpArea; |     CGameArea *mpArea; | ||||||
|     bool mValid; |     bool mValid; | ||||||
| 
 | 
 | ||||||
| @ -94,12 +94,12 @@ public: | |||||||
| 
 | 
 | ||||||
|     inline void SetInstance(CScriptObject *pInst) |     inline void SetInstance(CScriptObject *pInst) | ||||||
|     { |     { | ||||||
|         mInstanceID = pInst ? pInst->InstanceID() : 0; |         mInstanceID = pInst ? pInst->InstanceID() : CInstanceID(); | ||||||
|         mpArea = pInst ? pInst->Area() : nullptr; |         mpArea = pInst ? pInst->Area() : nullptr; | ||||||
|         mValid = pInst ? true : false; |         mValid = pInst ? true : false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     inline uint32 InstanceID() const   { return mInstanceID; } |     inline CInstanceID InstanceID() const   { return mInstanceID; } | ||||||
|     inline CGameArea* Area() const  { return mpArea; } |     inline CGameArea* Area() const  { return mpArea; } | ||||||
|     inline CScriptObject* operator* () const { return mValid ? mpArea->InstanceByID(mInstanceID) : nullptr; } |     inline CScriptObject* operator* () const { return mValid ? mpArea->InstanceByID(mInstanceID) : nullptr; } | ||||||
|     inline CScriptObject* operator->() const { return mValid ? mpArea->InstanceByID(mInstanceID) : nullptr; } |     inline CScriptObject* operator->() const { return mValid ? mpArea->InstanceByID(mInstanceID) : nullptr; } | ||||||
|  | |||||||
| @ -219,6 +219,11 @@ CWorldEditor::CWorldEditor(QWidget *parent) | |||||||
| 
 | 
 | ||||||
| CWorldEditor::~CWorldEditor() | CWorldEditor::~CWorldEditor() | ||||||
| { | { | ||||||
|  |     mScene.ClearScene(); | ||||||
|  |     mpArea = nullptr; | ||||||
|  |     mpWorld = nullptr; | ||||||
|  |     gpResourceStore->DestroyUnreferencedResources(); // this should destroy the area!
 | ||||||
|  | 
 | ||||||
|     delete mpScriptSidebar; // For some reason WCreateTab filters an event during the viewport's destructor
 |     delete mpScriptSidebar; // For some reason WCreateTab filters an event during the viewport's destructor
 | ||||||
|     delete ui; |     delete ui; | ||||||
| } | } | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ WEditorProperties::WEditorProperties(QWidget *pParent /*= 0*/) | |||||||
| { | { | ||||||
|     mpInstanceInfoLabel = new QLabel; |     mpInstanceInfoLabel = new QLabel; | ||||||
|     mpInstanceInfoLabel->setText("<i>[No selection]</i>"); |     mpInstanceInfoLabel->setText("<i>[No selection]</i>"); | ||||||
|  |     mpInstanceInfoLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); | ||||||
|     mpInstanceInfoLayout = new QHBoxLayout; |     mpInstanceInfoLayout = new QHBoxLayout; | ||||||
|     mpInstanceInfoLayout->addWidget(mpInstanceInfoLabel); |     mpInstanceInfoLayout->addWidget(mpInstanceInfoLabel); | ||||||
| 
 | 
 | ||||||
| @ -124,14 +125,22 @@ void WEditorProperties::OnSelectionModified() | |||||||
|             mpInstanceInfoLabel->setText(QString("<i>[%1 objects selected]</i>").arg(pSelection->Size())); |             mpInstanceInfoLabel->setText(QString("<i>[%1 objects selected]</i>").arg(pSelection->Size())); | ||||||
|             mpInstanceNameLineEdit->clear(); |             mpInstanceNameLineEdit->clear(); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         mpInstanceInfoLabel->setToolTip({}); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         CScriptNode *pScript = static_cast<CScriptNode*>(mpDisplayNode); |         CScriptNode *pScript = static_cast<CScriptNode*>(mpDisplayNode); | ||||||
|         TString InstanceID = TString::HexString(pScript->Instance()->InstanceID(), 8, false); |         CInstanceID InstanceID = pScript->Instance()->InstanceID(); | ||||||
|         TString ObjectType = pScript->Template()->Name(); |         TString ObjectType = pScript->Template()->Name(); | ||||||
|         mpInstanceInfoLabel->setText(QString("[%1] [%2]").arg( TO_QSTRING(ObjectType) ).arg( TO_QSTRING(InstanceID) )); |         mpInstanceInfoLabel->setText(QString("[%1] [%2]"). | ||||||
|  |                                      arg( TO_QSTRING(ObjectType) ). | ||||||
|  |                                      arg( TO_QSTRING(TString::HexString(InstanceID, 8, false)) )); | ||||||
|  |         mpInstanceInfoLabel->setToolTip(QString("[Layer: %1] [Area: %2] [ID: %3]"). | ||||||
|  |                                         arg( InstanceID.Layer() ). | ||||||
|  |                                         arg( InstanceID.Area() ). | ||||||
|  |                                         arg( TO_QSTRING(TString::HexString(InstanceID.Id(), 4, false)) )); | ||||||
| 
 | 
 | ||||||
|         UpdatePropertyValues(); |         UpdatePropertyValues(); | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user