diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3743c6f1..ef839e0f 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -153,7 +153,7 @@ - + diff --git a/PCK-Studio/Rendering/CubeBatchMesh.cs b/PCK-Studio/Rendering/CubeGroupMesh.cs similarity index 86% rename from PCK-Studio/Rendering/CubeBatchMesh.cs rename to PCK-Studio/Rendering/CubeGroupMesh.cs index 6eb5fa45..19b70319 100644 --- a/PCK-Studio/Rendering/CubeBatchMesh.cs +++ b/PCK-Studio/Rendering/CubeGroupMesh.cs @@ -25,29 +25,29 @@ using PckStudio.Internal; namespace PckStudio.Rendering { - internal class CubeBatchMesh : GenericMesh + internal class CubeGroupMesh : GenericMesh { private List cubes; - internal float Scale { get; set; } = 1f; + public float Inflate { get; set; } = 0f; public Vector3 Translation { get; set; } = Vector3.Zero; public Vector3 Pivot { get; set; } = Vector3.Zero; public Vector3 Offset { get; set; } = Vector3.Zero; - internal CubeBatchMesh(string name) : base(name, PrimitiveType.Triangles) + internal CubeGroupMesh(string name) : base(name, PrimitiveType.Triangles) { cubes = new List(5); } - internal CubeBatchMesh(string name, float scale) + internal CubeGroupMesh(string name, float inflate) : this(name) { - Scale = scale; + Inflate = inflate; } internal void AddSkinBox(SkinBOX skinBox) { - AddCube(skinBox.Pos.ToOpenTKVector(), skinBox.Size.ToOpenTKVector(), skinBox.UV.ToOpenTKVector(), skinBox.Scale + Scale, skinBox.Mirror, + AddCube(skinBox.Pos.ToOpenTKVector(), skinBox.Size.ToOpenTKVector(), skinBox.UV.ToOpenTKVector(), skinBox.Scale + Inflate, skinBox.Mirror, skinBox.Type == "HEAD" || skinBox.Type == "HEADWEAR"); } @@ -78,13 +78,13 @@ namespace PckStudio.Rendering Submit(); } - internal void AddCube(Vector3 position, Vector3 size, Vector2 uv, float scale = 1f, bool mirrorTexture = false, bool flipZMapping = false) + internal void AddCube(Vector3 position, Vector3 size, Vector2 uv, float inflate = 0f, bool mirrorTexture = false, bool flipZMapping = false) { - var cube = new CubeData(position, size, uv, scale, mirrorTexture, flipZMapping); + var cube = new CubeData(position, size, uv, Inflate + inflate, mirrorTexture, flipZMapping); cubes.Add(cube); } - internal void ReplaceCube(int index, Vector3 position, Vector3 size, Vector2 uv, float scale = 1f, bool mirrorTexture = false) + internal void ReplaceCube(int index, Vector3 position, Vector3 size, Vector2 uv, float inflate = 0f, bool mirrorTexture = false) { if (!cubes.IndexInRange(index)) throw new IndexOutOfRangeException(); @@ -93,7 +93,7 @@ namespace PckStudio.Rendering cube.Position = position; cube.Size = size; cube.Uv = uv; - cube.Scale = scale; + cube.Inflate = Inflate + inflate; cube.MirrorTexture = mirrorTexture; } @@ -103,7 +103,6 @@ namespace PckStudio.Rendering { Vector3 transform = Translation; transform.Xz -= Pivot.Xz / 2f; - //transform += Offset; return -transform; } } diff --git a/PCK-Studio/Rendering/SkinRenderer.cs b/PCK-Studio/Rendering/SkinRenderer.cs index a9207a94..316ccc64 100644 --- a/PCK-Studio/Rendering/SkinRenderer.cs +++ b/PCK-Studio/Rendering/SkinRenderer.cs @@ -193,21 +193,21 @@ namespace PckStudio.Rendering private float skyboxRotation = 0f; private float skyboxRotationStep = 0.5f; - private Dictionary meshStorage; + private Dictionary meshStorage; - private CubeBatchMesh head; - private CubeBatchMesh body; - private CubeBatchMesh rightArm; - private CubeBatchMesh leftArm; - private CubeBatchMesh rightLeg; - private CubeBatchMesh leftLeg; + private CubeGroupMesh head; + private CubeGroupMesh body; + private CubeGroupMesh rightArm; + private CubeGroupMesh leftArm; + private CubeGroupMesh rightLeg; + private CubeGroupMesh leftLeg; - private CubeBatchMesh headOverlay; - private CubeBatchMesh bodyOverlay; - private CubeBatchMesh rightArmOverlay; - private CubeBatchMesh leftArmOverlay; - private CubeBatchMesh rightLegOverlay; - private CubeBatchMesh leftLegOverlay; + private CubeGroupMesh headOverlay; + private CubeGroupMesh bodyOverlay; + private CubeGroupMesh rightArmOverlay; + private CubeGroupMesh leftArmOverlay; + private CubeGroupMesh rightLegOverlay; + private CubeGroupMesh leftLegOverlay; private float animationCurrentRotationAngle; private float animationRotationStep = 0.5f; @@ -250,7 +250,7 @@ namespace PckStudio.Rendering public SkinRenderer() : base() { InitializeSkinData(); - meshStorage = new Dictionary() + meshStorage = new Dictionary() { { "HEAD", head }, { "BODY", body }, @@ -266,19 +266,19 @@ namespace PckStudio.Rendering { "PANTS0" , rightLegOverlay }, { "PANTS1" , leftLegOverlay }, - { "HELMET" , new CubeBatchMesh("HELMET") }, - { "BODYARMOR", new CubeBatchMesh("BODYARMOR") }, + { "HELMET" , new CubeGroupMesh("HELMET") }, + { "BODYARMOR", new CubeGroupMesh("BODYARMOR") }, - { "BELT" , new CubeBatchMesh("BELT") }, + { "BELT" , new CubeGroupMesh("BELT") }, - { "ARMARMOR0", new CubeBatchMesh("ARMARMOR0") }, - { "ARMARMOR1", new CubeBatchMesh("ARMARMOR1") }, + { "ARMARMOR0", new CubeGroupMesh("ARMARMOR0") }, + { "ARMARMOR1", new CubeGroupMesh("ARMARMOR1") }, - { "BOOT0" , new CubeBatchMesh("BOOT0") }, - { "BOOT1" , new CubeBatchMesh("BOOT1") }, + { "BOOT0" , new CubeGroupMesh("BOOT0") }, + { "BOOT1" , new CubeGroupMesh("BOOT1") }, - { "TOOL0" , new CubeBatchMesh("TOOL0") }, - { "TOOL1" , new CubeBatchMesh("TOOL1") }, + { "TOOL0" , new CubeGroupMesh("TOOL0") }, + { "TOOL1" , new CubeGroupMesh("TOOL1") }, }; InitializeCamera(); InitializeComponent(); @@ -314,57 +314,57 @@ namespace PckStudio.Rendering private void InitializeSkinData() { - head ??= new CubeBatchMesh("Head"); + head ??= new CubeGroupMesh("Head"); head.AddCube(new(-4, -8, -4), new(8, 8, 8), new(0, 0), flipZMapping: true); - headOverlay ??= new CubeBatchMesh("Head Overlay", OverlayScale); - headOverlay.AddCube(new(-4, -8, -4), new(8, 8, 8), new(32, 0), flipZMapping: true, scale: OverlayScale); + headOverlay ??= new CubeGroupMesh("Head Overlay", OverlayScale); + headOverlay.AddCube(new(-4, -8, -4), new(8, 8, 8), new(32, 0), flipZMapping: true); - body ??= new CubeBatchMesh("Body"); + body ??= new CubeGroupMesh("Body"); body.AddCube(new(-4, 0, -2), new(8, 12, 4), new(16, 16)); - bodyOverlay ??= new CubeBatchMesh("Body Overlay", OverlayScale); - bodyOverlay.AddCube(new(-4, 0, -2), new(8, 12, 4), new(16, 32), scale: OverlayScale); + bodyOverlay ??= new CubeGroupMesh("Body Overlay", OverlayScale); + bodyOverlay.AddCube(new(-4, 0, -2), new(8, 12, 4), new(16, 32)); - rightArm ??= new CubeBatchMesh("Right Arm"); + rightArm ??= new CubeGroupMesh("Right Arm"); rightArm.Pivot = new Vector3(4f, 2f, 0f); rightArm.Translation = new Vector3(-5f, -2f, 0f); rightArm.AddCube(new(-3, -2, -2), new(4, 12, 4), new(40, 16)); - rightArmOverlay ??= new CubeBatchMesh("Right Arm Overlay", OverlayScale); + rightArmOverlay ??= new CubeGroupMesh("Right Arm Overlay", OverlayScale); rightArmOverlay.Pivot = new Vector3(4f, 2f, 0f); rightArmOverlay.Translation = new Vector3(-5f, -2f, 0f); - rightArmOverlay.AddCube(new(-3, -2, -2), new(4, 12, 4), new(40, 32), scale: OverlayScale); + rightArmOverlay.AddCube(new(-3, -2, -2), new(4, 12, 4), new(40, 32)); - leftArm ??= new CubeBatchMesh("Left Arm"); + leftArm ??= new CubeGroupMesh("Left Arm"); leftArm.Pivot = new Vector3(-4f, 2f, 0f); leftArm.Translation = new Vector3(5f, -2f, 0f); leftArm.AddCube(new(-1, -2, -2), new(4, 12, 4), new(32, 48)); - leftArmOverlay ??= new CubeBatchMesh("Left Arm Overlay", OverlayScale); + leftArmOverlay ??= new CubeGroupMesh("Left Arm Overlay", OverlayScale); leftArmOverlay.Pivot = new Vector3(-4f, 2f, 0f); leftArmOverlay.Translation = new Vector3(5f, -2f, 0f); - leftArmOverlay.AddCube(new(-1, -2, -2), new(4, 12, 4), new(48, 48), scale: OverlayScale); + leftArmOverlay.AddCube(new(-1, -2, -2), new(4, 12, 4), new(48, 48)); - rightLeg ??= new CubeBatchMesh("Right Leg"); + rightLeg ??= new CubeGroupMesh("Right Leg"); rightLeg.Pivot = new Vector3(0f, 12f, 0f); rightLeg.Translation = new Vector3(-2f, -12f, 0f); rightLeg.AddCube(new(-2, 0, -2), new(4, 12, 4), new(0, 16)); - rightLegOverlay ??= new CubeBatchMesh("Right Leg Overlay", OverlayScale); + rightLegOverlay ??= new CubeGroupMesh("Right Leg Overlay", OverlayScale); rightLegOverlay.Pivot = new Vector3(0f, 12f, 0f); rightLegOverlay.Translation = new Vector3(-2f, -12f, 0f); - rightLegOverlay.AddCube(new(-2, 0, -2), new(4, 12, 4), new(0, 32), scale: OverlayScale); + rightLegOverlay.AddCube(new(-2, 0, -2), new(4, 12, 4), new(0, 32)); - leftLeg ??= new CubeBatchMesh("Left Leg"); + leftLeg ??= new CubeGroupMesh("Left Leg"); leftLeg.Pivot = new Vector3(0f, 12f, 0f); leftLeg.Translation = new Vector3(2f, -12f, 0f); leftLeg.AddCube(new(-2, 0, -2), new(4, 12, 4), new(16, 48)); - leftLegOverlay ??= new CubeBatchMesh("Left Leg Overlay", OverlayScale); + leftLegOverlay ??= new CubeGroupMesh("Left Leg Overlay", OverlayScale); leftLegOverlay.Pivot = new Vector3(0f, 12f, 0f); leftLegOverlay.Translation = new Vector3(2f, -12f, 0f); - leftLegOverlay.AddCube(new(-2, 0, -2), new(4, 12, 4), new(0, 48), scale: OverlayScale); + leftLegOverlay.AddCube(new(-2, 0, -2), new(4, 12, 4), new(0, 48)); } private void InitializeShaders() @@ -699,7 +699,7 @@ namespace PckStudio.Rendering if (!meshStorage.ContainsKey(skinBox.Type)) throw new KeyNotFoundException(skinBox.Type); - CubeBatchMesh cubeMesh = meshStorage[skinBox.Type]; + CubeGroupMesh cubeMesh = meshStorage[skinBox.Type]; cubeMesh.AddSkinBox(skinBox); } @@ -1069,7 +1069,7 @@ namespace PckStudio.Rendering private void RenderPart(ShaderProgram shader, string name, Matrix4 partMatrix, Matrix4 globalMatrix) { - CubeBatchMesh cubeMesh = meshStorage[name]; + CubeGroupMesh cubeMesh = meshStorage[name]; Vector3 translation = cubeMesh.Translation - cubeMesh.Offset; Vector3 pivot = cubeMesh.Pivot + cubeMesh.Offset; Matrix4 transform = Matrix4.CreateScale(cubeMesh.Scale);