Now /img accounts for whether a custom block is fullbright

This commit is contained in:
UnknownShadow200 2017-02-26 20:35:14 +11:00
parent 5de6a59c3d
commit d1fdfdd4e4
4 changed files with 27 additions and 13 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -40,7 +40,7 @@ namespace MCGalaxy.Drawing.Ops {
IPaletteMatcher selector;
public override void Perform(Vec3S32[] marks, Brush brush, Action<DrawOpBlock> 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);
}

View File

@ -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]