From 22c84edea70b2c8aa5a111f3f9e5355c90a8d04b Mon Sep 17 00:00:00 2001 From: Lukas Werling Date: Fri, 5 Jan 2018 22:41:14 +0100 Subject: [PATCH] Save HalfVehicleSolidMask object state After saving and restoring an object with a half vehicle solid mask, the solid mask was fully solid. --- src/object/C4Object.cpp | 5 +++++ src/object/C4Object.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/object/C4Object.cpp b/src/object/C4Object.cpp index 28008bbfa..75c8c0528 100644 --- a/src/object/C4Object.cpp +++ b/src/object/C4Object.cpp @@ -125,6 +125,7 @@ void C4Object::Default() fOwnVertices=false; Contents.Default(); SolidMask.Default(); + HalfVehicleSolidMask=false; PictureRect.Default(); Def=nullptr; Info=nullptr; @@ -1071,6 +1072,7 @@ bool C4Object::ChangeDef(C4ID idNew) if (!Def->Rotateable) { fix_r=rdir=Fix0; } // Reset solid mask SolidMask=Def->SolidMask; + HalfVehicleSolidMask=false; // Post change updates UpdateGraphics(true); UpdateMass(); @@ -2199,6 +2201,7 @@ void C4Object::CompileFunc(StdCompiler *pComp, C4ValueNumbers * numbers) pComp->Value(mkParAdapt(Shape, &Def->Shape)); pComp->Value(mkNamingAdapt( fOwnVertices, "OwnVertices", false )); pComp->Value(mkNamingAdapt( SolidMask, "SolidMask", Def->SolidMask )); + pComp->Value(mkNamingAdapt( HalfVehicleSolidMask, "HalfVehicleSolidMask", false )); pComp->Value(mkNamingAdapt( PictureRect, "Picture" )); pComp->Value(mkNamingAdapt( Mobile, "Mobile", false )); pComp->Value(mkNamingAdapt( OnFire, "OnFire", false )); @@ -2469,6 +2472,7 @@ void C4Object::SetSolidMask(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, void C4Object::SetHalfVehicleSolidMask(bool set) { if (!pSolidMaskData) return; + HalfVehicleSolidMask = set; pSolidMaskData->SetHalfVehicle(set); } @@ -4157,6 +4161,7 @@ void C4Object::UpdateSolidMask(bool fRestoreAttachedObjects) else pSolidMaskData->Remove(false); pSolidMaskData->Put(true, nullptr, fRestoreAttachedObjects); + SetHalfVehicleSolidMask(HalfVehicleSolidMask); } // Otherwise, remove and destroy mask else if (pSolidMaskData) diff --git a/src/object/C4Object.h b/src/object/C4Object.h index ef4152741..0fce1f6d8 100644 --- a/src/object/C4Object.h +++ b/src/object/C4Object.h @@ -148,6 +148,7 @@ public: C4Shape Shape; bool fOwnVertices; // if set, vertices aren't restored from def but from end of own vtx list C4TargetRect SolidMask; + bool HalfVehicleSolidMask; C4Rect PictureRect; C4NotifyingObjectList Contents; C4MaterialList *MaterialContents; // SyncClearance-NoSave //