From d1fdfdd4e4df7f4f1245ffab70851bbd29af3867 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 26 Feb 2017 20:35:14 +1100 Subject: [PATCH] Now /img accounts for whether a custom block is fullbright --- MCGalaxy/Blocks/Block.cs | 8 +++++++- MCGalaxy/Commands/building/CmdPalette.cs | 4 ++-- MCGalaxy/Drawing/Image/ImagePrintDrawOp.cs | 19 ++++++++++++++----- MCGalaxy/util/Math/AABB.cs | 9 ++++----- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/MCGalaxy/Blocks/Block.cs b/MCGalaxy/Blocks/Block.cs index dd358a7f7..3e8f2b17f 100644 --- a/MCGalaxy/Blocks/Block.cs +++ b/MCGalaxy/Blocks/Block.cs @@ -22,7 +22,13 @@ namespace MCGalaxy { public sealed partial class Block { public static bool IsPhysicsId(byte block) { return block >= CpeCount && block != custom_block; } - + + public static void Unpack(byte raw, out byte block, out byte extBlock) { + block = raw; extBlock = 0; + if (raw < Block.CpeCount) return; + extBlock = raw; block = custom_block; + } + public static bool Walkthrough(byte block) { return block == air || block == shrub || block == Block.snow || block == fire || block == rope diff --git a/MCGalaxy/Commands/building/CmdPalette.cs b/MCGalaxy/Commands/building/CmdPalette.cs index 0e8bfb3e9..ccd578896 100644 --- a/MCGalaxy/Commands/building/CmdPalette.cs +++ b/MCGalaxy/Commands/building/CmdPalette.cs @@ -159,8 +159,8 @@ namespace MCGalaxy.Commands.Building { } static string FormatEntry(PaletteEntry e, Level lvl) { - byte block = e.Block, extBlock = 0; - if (block >= Block.CpeCount) { extBlock = block; block = Block.CpeCount; } + byte block, extBlock; + Block.Unpack(e.Block, out block, out extBlock); return lvl.BlockName(block, extBlock) + " - " + Utils.Hex(e.R, e.G, e.B); } diff --git a/MCGalaxy/Drawing/Image/ImagePrintDrawOp.cs b/MCGalaxy/Drawing/Image/ImagePrintDrawOp.cs index c14e55a4e..6ad4501d0 100644 --- a/MCGalaxy/Drawing/Image/ImagePrintDrawOp.cs +++ b/MCGalaxy/Drawing/Image/ImagePrintDrawOp.cs @@ -40,7 +40,7 @@ namespace MCGalaxy.Drawing.Ops { IPaletteMatcher selector; public override void Perform(Vec3S32[] marks, Brush brush, Action output) { - CalcState(Direction); + CalcState(Direction); selector = new RgbPaletteMatcher(); CalcLayerColors(); @@ -54,13 +54,13 @@ namespace MCGalaxy.Drawing.Ops { if (DualLayer) { ushort y = (ushort)(Origin.Y + Source.Height); for (int i = 0; i < Source.Width; i++) { - ushort x = (ushort)(Origin.X + dx.X * i); + ushort x = (ushort)(Origin.X + dx.X * i); ushort z = (ushort)(Origin.Z + dx.Z * i); output(Place(x, y, z, Block.rock, 0)); x = (ushort)(x + adj.X); z = (ushort)(z + adj.Z); output(Place(x, y, z, Block.rock, 0)); - } + } } Source.Dispose(); @@ -85,8 +85,17 @@ namespace MCGalaxy.Drawing.Ops { for (int i = 0; i < Palette.Entries.Length; i++) { PaletteEntry entry = Palette.Entries[i]; - front[i] = Multiply(entry, sun); - back[i] = Multiply(entry, dark); + byte block, extBlock; + Block.Unpack(entry.Block, out block, out extBlock); + BlockDefinition def = Level.GetBlockDef(block, extBlock); + + if (def != null && def.FullBright) { + front[i] = Multiply(entry, Colors.ParseHex("FFFFFF")); + back[i] = Multiply(entry, Colors.ParseHex("FFFFFF")); + } else { + front[i] = Multiply(entry, sun); + back[i] = Multiply(entry, dark); + } } selector.SetPalette(front, back); } diff --git a/MCGalaxy/util/Math/AABB.cs b/MCGalaxy/util/Math/AABB.cs index 46f4c8e14..641210231 100644 --- a/MCGalaxy/util/Math/AABB.cs +++ b/MCGalaxy/util/Math/AABB.cs @@ -111,11 +111,10 @@ namespace MCGalaxy { model = sep == -1 ? model : model.Substring(0, sep); AABB baseBB; - byte block; - if (byte.TryParse(model, out block)) { - byte extBlock = 0; - // For model, not a physics blocks means custom block - if (block >= Block.CpeCount) { extBlock = block; block = Block.custom_block; } + byte raw; + if (byte.TryParse(model, out raw)) { + byte block, extBlock; + Block.Unpack(raw, out block, out extBlock); baseBB = Block.BlockAABB(block, extBlock, lvl); baseBB = baseBB.Offset(-16, 0, -16); // centre around [-16, 16] instead of [0, 32]