diff --git a/PCK-Studio/Forms/Editor/CustomSkinEditor.cs b/PCK-Studio/Forms/Editor/CustomSkinEditor.cs index 572d9cc5..614c9dbe 100644 --- a/PCK-Studio/Forms/Editor/CustomSkinEditor.cs +++ b/PCK-Studio/Forms/Editor/CustomSkinEditor.cs @@ -465,6 +465,7 @@ namespace PckStudio.Forms.Editor if (index > -1) { renderer3D1.ModelData[index] = boxEditorControl1.GetBOX(); + renderer3D1.ShowArmor = showArmorCheckbox.Checked; _skinPartListBindingSource.ResetItem(index); } } diff --git a/PCK-Studio/Rendering/SkinRenderer.cs b/PCK-Studio/Rendering/SkinRenderer.cs index b4235cd7..08263ae8 100644 --- a/PCK-Studio/Rendering/SkinRenderer.cs +++ b/PCK-Studio/Rendering/SkinRenderer.cs @@ -113,7 +113,22 @@ namespace PckStudio.Rendering public bool CenterOnSelect { get; set; } = false; public bool ShowBoundingBox { get; set; } - public bool ShowArmor { get; set; } = false; + public bool ShowArmor + { + get; + set + { + field = value; + + // set box armor visibility appropriately + head.HandleArmorFlags(ShowArmor); + body.HandleArmorFlags(ShowArmor); + rightArm.HandleArmorFlags(ShowArmor); + leftArm.HandleArmorFlags(ShowArmor); + rightLeg.HandleArmorFlags(ShowArmor); + leftLeg.HandleArmorFlags(ShowArmor); + } + } public bool ShowTools { get; set; } = false; public bool Animate { get; set; } = true; public bool RenderCape { get; set; } = true; diff --git a/PckStudio.Rendering/CubeMeshCollection.cs b/PckStudio.Rendering/CubeMeshCollection.cs index eb1c4f32..062d8b5a 100644 --- a/PckStudio.Rendering/CubeMeshCollection.cs +++ b/PckStudio.Rendering/CubeMeshCollection.cs @@ -150,6 +150,21 @@ namespace PckStudio.Rendering cubes.RemoveAt(index); } + public void HandleArmorFlags(bool showArmor) + { + for (int i = 0; i < cubes.Count; i++) + { + if (cubes[i] is CubeMesh cubeMesh) + { + bool hasArmorFlags = cubeMesh.GetCube().ArmorFlags != 0; + + bool visible = !(showArmor && hasArmorFlags); + + cubes[i] = cubes[i].SetVisible(visible); + } + } + } + public void ReplaceCube(int index, Vector3 position, Vector3 size, Vector2 uv, float inflate = 0f, bool mirrorTexture = false, int armorFlags = 0) { if (!cubes.IndexInRange(index))