mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-01-20 22:16:57 +00:00
Store colour support in the Terminal
Previously we stored it alongside the terminal. While this makes sense - it's not a property of the terminal itself, it ends up duplicating code in a bunch of places. We now track the colour flag on the terminal itself. This allows us to simplify a couple of things: - The palette now also knows whether it supports colours or not, and so performs greyscale conversion. This means we no longer need to thread a "greyscale" flag throughout terminal rendering. - Remove isColour() getters from a whole load of places (TerminalMethods, ServerTerminal, IComputerEnvironment).
This commit is contained in:
parent
c49547b962
commit
cf05ab1db1
@ -9,7 +9,6 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
|||||||
import dan200.computercraft.client.gui.widgets.ComputerSidebar;
|
import dan200.computercraft.client.gui.widgets.ComputerSidebar;
|
||||||
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
||||||
import dan200.computercraft.client.render.ComputerBorderRenderer;
|
import dan200.computercraft.client.render.ComputerBorderRenderer;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
|
||||||
import dan200.computercraft.shared.computer.inventory.ContainerComputerBase;
|
import dan200.computercraft.shared.computer.inventory.ContainerComputerBase;
|
||||||
import net.minecraft.entity.player.PlayerInventory;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
@ -32,10 +31,7 @@ public final class GuiComputer<T extends ContainerComputerBase> extends Computer
|
|||||||
@Override
|
@Override
|
||||||
protected WidgetTerminal createTerminal()
|
protected WidgetTerminal createTerminal()
|
||||||
{
|
{
|
||||||
return new WidgetTerminal(
|
return new WidgetTerminal( terminalData, input, leftPos + ComputerSidebar.WIDTH + BORDER, topPos + BORDER );
|
||||||
getMenu().getFamily() != ComputerFamily.NORMAL, terminalData, input,
|
|
||||||
leftPos + ComputerSidebar.WIDTH + BORDER, topPos + BORDER
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -43,10 +43,7 @@ public class GuiTurtle extends ComputerScreenBase<ContainerTurtle>
|
|||||||
@Override
|
@Override
|
||||||
protected WidgetTerminal createTerminal()
|
protected WidgetTerminal createTerminal()
|
||||||
{
|
{
|
||||||
return new WidgetTerminal(
|
return new WidgetTerminal( terminalData, input, leftPos + BORDER + ComputerSidebar.WIDTH, topPos + BORDER );
|
||||||
getMenu().getFamily() != ComputerFamily.NORMAL, terminalData, input,
|
|
||||||
leftPos + BORDER + ComputerSidebar.WIDTH, topPos + BORDER
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,7 +8,6 @@ package dan200.computercraft.client.gui;
|
|||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
|
||||||
import dan200.computercraft.shared.computer.inventory.ContainerComputerBase;
|
import dan200.computercraft.shared.computer.inventory.ContainerComputerBase;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
import net.minecraft.client.gui.IHasContainer;
|
import net.minecraft.client.gui.IHasContainer;
|
||||||
@ -56,7 +55,7 @@ public class NoTermComputerScreen<T extends ContainerComputerBase> extends Scree
|
|||||||
super.init();
|
super.init();
|
||||||
minecraft.keyboardHandler.setSendRepeatsToGui( true );
|
minecraft.keyboardHandler.setSendRepeatsToGui( true );
|
||||||
|
|
||||||
terminal = addWidget( new WidgetTerminal( getMenu().getFamily() != ComputerFamily.NORMAL, terminalData, new ClientInputHandler( menu ), 0, 0 ) );
|
terminal = addWidget( new WidgetTerminal( terminalData, new ClientInputHandler( menu ), 0, 0 ) );
|
||||||
terminal.visible = false;
|
terminal.visible = false;
|
||||||
terminal.active = false;
|
terminal.active = false;
|
||||||
setFocused( terminal );
|
setFocused( terminal );
|
||||||
|
@ -33,11 +33,9 @@ public class WidgetTerminal extends Widget
|
|||||||
{
|
{
|
||||||
private static final float TERMINATE_TIME = 0.5f;
|
private static final float TERMINATE_TIME = 0.5f;
|
||||||
|
|
||||||
private final boolean isColour;
|
|
||||||
private final @Nonnull Terminal terminal;
|
private final @Nonnull Terminal terminal;
|
||||||
private final @Nonnull InputHandler computer;
|
private final @Nonnull InputHandler computer;
|
||||||
|
|
||||||
|
|
||||||
// The positions of the actual terminal
|
// The positions of the actual terminal
|
||||||
private final int innerX;
|
private final int innerX;
|
||||||
private final int innerY;
|
private final int innerY;
|
||||||
@ -54,11 +52,10 @@ public class WidgetTerminal extends Widget
|
|||||||
|
|
||||||
private final BitSet keysDown = new BitSet( 256 );
|
private final BitSet keysDown = new BitSet( 256 );
|
||||||
|
|
||||||
public WidgetTerminal( boolean isColour, @Nonnull Terminal terminal, @Nonnull InputHandler computer, int x, int y )
|
public WidgetTerminal( @Nonnull Terminal terminal, @Nonnull InputHandler computer, int x, int y )
|
||||||
{
|
{
|
||||||
super( x, y, terminal.getWidth() * FONT_WIDTH + MARGIN * 2, terminal.getHeight() * FONT_HEIGHT + MARGIN * 2, StringTextComponent.EMPTY );
|
super( x, y, terminal.getWidth() * FONT_WIDTH + MARGIN * 2, terminal.getHeight() * FONT_HEIGHT + MARGIN * 2, StringTextComponent.EMPTY );
|
||||||
|
|
||||||
this.isColour = isColour;
|
|
||||||
this.terminal = terminal;
|
this.terminal = terminal;
|
||||||
this.computer = computer;
|
this.computer = computer;
|
||||||
|
|
||||||
@ -178,7 +175,7 @@ public class WidgetTerminal extends Widget
|
|||||||
public boolean mouseClicked( double mouseX, double mouseY, int button )
|
public boolean mouseClicked( double mouseX, double mouseY, int button )
|
||||||
{
|
{
|
||||||
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
||||||
if( !isColour || button < 0 || button > 2 ) return false;
|
if( !hasMouseSupport() || button < 0 || button > 2 ) return false;
|
||||||
|
|
||||||
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
||||||
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
||||||
@ -198,7 +195,7 @@ public class WidgetTerminal extends Widget
|
|||||||
public boolean mouseReleased( double mouseX, double mouseY, int button )
|
public boolean mouseReleased( double mouseX, double mouseY, int button )
|
||||||
{
|
{
|
||||||
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
||||||
if( !isColour || button < 0 || button > 2 ) return false;
|
if( !hasMouseSupport() || button < 0 || button > 2 ) return false;
|
||||||
|
|
||||||
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
||||||
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
||||||
@ -221,7 +218,7 @@ public class WidgetTerminal extends Widget
|
|||||||
public boolean mouseDragged( double mouseX, double mouseY, int button, double v2, double v3 )
|
public boolean mouseDragged( double mouseX, double mouseY, int button, double v2, double v3 )
|
||||||
{
|
{
|
||||||
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
||||||
if( !isColour || button < 0 || button > 2 ) return false;
|
if( !hasMouseSupport() || button < 0 || button > 2 ) return false;
|
||||||
|
|
||||||
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
||||||
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
||||||
@ -242,7 +239,7 @@ public class WidgetTerminal extends Widget
|
|||||||
public boolean mouseScrolled( double mouseX, double mouseY, double delta )
|
public boolean mouseScrolled( double mouseX, double mouseY, double delta )
|
||||||
{
|
{
|
||||||
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
if( !inTermRegion( mouseX, mouseY ) ) return false;
|
||||||
if( !isColour || delta == 0 ) return false;
|
if( !hasMouseSupport() || delta == 0 ) return false;
|
||||||
|
|
||||||
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
int charX = (int) ((mouseX - innerX) / FONT_WIDTH);
|
||||||
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
int charY = (int) ((mouseY - innerY) / FONT_HEIGHT);
|
||||||
@ -262,6 +259,11 @@ public class WidgetTerminal extends Widget
|
|||||||
return active && visible && mouseX >= innerX && mouseY >= innerY && mouseX < innerX + innerWidth && mouseY < innerY + innerHeight;
|
return active && visible && mouseX >= innerX && mouseY >= innerY && mouseX < innerX + innerWidth && mouseY < innerY + innerHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasMouseSupport()
|
||||||
|
{
|
||||||
|
return terminal.isColour();
|
||||||
|
}
|
||||||
|
|
||||||
public void update()
|
public void update()
|
||||||
{
|
{
|
||||||
if( terminateTimer >= 0 && terminateTimer < TERMINATE_TIME && (terminateTimer += 0.05f) > TERMINATE_TIME )
|
if( terminateTimer >= 0 && terminateTimer < TERMINATE_TIME && (terminateTimer += 0.05f) > TERMINATE_TIME )
|
||||||
@ -315,14 +317,7 @@ public class WidgetTerminal extends Widget
|
|||||||
IRenderTypeBuffer.Impl renderer = IRenderTypeBuffer.immediate( Tessellator.getInstance().getBuilder() );
|
IRenderTypeBuffer.Impl renderer = IRenderTypeBuffer.immediate( Tessellator.getInstance().getBuilder() );
|
||||||
IVertexBuilder buffer = renderer.getBuffer( RenderTypes.TERMINAL_WITH_DEPTH );
|
IVertexBuilder buffer = renderer.getBuffer( RenderTypes.TERMINAL_WITH_DEPTH );
|
||||||
|
|
||||||
if( terminal != null )
|
FixedWidthFontRenderer.drawTerminal( matrix, buffer, innerX, innerY, terminal, MARGIN, MARGIN, MARGIN, MARGIN );
|
||||||
{
|
|
||||||
FixedWidthFontRenderer.drawTerminal( matrix, buffer, innerX, innerY, terminal, !isColour, MARGIN, MARGIN, MARGIN, MARGIN );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FixedWidthFontRenderer.drawEmptyTerminal( matrix, buffer, x, y, width, height );
|
|
||||||
}
|
|
||||||
|
|
||||||
renderer.endBatch();
|
renderer.endBatch();
|
||||||
}
|
}
|
||||||
|
@ -25,15 +25,13 @@ import javax.annotation.Nonnull;
|
|||||||
*/
|
*/
|
||||||
public class PocketComputerData
|
public class PocketComputerData
|
||||||
{
|
{
|
||||||
private boolean isColour;
|
|
||||||
private Terminal terminal;
|
private Terminal terminal;
|
||||||
private ComputerState state = ComputerState.OFF;
|
private ComputerState state = ComputerState.OFF;
|
||||||
private int lightColour = -1;
|
private int lightColour = -1;
|
||||||
|
|
||||||
public PocketComputerData( boolean colour )
|
public PocketComputerData( boolean colour )
|
||||||
{
|
{
|
||||||
isColour = colour;
|
terminal = new Terminal( ComputerCraft.pocketTermWidth, ComputerCraft.pocketTermHeight, colour );
|
||||||
terminal = new Terminal( ComputerCraft.pocketTermWidth, ComputerCraft.pocketTermHeight );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLightState()
|
public int getLightState()
|
||||||
@ -41,11 +39,6 @@ public class PocketComputerData
|
|||||||
return state != ComputerState.OFF ? lightColour : -1;
|
return state != ComputerState.OFF ? lightColour : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isColour()
|
|
||||||
{
|
|
||||||
return isColour;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public Terminal getTerminal()
|
public Terminal getTerminal()
|
||||||
{
|
{
|
||||||
@ -65,8 +58,7 @@ public class PocketComputerData
|
|||||||
|
|
||||||
public void setTerminal( TerminalState state )
|
public void setTerminal( TerminalState state )
|
||||||
{
|
{
|
||||||
isColour = state.colour;
|
if( state.width != terminal.getWidth() || state.height != terminal.getHeight() || state.colour != terminal.isColour() )
|
||||||
if( state.width != terminal.getWidth() || state.height != terminal.getHeight() )
|
|
||||||
{
|
{
|
||||||
terminal = state.create();
|
terminal = state.create();
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ public final class ItemPocketRenderer extends ItemMapLikeRenderer
|
|||||||
|
|
||||||
FixedWidthFontRenderer.drawTerminal(
|
FixedWidthFontRenderer.drawTerminal(
|
||||||
matrix, bufferSource.getBuffer( RenderTypes.TERMINAL_WITHOUT_DEPTH ),
|
matrix, bufferSource.getBuffer( RenderTypes.TERMINAL_WITHOUT_DEPTH ),
|
||||||
MARGIN, MARGIN, terminal, !computer.isColour(), MARGIN, MARGIN, MARGIN, MARGIN
|
MARGIN, MARGIN, terminal, MARGIN, MARGIN, MARGIN, MARGIN
|
||||||
);
|
);
|
||||||
FixedWidthFontRenderer.drawBlocker(
|
FixedWidthFontRenderer.drawBlocker(
|
||||||
matrix, bufferSource.getBuffer( RenderTypes.TERMINAL_BLOCKER ),
|
matrix, bufferSource.getBuffer( RenderTypes.TERMINAL_BLOCKER ),
|
||||||
|
@ -173,14 +173,14 @@ class MonitorTextureBufferShader
|
|||||||
buffer.limit( pos );
|
buffer.limit( pos );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUniformData( ByteBuffer buffer, Terminal terminal, boolean greyscale )
|
public static void setUniformData( ByteBuffer buffer, Terminal terminal )
|
||||||
{
|
{
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
Palette palette = terminal.getPalette();
|
Palette palette = terminal.getPalette();
|
||||||
for( int i = 0; i < 16; i++ )
|
for( int i = 0; i < 16; i++ )
|
||||||
{
|
{
|
||||||
double[] colour = palette.getColour( i );
|
double[] colour = palette.getColour( i );
|
||||||
if( greyscale )
|
if( !terminal.isColour() )
|
||||||
{
|
{
|
||||||
float f = FixedWidthFontRenderer.toGreyscale( colour );
|
float f = FixedWidthFontRenderer.toGreyscale( colour );
|
||||||
buffer.putFloat( pos, f ).putFloat( pos + 4, f ).putFloat( pos + 8, f );
|
buffer.putFloat( pos, f ).putFloat( pos + 4, f ).putFloat( pos + 8, f );
|
||||||
|
@ -63,7 +63,7 @@ public final class PrintoutRenderer
|
|||||||
{
|
{
|
||||||
FixedWidthFontRenderer.drawString( transform, buffer,
|
FixedWidthFontRenderer.drawString( transform, buffer,
|
||||||
x, y + line * FONT_HEIGHT, text[start + line], colours[start + line],
|
x, y + line * FONT_HEIGHT, text[start + line], colours[start + line],
|
||||||
Palette.DEFAULT, false, light
|
Palette.DEFAULT, light
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,7 +76,7 @@ public final class PrintoutRenderer
|
|||||||
FixedWidthFontRenderer.drawString( transform, buffer,
|
FixedWidthFontRenderer.drawString( transform, buffer,
|
||||||
x, y + line * FONT_HEIGHT,
|
x, y + line * FONT_HEIGHT,
|
||||||
new TextBuffer( text[start + line] ), new TextBuffer( colours[start + line] ),
|
new TextBuffer( text[start + line] ), new TextBuffer( colours[start + line] ),
|
||||||
Palette.DEFAULT, false, light
|
Palette.DEFAULT, light
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ public class TileEntityMonitorRenderer extends TileEntityRenderer<TileMonitor>
|
|||||||
DirectBuffers.setBufferData( GL31.GL_TEXTURE_BUFFER, monitor.tboBuffer, terminalBuffer, GL20.GL_STATIC_DRAW );
|
DirectBuffers.setBufferData( GL31.GL_TEXTURE_BUFFER, monitor.tboBuffer, terminalBuffer, GL20.GL_STATIC_DRAW );
|
||||||
|
|
||||||
ByteBuffer uniformBuffer = getBuffer( MonitorTextureBufferShader.UNIFORM_SIZE );
|
ByteBuffer uniformBuffer = getBuffer( MonitorTextureBufferShader.UNIFORM_SIZE );
|
||||||
MonitorTextureBufferShader.setUniformData( uniformBuffer, terminal, !monitor.isColour() );
|
MonitorTextureBufferShader.setUniformData( uniformBuffer, terminal );
|
||||||
DirectBuffers.setBufferData( GL31.GL_UNIFORM_BUFFER, monitor.tboUniform, uniformBuffer, GL20.GL_STATIC_DRAW );
|
DirectBuffers.setBufferData( GL31.GL_UNIFORM_BUFFER, monitor.tboUniform, uniformBuffer, GL20.GL_STATIC_DRAW );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,13 +197,13 @@ public class TileEntityMonitorRenderer extends TileEntityRenderer<TileMonitor>
|
|||||||
|
|
||||||
// Draw the main terminal and store how many vertices it has.
|
// Draw the main terminal and store how many vertices it has.
|
||||||
DirectFixedWidthFontRenderer.drawTerminalWithoutCursor(
|
DirectFixedWidthFontRenderer.drawTerminalWithoutCursor(
|
||||||
buffer, 0, 0, terminal, !monitor.isColour(), yMargin, yMargin, xMargin, xMargin
|
buffer, 0, 0, terminal, yMargin, yMargin, xMargin, xMargin
|
||||||
);
|
);
|
||||||
int termIndexes = buffer.position() / vertexSize;
|
int termIndexes = buffer.position() / vertexSize;
|
||||||
|
|
||||||
// If the cursor is visible, we append it to the end of our buffer. When rendering, we can either
|
// If the cursor is visible, we append it to the end of our buffer. When rendering, we can either
|
||||||
// render n or n+1 quads and so toggle the cursor on and off.
|
// render n or n+1 quads and so toggle the cursor on and off.
|
||||||
DirectFixedWidthFontRenderer.drawCursor( buffer, 0, 0, terminal, !monitor.isColour() );
|
DirectFixedWidthFontRenderer.drawCursor( buffer, 0, 0, terminal );
|
||||||
|
|
||||||
buffer.flip();
|
buffer.flip();
|
||||||
|
|
||||||
|
@ -61,25 +61,25 @@ public final class DirectFixedWidthFontRenderer
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawQuad( ByteBuffer emitter, float x, float y, float width, float height, Palette palette, boolean greyscale, char colourIndex )
|
private static void drawQuad( ByteBuffer emitter, float x, float y, float width, float height, Palette palette, char colourIndex )
|
||||||
{
|
{
|
||||||
byte[] colour = palette.getByteColour( getColour( colourIndex, Colour.BLACK ), greyscale );
|
byte[] colour = palette.getRenderColours( getColour( colourIndex, Colour.BLACK ) );
|
||||||
quad( emitter, x, y, x + width, y + height, colour, BACKGROUND_START, BACKGROUND_START, BACKGROUND_END, BACKGROUND_END );
|
quad( emitter, x, y, x + width, y + height, colour, BACKGROUND_START, BACKGROUND_START, BACKGROUND_END, BACKGROUND_END );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawBackground(
|
private static void drawBackground(
|
||||||
@Nonnull ByteBuffer buffer, float x, float y, @Nonnull TextBuffer backgroundColour, @Nonnull Palette palette, boolean greyscale,
|
@Nonnull ByteBuffer buffer, float x, float y, @Nonnull TextBuffer backgroundColour, @Nonnull Palette palette,
|
||||||
float leftMarginSize, float rightMarginSize, float height
|
float leftMarginSize, float rightMarginSize, float height
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if( leftMarginSize > 0 )
|
if( leftMarginSize > 0 )
|
||||||
{
|
{
|
||||||
drawQuad( buffer, x - leftMarginSize, y, leftMarginSize, height, palette, greyscale, backgroundColour.charAt( 0 ) );
|
drawQuad( buffer, x - leftMarginSize, y, leftMarginSize, height, palette, backgroundColour.charAt( 0 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rightMarginSize > 0 )
|
if( rightMarginSize > 0 )
|
||||||
{
|
{
|
||||||
drawQuad( buffer, x + backgroundColour.length() * FONT_WIDTH, y, rightMarginSize, height, palette, greyscale, backgroundColour.charAt( backgroundColour.length() - 1 ) );
|
drawQuad( buffer, x + backgroundColour.length() * FONT_WIDTH, y, rightMarginSize, height, palette, backgroundColour.charAt( backgroundColour.length() - 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Batch together runs of identical background cells.
|
// Batch together runs of identical background cells.
|
||||||
@ -92,7 +92,7 @@ public final class DirectFixedWidthFontRenderer
|
|||||||
|
|
||||||
if( blockColour != '\0' )
|
if( blockColour != '\0' )
|
||||||
{
|
{
|
||||||
drawQuad( buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (i - blockStart), height, palette, greyscale, blockColour );
|
drawQuad( buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (i - blockStart), height, palette, blockColour );
|
||||||
}
|
}
|
||||||
|
|
||||||
blockColour = colourIndex;
|
blockColour = colourIndex;
|
||||||
@ -101,15 +101,15 @@ public final class DirectFixedWidthFontRenderer
|
|||||||
|
|
||||||
if( blockColour != '\0' )
|
if( blockColour != '\0' )
|
||||||
{
|
{
|
||||||
drawQuad( buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (backgroundColour.length() - blockStart), height, palette, greyscale, blockColour );
|
drawQuad( buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (backgroundColour.length() - blockStart), height, palette, blockColour );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawString( @Nonnull ByteBuffer buffer, float x, float y, @Nonnull TextBuffer text, @Nonnull TextBuffer textColour, @Nonnull Palette palette, boolean greyscale )
|
private static void drawString( @Nonnull ByteBuffer buffer, float x, float y, @Nonnull TextBuffer text, @Nonnull TextBuffer textColour, @Nonnull Palette palette )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < text.length(); i++ )
|
for( int i = 0; i < text.length(); i++ )
|
||||||
{
|
{
|
||||||
byte[] colour = palette.getByteColour( getColour( textColour.charAt( i ), Colour.BLACK ), greyscale );
|
byte[] colour = palette.getRenderColours( getColour( textColour.charAt( i ), Colour.BLACK ) );
|
||||||
|
|
||||||
int index = text.charAt( i );
|
int index = text.charAt( i );
|
||||||
if( index > 255 ) index = '?';
|
if( index > 255 ) index = '?';
|
||||||
@ -118,7 +118,7 @@ public final class DirectFixedWidthFontRenderer
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void drawTerminalWithoutCursor(
|
public static void drawTerminalWithoutCursor(
|
||||||
@Nonnull ByteBuffer buffer, float x, float y, @Nonnull Terminal terminal, boolean greyscale,
|
@Nonnull ByteBuffer buffer, float x, float y, @Nonnull Terminal terminal,
|
||||||
float topMarginSize, float bottomMarginSize, float leftMarginSize, float rightMarginSize
|
float topMarginSize, float bottomMarginSize, float leftMarginSize, float rightMarginSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -127,12 +127,12 @@ public final class DirectFixedWidthFontRenderer
|
|||||||
|
|
||||||
// Top and bottom margins
|
// Top and bottom margins
|
||||||
drawBackground(
|
drawBackground(
|
||||||
buffer, x, y - topMarginSize, terminal.getBackgroundColourLine( 0 ), palette, greyscale,
|
buffer, x, y - topMarginSize, terminal.getBackgroundColourLine( 0 ), palette,
|
||||||
leftMarginSize, rightMarginSize, topMarginSize
|
leftMarginSize, rightMarginSize, topMarginSize
|
||||||
);
|
);
|
||||||
|
|
||||||
drawBackground(
|
drawBackground(
|
||||||
buffer, x, y + height * FONT_HEIGHT, terminal.getBackgroundColourLine( height - 1 ), palette, greyscale,
|
buffer, x, y + height * FONT_HEIGHT, terminal.getBackgroundColourLine( height - 1 ), palette,
|
||||||
leftMarginSize, rightMarginSize, bottomMarginSize
|
leftMarginSize, rightMarginSize, bottomMarginSize
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -141,21 +141,21 @@ public final class DirectFixedWidthFontRenderer
|
|||||||
{
|
{
|
||||||
float rowY = y + FONT_HEIGHT * i;
|
float rowY = y + FONT_HEIGHT * i;
|
||||||
drawBackground(
|
drawBackground(
|
||||||
buffer, x, rowY, terminal.getBackgroundColourLine( i ), palette, greyscale,
|
buffer, x, rowY, terminal.getBackgroundColourLine( i ), palette,
|
||||||
leftMarginSize, rightMarginSize, FONT_HEIGHT
|
leftMarginSize, rightMarginSize, FONT_HEIGHT
|
||||||
);
|
);
|
||||||
drawString(
|
drawString(
|
||||||
buffer, x, rowY, terminal.getLine( i ), terminal.getTextColourLine( i ),
|
buffer, x, rowY, terminal.getLine( i ), terminal.getTextColourLine( i ),
|
||||||
palette, greyscale
|
palette
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawCursor( @Nonnull ByteBuffer buffer, float x, float y, @Nonnull Terminal terminal, boolean greyscale )
|
public static void drawCursor( @Nonnull ByteBuffer buffer, float x, float y, @Nonnull Terminal terminal )
|
||||||
{
|
{
|
||||||
if( isCursorVisible( terminal ) )
|
if( isCursorVisible( terminal ) )
|
||||||
{
|
{
|
||||||
byte[] colour = terminal.getPalette().getByteColour( 15 - terminal.getTextColour(), greyscale );
|
byte[] colour = terminal.getPalette().getRenderColours( 15 - terminal.getTextColour() );
|
||||||
drawChar( buffer, x + terminal.getCursorX() * FONT_WIDTH, y + terminal.getCursorY() * FONT_HEIGHT, '_', colour );
|
drawChar( buffer, x + terminal.getCursorX() * FONT_WIDTH, y + terminal.getCursorY() * FONT_HEIGHT, '_', colour );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,26 +92,26 @@ public final class FixedWidthFontRenderer
|
|||||||
quad( transform, buffer, x, y, x + width, y + height, z, colour, BACKGROUND_START, BACKGROUND_START, BACKGROUND_END, BACKGROUND_END, light );
|
quad( transform, buffer, x, y, x + width, y + height, z, colour, BACKGROUND_START, BACKGROUND_START, BACKGROUND_END, BACKGROUND_END, light );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawQuad( Matrix4f transform, IVertexBuilder buffer, float x, float y, float width, float height, Palette palette, boolean greyscale, char colourIndex, int light )
|
private static void drawQuad( Matrix4f transform, IVertexBuilder buffer, float x, float y, float width, float height, Palette palette, char colourIndex, int light )
|
||||||
{
|
{
|
||||||
byte[] colour = palette.getByteColour( getColour( colourIndex, Colour.BLACK ), greyscale );
|
byte[] colour = palette.getRenderColours( getColour( colourIndex, Colour.BLACK ) );
|
||||||
drawQuad( transform, buffer, x, y, 0, width, height, colour, light );
|
drawQuad( transform, buffer, x, y, 0, width, height, colour, light );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void drawBackground(
|
private static void drawBackground(
|
||||||
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y,
|
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y,
|
||||||
@Nonnull TextBuffer backgroundColour, @Nonnull Palette palette, boolean greyscale,
|
@Nonnull TextBuffer backgroundColour, @Nonnull Palette palette,
|
||||||
float leftMarginSize, float rightMarginSize, float height, int light
|
float leftMarginSize, float rightMarginSize, float height, int light
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if( leftMarginSize > 0 )
|
if( leftMarginSize > 0 )
|
||||||
{
|
{
|
||||||
drawQuad( transform, buffer, x - leftMarginSize, y, leftMarginSize, height, palette, greyscale, backgroundColour.charAt( 0 ), light );
|
drawQuad( transform, buffer, x - leftMarginSize, y, leftMarginSize, height, palette, backgroundColour.charAt( 0 ), light );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rightMarginSize > 0 )
|
if( rightMarginSize > 0 )
|
||||||
{
|
{
|
||||||
drawQuad( transform, buffer, x + backgroundColour.length() * FONT_WIDTH, y, rightMarginSize, height, palette, greyscale, backgroundColour.charAt( backgroundColour.length() - 1 ), light );
|
drawQuad( transform, buffer, x + backgroundColour.length() * FONT_WIDTH, y, rightMarginSize, height, palette, backgroundColour.charAt( backgroundColour.length() - 1 ), light );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Batch together runs of identical background cells.
|
// Batch together runs of identical background cells.
|
||||||
@ -124,7 +124,7 @@ public final class FixedWidthFontRenderer
|
|||||||
|
|
||||||
if( blockColour != '\0' )
|
if( blockColour != '\0' )
|
||||||
{
|
{
|
||||||
drawQuad( transform, buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (i - blockStart), height, palette, greyscale, blockColour, light );
|
drawQuad( transform, buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (i - blockStart), height, palette, blockColour, light );
|
||||||
}
|
}
|
||||||
|
|
||||||
blockColour = colourIndex;
|
blockColour = colourIndex;
|
||||||
@ -133,18 +133,18 @@ public final class FixedWidthFontRenderer
|
|||||||
|
|
||||||
if( blockColour != '\0' )
|
if( blockColour != '\0' )
|
||||||
{
|
{
|
||||||
drawQuad( transform, buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (backgroundColour.length() - blockStart), height, palette, greyscale, blockColour, light );
|
drawQuad( transform, buffer, x + blockStart * FONT_WIDTH, y, FONT_WIDTH * (backgroundColour.length() - blockStart), height, palette, blockColour, light );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawString(
|
public static void drawString(
|
||||||
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder renderer, float x, float y,
|
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder renderer, float x, float y,
|
||||||
@Nonnull TextBuffer text, @Nonnull TextBuffer textColour, @Nonnull Palette palette, boolean greyscale, int light
|
@Nonnull TextBuffer text, @Nonnull TextBuffer textColour, @Nonnull Palette palette, int light
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
for( int i = 0; i < text.length(); i++ )
|
for( int i = 0; i < text.length(); i++ )
|
||||||
{
|
{
|
||||||
byte[] colour = palette.getByteColour( getColour( textColour.charAt( i ), Colour.BLACK ), greyscale );
|
byte[] colour = palette.getRenderColours( getColour( textColour.charAt( i ), Colour.BLACK ) );
|
||||||
|
|
||||||
int index = text.charAt( i );
|
int index = text.charAt( i );
|
||||||
if( index > 255 ) index = '?';
|
if( index > 255 ) index = '?';
|
||||||
@ -154,7 +154,7 @@ public final class FixedWidthFontRenderer
|
|||||||
|
|
||||||
public static void drawTerminalWithoutCursor(
|
public static void drawTerminalWithoutCursor(
|
||||||
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y,
|
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y,
|
||||||
@Nonnull Terminal terminal, boolean greyscale,
|
@Nonnull Terminal terminal,
|
||||||
float topMarginSize, float bottomMarginSize, float leftMarginSize, float rightMarginSize
|
float topMarginSize, float bottomMarginSize, float leftMarginSize, float rightMarginSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -164,13 +164,13 @@ public final class FixedWidthFontRenderer
|
|||||||
// Top and bottom margins
|
// Top and bottom margins
|
||||||
drawBackground(
|
drawBackground(
|
||||||
transform, buffer, x, y - topMarginSize,
|
transform, buffer, x, y - topMarginSize,
|
||||||
terminal.getBackgroundColourLine( 0 ), palette, greyscale,
|
terminal.getBackgroundColourLine( 0 ), palette,
|
||||||
leftMarginSize, rightMarginSize, topMarginSize, FULL_BRIGHT_LIGHTMAP
|
leftMarginSize, rightMarginSize, topMarginSize, FULL_BRIGHT_LIGHTMAP
|
||||||
);
|
);
|
||||||
|
|
||||||
drawBackground(
|
drawBackground(
|
||||||
transform, buffer, x, y + height * FONT_HEIGHT,
|
transform, buffer, x, y + height * FONT_HEIGHT,
|
||||||
terminal.getBackgroundColourLine( height - 1 ), palette, greyscale,
|
terminal.getBackgroundColourLine( height - 1 ), palette,
|
||||||
leftMarginSize, rightMarginSize, bottomMarginSize, FULL_BRIGHT_LIGHTMAP
|
leftMarginSize, rightMarginSize, bottomMarginSize, FULL_BRIGHT_LIGHTMAP
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -180,12 +180,12 @@ public final class FixedWidthFontRenderer
|
|||||||
float rowY = y + FONT_HEIGHT * i;
|
float rowY = y + FONT_HEIGHT * i;
|
||||||
drawBackground(
|
drawBackground(
|
||||||
transform, buffer, x, rowY, terminal.getBackgroundColourLine( i ),
|
transform, buffer, x, rowY, terminal.getBackgroundColourLine( i ),
|
||||||
palette, greyscale, leftMarginSize, rightMarginSize, FONT_HEIGHT, FULL_BRIGHT_LIGHTMAP
|
palette, leftMarginSize, rightMarginSize, FONT_HEIGHT, FULL_BRIGHT_LIGHTMAP
|
||||||
);
|
);
|
||||||
|
|
||||||
drawString(
|
drawString(
|
||||||
transform, buffer, x, rowY, terminal.getLine( i ), terminal.getTextColourLine( i ),
|
transform, buffer, x, rowY, terminal.getLine( i ), terminal.getTextColourLine( i ),
|
||||||
palette, greyscale, FULL_BRIGHT_LIGHTMAP
|
palette, FULL_BRIGHT_LIGHTMAP
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -200,25 +200,23 @@ public final class FixedWidthFontRenderer
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void drawCursor(
|
public static void drawCursor(
|
||||||
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y,
|
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y, @Nonnull Terminal terminal
|
||||||
@Nonnull Terminal terminal, boolean greyscale
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if( isCursorVisible( terminal ) && FrameInfo.getGlobalCursorBlink() )
|
if( isCursorVisible( terminal ) && FrameInfo.getGlobalCursorBlink() )
|
||||||
{
|
{
|
||||||
byte[] colour = terminal.getPalette().getByteColour( 15 - terminal.getTextColour(), greyscale );
|
byte[] colour = terminal.getPalette().getRenderColours( 15 - terminal.getTextColour() );
|
||||||
drawChar( transform, buffer, x + terminal.getCursorX() * FONT_WIDTH, y + terminal.getCursorY() * FONT_HEIGHT, '_', colour, FULL_BRIGHT_LIGHTMAP );
|
drawChar( transform, buffer, x + terminal.getCursorX() * FONT_WIDTH, y + terminal.getCursorY() * FONT_HEIGHT, '_', colour, FULL_BRIGHT_LIGHTMAP );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawTerminal(
|
public static void drawTerminal(
|
||||||
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y,
|
@Nonnull Matrix4f transform, @Nonnull IVertexBuilder buffer, float x, float y, @Nonnull Terminal terminal,
|
||||||
@Nonnull Terminal terminal, boolean greyscale,
|
|
||||||
float topMarginSize, float bottomMarginSize, float leftMarginSize, float rightMarginSize
|
float topMarginSize, float bottomMarginSize, float leftMarginSize, float rightMarginSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
drawTerminalWithoutCursor( transform, buffer, x, y, terminal, greyscale, topMarginSize, bottomMarginSize, leftMarginSize, rightMarginSize );
|
drawTerminalWithoutCursor( transform, buffer, x, y, terminal, topMarginSize, bottomMarginSize, leftMarginSize, rightMarginSize );
|
||||||
drawCursor( transform, buffer, x, y, terminal, greyscale );
|
drawCursor( transform, buffer, x, y, terminal );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawEmptyTerminal( @Nonnull Matrix4f transform, @Nonnull IVertexBuilder renderer, float x, float y, float width, float height )
|
public static void drawEmptyTerminal( @Nonnull Matrix4f transform, @Nonnull IVertexBuilder renderer, float x, float y, float width, float height )
|
||||||
|
@ -69,10 +69,4 @@ public class TermAPI extends TermMethods implements ILuaAPI
|
|||||||
{
|
{
|
||||||
return terminal;
|
return terminal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isColour()
|
|
||||||
{
|
|
||||||
return environment.isColour();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,6 @@ public abstract class TermMethods
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
public abstract Terminal getTerminal() throws LuaException;
|
public abstract Terminal getTerminal() throws LuaException;
|
||||||
|
|
||||||
public abstract boolean isColour() throws LuaException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write {@code text} at the current cursor position, moving the cursor to the end of the text.
|
* Write {@code text} at the current cursor position, moving the cursor to the end of the text.
|
||||||
*
|
*
|
||||||
@ -258,7 +256,7 @@ public abstract class TermMethods
|
|||||||
@LuaFunction( { "isColour", "isColor" } )
|
@LuaFunction( { "isColour", "isColor" } )
|
||||||
public final boolean getIsColour() throws LuaException
|
public final boolean getIsColour() throws LuaException
|
||||||
{
|
{
|
||||||
return isColour();
|
return getTerminal().isColour();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -637,11 +637,10 @@ final class ComputerExecutor
|
|||||||
private void displayFailure( String message, String extra )
|
private void displayFailure( String message, String extra )
|
||||||
{
|
{
|
||||||
Terminal terminal = computer.getTerminal();
|
Terminal terminal = computer.getTerminal();
|
||||||
boolean colour = computer.getComputerEnvironment().isColour();
|
|
||||||
terminal.reset();
|
terminal.reset();
|
||||||
|
|
||||||
// Display our primary error message
|
// Display our primary error message
|
||||||
if( colour ) terminal.setTextColour( 15 - Colour.RED.ordinal() );
|
if( terminal.isColour() ) terminal.setTextColour( 15 - Colour.RED.ordinal() );
|
||||||
terminal.write( message );
|
terminal.write( message );
|
||||||
|
|
||||||
if( extra != null )
|
if( extra != null )
|
||||||
@ -654,7 +653,7 @@ final class ComputerExecutor
|
|||||||
|
|
||||||
// And display our generic "CC may be installed incorrectly" message.
|
// And display our generic "CC may be installed incorrectly" message.
|
||||||
terminal.setCursorPos( 0, terminal.getCursorY() + 1 );
|
terminal.setCursorPos( 0, terminal.getCursorY() + 1 );
|
||||||
if( colour ) terminal.setTextColour( 15 - Colour.WHITE.ordinal() );
|
if( terminal.isColour() ) terminal.setTextColour( 15 - Colour.WHITE.ordinal() );
|
||||||
terminal.write( "ComputerCraft may be installed incorrectly" );
|
terminal.write( "ComputerCraft may be installed incorrectly" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,8 +18,6 @@ public interface IComputerEnvironment
|
|||||||
|
|
||||||
double getTimeOfDay();
|
double getTimeOfDay();
|
||||||
|
|
||||||
boolean isColour();
|
|
||||||
|
|
||||||
long getComputerSpaceLimit();
|
long getComputerSpaceLimit();
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
@ -11,11 +11,16 @@ import net.minecraft.nbt.CompoundNBT;
|
|||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
public class Terminal
|
public class Terminal
|
||||||
{
|
{
|
||||||
private static final String base16 = "0123456789abcdef";
|
private static final String BASE_16 = "0123456789abcdef";
|
||||||
|
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
private final boolean colour;
|
||||||
|
|
||||||
private int cursorX = 0;
|
private int cursorX = 0;
|
||||||
private int cursorY = 0;
|
private int cursorY = 0;
|
||||||
@ -23,26 +28,25 @@ public class Terminal
|
|||||||
private int cursorColour = 0;
|
private int cursorColour = 0;
|
||||||
private int cursorBackgroundColour = 15;
|
private int cursorBackgroundColour = 15;
|
||||||
|
|
||||||
private int width;
|
|
||||||
private int height;
|
|
||||||
|
|
||||||
private TextBuffer[] text;
|
private TextBuffer[] text;
|
||||||
private TextBuffer[] textColour;
|
private TextBuffer[] textColour;
|
||||||
private TextBuffer[] backgroundColour;
|
private TextBuffer[] backgroundColour;
|
||||||
|
|
||||||
private final Palette palette = new Palette();
|
private final Palette palette;
|
||||||
|
|
||||||
private final Runnable onChanged;
|
private final @Nullable Runnable onChanged;
|
||||||
|
|
||||||
public Terminal( int width, int height )
|
public Terminal( int width, int height, boolean colour )
|
||||||
{
|
{
|
||||||
this( width, height, null );
|
this( width, height, colour, null );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Terminal( int width, int height, Runnable changedCallback )
|
public Terminal( int width, int height, boolean colour, Runnable changedCallback )
|
||||||
{
|
{
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
this.colour = colour;
|
||||||
|
palette = new Palette( colour );
|
||||||
onChanged = changedCallback;
|
onChanged = changedCallback;
|
||||||
|
|
||||||
text = new TextBuffer[height];
|
text = new TextBuffer[height];
|
||||||
@ -51,8 +55,8 @@ public class Terminal
|
|||||||
for( int i = 0; i < this.height; i++ )
|
for( int i = 0; i < this.height; i++ )
|
||||||
{
|
{
|
||||||
text[i] = new TextBuffer( ' ', this.width );
|
text[i] = new TextBuffer( ' ', this.width );
|
||||||
textColour[i] = new TextBuffer( base16.charAt( cursorColour ), this.width );
|
textColour[i] = new TextBuffer( BASE_16.charAt( cursorColour ), this.width );
|
||||||
backgroundColour[i] = new TextBuffer( base16.charAt( cursorBackgroundColour ), this.width );
|
backgroundColour[i] = new TextBuffer( BASE_16.charAt( cursorBackgroundColour ), this.width );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,6 +82,11 @@ public class Terminal
|
|||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isColour()
|
||||||
|
{
|
||||||
|
return colour;
|
||||||
|
}
|
||||||
|
|
||||||
public synchronized void resize( int width, int height )
|
public synchronized void resize( int width, int height )
|
||||||
{
|
{
|
||||||
if( width == this.width && height == this.height )
|
if( width == this.width && height == this.height )
|
||||||
@ -102,8 +111,8 @@ public class Terminal
|
|||||||
if( i >= oldHeight )
|
if( i >= oldHeight )
|
||||||
{
|
{
|
||||||
text[i] = new TextBuffer( ' ', this.width );
|
text[i] = new TextBuffer( ' ', this.width );
|
||||||
textColour[i] = new TextBuffer( base16.charAt( cursorColour ), this.width );
|
textColour[i] = new TextBuffer( BASE_16.charAt( cursorColour ), this.width );
|
||||||
backgroundColour[i] = new TextBuffer( base16.charAt( cursorBackgroundColour ), this.width );
|
backgroundColour[i] = new TextBuffer( BASE_16.charAt( cursorBackgroundColour ), this.width );
|
||||||
}
|
}
|
||||||
else if( this.width == oldWidth )
|
else if( this.width == oldWidth )
|
||||||
{
|
{
|
||||||
@ -114,8 +123,8 @@ public class Terminal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
text[i] = new TextBuffer( ' ', this.width );
|
text[i] = new TextBuffer( ' ', this.width );
|
||||||
textColour[i] = new TextBuffer( base16.charAt( cursorColour ), this.width );
|
textColour[i] = new TextBuffer( BASE_16.charAt( cursorColour ), this.width );
|
||||||
backgroundColour[i] = new TextBuffer( base16.charAt( cursorBackgroundColour ), this.width );
|
backgroundColour[i] = new TextBuffer( BASE_16.charAt( cursorBackgroundColour ), this.width );
|
||||||
text[i].write( oldText[i] );
|
text[i].write( oldText[i] );
|
||||||
textColour[i].write( oldTextColour[i] );
|
textColour[i].write( oldTextColour[i] );
|
||||||
backgroundColour[i].write( oldBackgroundColour[i] );
|
backgroundColour[i].write( oldBackgroundColour[i] );
|
||||||
@ -212,8 +221,8 @@ public class Terminal
|
|||||||
if( y >= 0 && y < height )
|
if( y >= 0 && y < height )
|
||||||
{
|
{
|
||||||
this.text[y].write( text, x );
|
this.text[y].write( text, x );
|
||||||
textColour[y].fill( base16.charAt( cursorColour ), x, x + text.length() );
|
textColour[y].fill( BASE_16.charAt( cursorColour ), x, x + text.length() );
|
||||||
backgroundColour[y].fill( base16.charAt( cursorBackgroundColour ), x, x + text.length() );
|
backgroundColour[y].fill( BASE_16.charAt( cursorBackgroundColour ), x, x + text.length() );
|
||||||
setChanged();
|
setChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,8 +246,8 @@ public class Terminal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
newText[y] = new TextBuffer( ' ', width );
|
newText[y] = new TextBuffer( ' ', width );
|
||||||
newTextColour[y] = new TextBuffer( base16.charAt( cursorColour ), width );
|
newTextColour[y] = new TextBuffer( BASE_16.charAt( cursorColour ), width );
|
||||||
newBackgroundColour[y] = new TextBuffer( base16.charAt( cursorBackgroundColour ), width );
|
newBackgroundColour[y] = new TextBuffer( BASE_16.charAt( cursorBackgroundColour ), width );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
text = newText;
|
text = newText;
|
||||||
@ -253,8 +262,8 @@ public class Terminal
|
|||||||
for( int y = 0; y < height; y++ )
|
for( int y = 0; y < height; y++ )
|
||||||
{
|
{
|
||||||
text[y].fill( ' ' );
|
text[y].fill( ' ' );
|
||||||
textColour[y].fill( base16.charAt( cursorColour ) );
|
textColour[y].fill( BASE_16.charAt( cursorColour ) );
|
||||||
backgroundColour[y].fill( base16.charAt( cursorBackgroundColour ) );
|
backgroundColour[y].fill( BASE_16.charAt( cursorBackgroundColour ) );
|
||||||
}
|
}
|
||||||
setChanged();
|
setChanged();
|
||||||
}
|
}
|
||||||
@ -265,8 +274,8 @@ public class Terminal
|
|||||||
if( y >= 0 && y < height )
|
if( y >= 0 && y < height )
|
||||||
{
|
{
|
||||||
text[y].fill( ' ' );
|
text[y].fill( ' ' );
|
||||||
textColour[y].fill( base16.charAt( cursorColour ) );
|
textColour[y].fill( BASE_16.charAt( cursorColour ) );
|
||||||
backgroundColour[y].fill( base16.charAt( cursorBackgroundColour ) );
|
backgroundColour[y].fill( BASE_16.charAt( cursorBackgroundColour ) );
|
||||||
setChanged();
|
setChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -357,8 +366,8 @@ public class Terminal
|
|||||||
for( int x = 0; x < width; x++ )
|
for( int x = 0; x < width; x++ )
|
||||||
{
|
{
|
||||||
byte colour = buffer.readByte();
|
byte colour = buffer.readByte();
|
||||||
backColour.setChar( x, base16.charAt( (colour >> 4) & 0xF ) );
|
backColour.setChar( x, BASE_16.charAt( (colour >> 4) & 0xF ) );
|
||||||
textColour.setChar( x, base16.charAt( colour & 0xF ) );
|
textColour.setChar( x, BASE_16.charAt( colour & 0xF ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,12 +408,12 @@ public class Terminal
|
|||||||
{
|
{
|
||||||
text[n].write( nbt.getString( "term_text_" + n ) );
|
text[n].write( nbt.getString( "term_text_" + n ) );
|
||||||
}
|
}
|
||||||
textColour[n].fill( base16.charAt( cursorColour ) );
|
textColour[n].fill( BASE_16.charAt( cursorColour ) );
|
||||||
if( nbt.contains( "term_textColour_" + n ) )
|
if( nbt.contains( "term_textColour_" + n ) )
|
||||||
{
|
{
|
||||||
textColour[n].write( nbt.getString( "term_textColour_" + n ) );
|
textColour[n].write( nbt.getString( "term_textColour_" + n ) );
|
||||||
}
|
}
|
||||||
backgroundColour[n].fill( base16.charAt( cursorBackgroundColour ) );
|
backgroundColour[n].fill( BASE_16.charAt( cursorBackgroundColour ) );
|
||||||
if( nbt.contains( "term_textBgColour_" + n ) )
|
if( nbt.contains( "term_textBgColour_" + n ) )
|
||||||
{
|
{
|
||||||
backgroundColour[n].write( nbt.getString( "term_textBgColour_" + n ) );
|
backgroundColour[n].write( nbt.getString( "term_textBgColour_" + n ) );
|
||||||
|
@ -8,7 +8,7 @@ package dan200.computercraft.shared.common;
|
|||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.network.client.TerminalState;
|
import dan200.computercraft.shared.network.client.TerminalState;
|
||||||
|
|
||||||
public class ClientTerminal implements ITerminal
|
public class ClientTerminal
|
||||||
{
|
{
|
||||||
private boolean colour;
|
private boolean colour;
|
||||||
private Terminal terminal;
|
private Terminal terminal;
|
||||||
@ -28,20 +28,11 @@ public class ClientTerminal implements ITerminal
|
|||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ITerminal implementation
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Terminal getTerminal()
|
public Terminal getTerminal()
|
||||||
{
|
{
|
||||||
return terminal;
|
return terminal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isColour()
|
|
||||||
{
|
|
||||||
return colour;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void read( TerminalState state )
|
public void read( TerminalState state )
|
||||||
{
|
{
|
||||||
colour = state.colour;
|
colour = state.colour;
|
||||||
@ -60,7 +51,7 @@ public class ClientTerminal implements ITerminal
|
|||||||
{
|
{
|
||||||
if( terminal == null )
|
if( terminal == null )
|
||||||
{
|
{
|
||||||
terminal = new Terminal( width, height, () -> terminalChanged = true );
|
terminal = new Terminal( width, height, colour, () -> terminalChanged = true );
|
||||||
terminalChanged = true;
|
terminalChanged = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of ComputerCraft - http://www.computercraft.info
|
|
||||||
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
|
||||||
* Send enquiries to dratcliffe@gmail.com
|
|
||||||
*/
|
|
||||||
package dan200.computercraft.shared.common;
|
|
||||||
|
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
|
||||||
|
|
||||||
public interface ITerminal
|
|
||||||
{
|
|
||||||
Terminal getTerminal();
|
|
||||||
|
|
||||||
boolean isColour();
|
|
||||||
}
|
|
@ -8,32 +8,26 @@ package dan200.computercraft.shared.common;
|
|||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.network.client.TerminalState;
|
import dan200.computercraft.shared.network.client.TerminalState;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class ServerTerminal implements ITerminal
|
public class ServerTerminal
|
||||||
{
|
{
|
||||||
private final boolean colour;
|
private final boolean colour;
|
||||||
private Terminal terminal;
|
private @Nullable Terminal terminal;
|
||||||
private final AtomicBoolean terminalChanged = new AtomicBoolean( false );
|
private final AtomicBoolean terminalChanged = new AtomicBoolean( false );
|
||||||
private boolean terminalChangedLastFrame = false;
|
private boolean terminalChangedLastFrame = false;
|
||||||
|
|
||||||
public ServerTerminal( boolean colour )
|
public ServerTerminal( boolean colour )
|
||||||
{
|
{
|
||||||
this.colour = colour;
|
this.colour = colour;
|
||||||
terminal = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServerTerminal( boolean colour, int terminalWidth, int terminalHeight )
|
|
||||||
{
|
|
||||||
this.colour = colour;
|
|
||||||
terminal = new Terminal( terminalWidth, terminalHeight, this::markTerminalChanged );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void resize( int width, int height )
|
protected void resize( int width, int height )
|
||||||
{
|
{
|
||||||
if( terminal == null )
|
if( terminal == null )
|
||||||
{
|
{
|
||||||
terminal = new Terminal( width, height, this::markTerminalChanged );
|
terminal = new Terminal( width, height, colour, this::markTerminalChanged );
|
||||||
markTerminalChanged();
|
markTerminalChanged();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -66,20 +60,13 @@ public class ServerTerminal implements ITerminal
|
|||||||
return terminalChangedLastFrame;
|
return terminalChangedLastFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Terminal getTerminal()
|
public Terminal getTerminal()
|
||||||
{
|
{
|
||||||
return terminal;
|
return terminal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isColour()
|
|
||||||
{
|
|
||||||
return colour;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TerminalState write()
|
public TerminalState write()
|
||||||
{
|
{
|
||||||
return new TerminalState( colour, terminal );
|
return new TerminalState( terminal );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,18 +56,12 @@ public class ServerComputer implements InputHandler, IComputerEnvironment
|
|||||||
this.family = family;
|
this.family = family;
|
||||||
|
|
||||||
instanceID = ServerComputerRegistry.INSTANCE.getUnusedInstanceID();
|
instanceID = ServerComputerRegistry.INSTANCE.getUnusedInstanceID();
|
||||||
terminal = new Terminal( terminalWidth, terminalHeight, this::markTerminalChanged );
|
terminal = new Terminal( terminalWidth, terminalHeight, family != ComputerFamily.NORMAL, this::markTerminalChanged );
|
||||||
|
|
||||||
computer = new Computer( this, terminal, computerID );
|
computer = new Computer( this, terminal, computerID );
|
||||||
computer.setLabel( label );
|
computer.setLabel( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isColour()
|
|
||||||
{
|
|
||||||
return family != ComputerFamily.NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ComputerFamily getFamily()
|
public ComputerFamily getFamily()
|
||||||
{
|
{
|
||||||
return family;
|
return family;
|
||||||
@ -126,7 +120,7 @@ public class ServerComputer implements InputHandler, IComputerEnvironment
|
|||||||
|
|
||||||
public TerminalState getTerminalState()
|
public TerminalState getTerminalState()
|
||||||
{
|
{
|
||||||
return new TerminalState( isColour(), terminal );
|
return new TerminalState( terminal );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void keepAlive()
|
public void keepAlive()
|
||||||
|
@ -7,6 +7,7 @@ package dan200.computercraft.shared.network.client;
|
|||||||
|
|
||||||
import dan200.computercraft.client.pocket.ClientPocketComputers;
|
import dan200.computercraft.client.pocket.ClientPocketComputers;
|
||||||
import dan200.computercraft.client.pocket.PocketComputerData;
|
import dan200.computercraft.client.pocket.PocketComputerData;
|
||||||
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerState;
|
import dan200.computercraft.shared.computer.core.ComputerState;
|
||||||
import dan200.computercraft.shared.network.NetworkMessage;
|
import dan200.computercraft.shared.network.NetworkMessage;
|
||||||
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
||||||
@ -28,7 +29,7 @@ public class PocketComputerDataMessage implements NetworkMessage
|
|||||||
instanceId = computer.getInstanceID();
|
instanceId = computer.getInstanceID();
|
||||||
state = computer.getState();
|
state = computer.getState();
|
||||||
lightState = computer.getLight();
|
lightState = computer.getLight();
|
||||||
terminal = sendTerminal ? computer.getTerminalState() : new TerminalState( false, null );
|
terminal = sendTerminal ? computer.getTerminalState() : new TerminalState( (Terminal) null );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PocketComputerDataMessage( PacketBuffer buf )
|
public PocketComputerDataMessage( PacketBuffer buf )
|
||||||
|
@ -42,23 +42,24 @@ public class TerminalState
|
|||||||
|
|
||||||
private ByteBuf compressed;
|
private ByteBuf compressed;
|
||||||
|
|
||||||
public TerminalState( boolean colour, @Nullable Terminal terminal )
|
public TerminalState( @Nullable Terminal terminal )
|
||||||
{
|
{
|
||||||
this( colour, terminal, true );
|
this( terminal, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
public TerminalState( boolean colour, @Nullable Terminal terminal, boolean compress )
|
public TerminalState( @Nullable Terminal terminal, boolean compress )
|
||||||
{
|
{
|
||||||
this.colour = colour;
|
|
||||||
this.compress = compress;
|
this.compress = compress;
|
||||||
|
|
||||||
if( terminal == null )
|
if( terminal == null )
|
||||||
{
|
{
|
||||||
|
colour = false;
|
||||||
width = height = 0;
|
width = height = 0;
|
||||||
buffer = null;
|
buffer = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
colour = terminal.isColour();
|
||||||
width = terminal.getWidth();
|
width = terminal.getWidth();
|
||||||
height = terminal.getHeight();
|
height = terminal.getHeight();
|
||||||
|
|
||||||
@ -123,7 +124,7 @@ public class TerminalState
|
|||||||
public Terminal create()
|
public Terminal create()
|
||||||
{
|
{
|
||||||
if( buffer == null ) throw new NullPointerException( "Terminal does not exist" );
|
if( buffer == null ) throw new NullPointerException( "Terminal does not exist" );
|
||||||
Terminal terminal = new Terminal( width, height );
|
Terminal terminal = new Terminal( width, height, colour );
|
||||||
terminal.read( new PacketBuffer( buffer ) );
|
terminal.read( new PacketBuffer( buffer ) );
|
||||||
return terminal;
|
return terminal;
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ public class KeyEventServerMessage extends ComputerServerMessage
|
|||||||
@Override
|
@Override
|
||||||
public void toBytes( @Nonnull PacketBuffer buf )
|
public void toBytes( @Nonnull PacketBuffer buf )
|
||||||
{
|
{
|
||||||
|
super.toBytes( buf );
|
||||||
buf.writeByte( type );
|
buf.writeByte( type );
|
||||||
buf.writeVarInt( key );
|
buf.writeVarInt( key );
|
||||||
}
|
}
|
||||||
|
@ -120,12 +120,6 @@ public class MonitorPeripheral extends TermMethods implements IPeripheral
|
|||||||
return terminal;
|
return terminal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isColour() throws LuaException
|
|
||||||
{
|
|
||||||
return getMonitor().isColour();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public Object getTarget()
|
public Object getTarget()
|
||||||
|
@ -577,6 +577,8 @@ public class TileMonitor extends TileGeneric
|
|||||||
|
|
||||||
private void monitorTouched( float xPos, float yPos, float zPos )
|
private void monitorTouched( float xPos, float yPos, float zPos )
|
||||||
{
|
{
|
||||||
|
if( !advanced ) return;
|
||||||
|
|
||||||
XYPair pair = XYPair
|
XYPair pair = XYPair
|
||||||
.of( xPos, yPos, zPos, getDirection(), getOrientation() )
|
.of( xPos, yPos, zPos, getDirection(), getOrientation() )
|
||||||
.add( xIndex, height - yIndex - 1 );
|
.add( xIndex, height - yIndex - 1 );
|
||||||
@ -587,7 +589,7 @@ public class TileMonitor extends TileGeneric
|
|||||||
}
|
}
|
||||||
|
|
||||||
ServerTerminal serverTerminal = getServerMonitor();
|
ServerTerminal serverTerminal = getServerMonitor();
|
||||||
if( serverTerminal == null || !serverTerminal.isColour() ) return;
|
if( serverTerminal == null ) return;
|
||||||
|
|
||||||
Terminal originTerminal = serverTerminal.getTerminal();
|
Terminal originTerminal = serverTerminal.getTerminal();
|
||||||
if( originTerminal == null ) return;
|
if( originTerminal == null ) return;
|
||||||
|
@ -63,7 +63,7 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInvent
|
|||||||
SidedCaps.ofNullable( facing -> facing == null ? new InvWrapper( this ) : new SidedInvWrapper( this, facing ) );
|
SidedCaps.ofNullable( facing -> facing == null ? new InvWrapper( this ) : new SidedInvWrapper( this, facing ) );
|
||||||
private LazyOptional<IPeripheral> peripheralCap;
|
private LazyOptional<IPeripheral> peripheralCap;
|
||||||
|
|
||||||
private final Terminal page = new Terminal( ItemPrintout.LINE_MAX_LENGTH, ItemPrintout.LINES_PER_PAGE );
|
private final Terminal page = new Terminal( ItemPrintout.LINE_MAX_LENGTH, ItemPrintout.LINES_PER_PAGE, true );
|
||||||
private String pageTitle = "";
|
private String pageTitle = "";
|
||||||
private boolean printing = false;
|
private boolean printing = false;
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.util;
|
package dan200.computercraft.shared.util;
|
||||||
|
|
||||||
import dan200.computercraft.client.render.text.FixedWidthFontRenderer;
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
|
||||||
@ -14,18 +13,19 @@ import javax.annotation.Nonnull;
|
|||||||
public class Palette
|
public class Palette
|
||||||
{
|
{
|
||||||
private static final int PALETTE_SIZE = 16;
|
private static final int PALETTE_SIZE = 16;
|
||||||
|
|
||||||
|
private final boolean colour;
|
||||||
private final double[][] colours = new double[PALETTE_SIZE][3];
|
private final double[][] colours = new double[PALETTE_SIZE][3];
|
||||||
private final byte[][] byteColours = new byte[PALETTE_SIZE][4];
|
private final byte[][] byteColours = new byte[PALETTE_SIZE][4];
|
||||||
private final byte[][] greyByteColours = new byte[PALETTE_SIZE][4];
|
|
||||||
|
|
||||||
public static final Palette DEFAULT = new Palette();
|
public static final Palette DEFAULT = new Palette( true );
|
||||||
|
|
||||||
public Palette()
|
public Palette( boolean colour )
|
||||||
{
|
{
|
||||||
// Get the default palette
|
this.colour = colour;
|
||||||
resetColours();
|
resetColours();
|
||||||
|
|
||||||
for( int i = 0; i < PALETTE_SIZE; i++ ) byteColours[i][3] = greyByteColours[i][3] = (byte) 255;
|
for( int i = 0; i < PALETTE_SIZE; i++ ) byteColours[i][3] = (byte) 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColour( int i, double r, double g, double b )
|
public void setColour( int i, double r, double g, double b )
|
||||||
@ -35,12 +35,17 @@ public class Palette
|
|||||||
colours[i][1] = g;
|
colours[i][1] = g;
|
||||||
colours[i][2] = b;
|
colours[i][2] = b;
|
||||||
|
|
||||||
byteColours[i][0] = (byte) (int) (r * 255);
|
if( colour )
|
||||||
byteColours[i][1] = (byte) (int) (g * 255);
|
{
|
||||||
byteColours[i][2] = (byte) (int) (b * 255);
|
byteColours[i][0] = (byte) (int) (r * 255);
|
||||||
|
byteColours[i][1] = (byte) (int) (g * 255);
|
||||||
byte grey = (byte) (int) ((r + g + b) / 3 * 255);
|
byteColours[i][2] = (byte) (int) (b * 255);
|
||||||
greyByteColours[i][0] = greyByteColours[i][1] = greyByteColours[i][2] = grey;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byte grey = (byte) (int) ((r + g + b) / 3 * 255);
|
||||||
|
byteColours[i][0] = byteColours[i][1] = byteColours[i][2] = grey;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColour( int i, Colour colour )
|
public void setColour( int i, Colour colour )
|
||||||
@ -54,20 +59,18 @@ public class Palette
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the colour as a set of bytes rather than floats. This is called frequently by {@link FixedWidthFontRenderer},
|
* Get the colour as a set of RGB values suitable for rendering. Colours are automatically converted to greyscale
|
||||||
* as our vertex format uses bytes.
|
* when using a black and white palette.
|
||||||
|
* <p>
|
||||||
|
* This returns a byte array, suitable for being used directly by our terminal vertex format.
|
||||||
*
|
*
|
||||||
* This allows us to do the conversion once (when setting the colour) rather than for every vertex, at the cost of
|
* @param i The colour index.
|
||||||
* some memory overhead.
|
|
||||||
*
|
|
||||||
* @param i The colour index.
|
|
||||||
* @param greyscale Whether this number should be converted to greyscale.
|
|
||||||
* @return The number as a tuple of bytes.
|
* @return The number as a tuple of bytes.
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public byte[] getByteColour( int i, boolean greyscale )
|
public byte[] getRenderColours( int i )
|
||||||
{
|
{
|
||||||
return greyscale ? greyByteColours[i] : byteColours[i];
|
return byteColours[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetColour( int i )
|
public void resetColour( int i )
|
||||||
|
@ -97,7 +97,7 @@ public class ComputerTestDelegate
|
|||||||
|
|
||||||
if( REPORT_PATH.delete() ) ComputerCraft.log.info( "Deleted previous coverage report." );
|
if( REPORT_PATH.delete() ) ComputerCraft.log.info( "Deleted previous coverage report." );
|
||||||
|
|
||||||
Terminal term = new Terminal( 80, 100 );
|
Terminal term = new Terminal( 80, 100, true );
|
||||||
IWritableMount mount = new FileMount( new File( "test-files/mount" ), 10_000_000 );
|
IWritableMount mount = new FileMount( new File( "test-files/mount" ), 10_000_000 );
|
||||||
|
|
||||||
// Remove any existing files
|
// Remove any existing files
|
||||||
|
@ -62,12 +62,6 @@ public class BasicEnvironment implements IComputerEnvironment
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isColour()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getComputerSpaceLimit()
|
public long getComputerSpaceLimit()
|
||||||
{
|
{
|
||||||
|
@ -37,7 +37,7 @@ public class ComputerBootstrap
|
|||||||
|
|
||||||
public static void run( String program, int maxTimes )
|
public static void run( String program, int maxTimes )
|
||||||
{
|
{
|
||||||
run( program, x -> { }, maxTimes );
|
run( program, x -> {}, maxTimes );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void run( IWritableMount mount, Consumer<Computer> setup, int maxTicks )
|
public static void run( IWritableMount mount, Consumer<Computer> setup, int maxTicks )
|
||||||
@ -45,7 +45,7 @@ public class ComputerBootstrap
|
|||||||
ComputerCraft.logComputerErrors = true;
|
ComputerCraft.logComputerErrors = true;
|
||||||
ComputerCraft.maxMainComputerTime = ComputerCraft.maxMainGlobalTime = Integer.MAX_VALUE;
|
ComputerCraft.maxMainComputerTime = ComputerCraft.maxMainGlobalTime = Integer.MAX_VALUE;
|
||||||
|
|
||||||
Terminal term = new Terminal( ComputerCraft.computerTermWidth, ComputerCraft.computerTermHeight );
|
Terminal term = new Terminal( ComputerCraft.computerTermWidth, ComputerCraft.computerTermHeight, true );
|
||||||
final Computer computer = new Computer( new BasicEnvironment( mount ), term, 0 );
|
final Computer computer = new Computer( new BasicEnvironment( mount ), term, 0 );
|
||||||
|
|
||||||
AssertApi api = new AssertApi();
|
AssertApi api = new AssertApi();
|
||||||
|
@ -55,7 +55,7 @@ public class FakeComputerManager
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
public static Computer create()
|
public static Computer create()
|
||||||
{
|
{
|
||||||
Computer computer = new Computer( new BasicEnvironment(), new Terminal( 51, 19 ), 0 );
|
Computer computer = new Computer( new BasicEnvironment(), new Terminal( 51, 19, true ), 0 );
|
||||||
machines.put( computer, new ConcurrentLinkedQueue<>() );
|
machines.put( computer, new ConcurrentLinkedQueue<>() );
|
||||||
return computer;
|
return computer;
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testCreation()
|
void testCreation()
|
||||||
{
|
{
|
||||||
Terminal terminal = new Terminal( 16, 9 );
|
Terminal terminal = new Terminal( 16, 9, true );
|
||||||
assertEquals( 16, terminal.getWidth() );
|
assertEquals( 16, terminal.getWidth() );
|
||||||
assertEquals( 9, terminal.getHeight() );
|
assertEquals( 9, terminal.getHeight() );
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testSetAndGetLine()
|
void testSetAndGetLine()
|
||||||
{
|
{
|
||||||
Terminal terminal = new Terminal( 16, 9 );
|
Terminal terminal = new Terminal( 16, 9, true );
|
||||||
terminal.setLine( 1, "ABCDEFGHIJKLMNOP", "0123456789abcdef", "fedcba9876543210" );
|
terminal.setLine( 1, "ABCDEFGHIJKLMNOP", "0123456789abcdef", "fedcba9876543210" );
|
||||||
assertEquals( "ABCDEFGHIJKLMNOP", terminal.getLine( 1 ).toString() );
|
assertEquals( "ABCDEFGHIJKLMNOP", terminal.getLine( 1 ).toString() );
|
||||||
assertEquals( "0123456789abcdef", terminal.getTextColourLine( 1 ).toString() );
|
assertEquals( "0123456789abcdef", terminal.getTextColourLine( 1 ).toString() );
|
||||||
@ -45,7 +45,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testGetLineOutOfBounds()
|
void testGetLineOutOfBounds()
|
||||||
{
|
{
|
||||||
Terminal terminal = new Terminal( 16, 9 );
|
Terminal terminal = new Terminal( 16, 9, true );
|
||||||
|
|
||||||
assertNull( terminal.getLine( -5 ) );
|
assertNull( terminal.getLine( -5 ) );
|
||||||
assertNull( terminal.getLine( 12 ) );
|
assertNull( terminal.getLine( 12 ) );
|
||||||
@ -60,7 +60,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testDefaults()
|
void testDefaults()
|
||||||
{
|
{
|
||||||
Terminal terminal = new Terminal( 16, 9 );
|
Terminal terminal = new Terminal( 16, 9, true );
|
||||||
assertEquals( 0, terminal.getCursorX() );
|
assertEquals( 0, terminal.getCursorX() );
|
||||||
assertEquals( 0, terminal.getCursorY() );
|
assertEquals( 0, terminal.getCursorY() );
|
||||||
assertFalse( terminal.getCursorBlink() );
|
assertFalse( terminal.getCursorBlink() );
|
||||||
@ -71,7 +71,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testDefaultTextBuffer()
|
void testDefaultTextBuffer()
|
||||||
{
|
{
|
||||||
assertThat( new Terminal( 4, 3 ), textMatches( new String[] {
|
assertThat( new Terminal( 4, 3, true ), textMatches( new String[] {
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
@ -81,7 +81,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testDefaultTextColourBuffer()
|
void testDefaultTextColourBuffer()
|
||||||
{
|
{
|
||||||
assertThat( new Terminal( 4, 3 ), textColourMatches( new String[] {
|
assertThat( new Terminal( 4, 3, true ), textColourMatches( new String[] {
|
||||||
"0000",
|
"0000",
|
||||||
"0000",
|
"0000",
|
||||||
"0000",
|
"0000",
|
||||||
@ -91,7 +91,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testDefaultBackgroundColourBuffer()
|
void testDefaultBackgroundColourBuffer()
|
||||||
{
|
{
|
||||||
assertThat( new Terminal( 4, 3 ), TerminalMatchers.backgroundColourMatches( new String[] {
|
assertThat( new Terminal( 4, 3, true ), TerminalMatchers.backgroundColourMatches( new String[] {
|
||||||
"ffff",
|
"ffff",
|
||||||
"ffff",
|
"ffff",
|
||||||
"ffff",
|
"ffff",
|
||||||
@ -102,7 +102,7 @@ class TerminalTest
|
|||||||
void testZeroSizeBuffers()
|
void testZeroSizeBuffers()
|
||||||
{
|
{
|
||||||
String[] x = new String[0];
|
String[] x = new String[0];
|
||||||
assertThat( new Terminal( 0, 0 ), allOf(
|
assertThat( new Terminal( 0, 0, true ), allOf(
|
||||||
textMatches( new String[0] ),
|
textMatches( new String[0] ),
|
||||||
textColourMatches( x ),
|
textColourMatches( x ),
|
||||||
TerminalMatchers.backgroundColourMatches( x )
|
TerminalMatchers.backgroundColourMatches( x )
|
||||||
@ -113,7 +113,7 @@ class TerminalTest
|
|||||||
void testResizeWidthAndHeight()
|
void testResizeWidthAndHeight()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
terminal.setLine( 0, "test", "aaaa", "eeee" );
|
terminal.setLine( 0, "test", "aaaa", "eeee" );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ class TerminalTest
|
|||||||
void testResizeSmaller()
|
void testResizeSmaller()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
terminal.setLine( 0, "test", "aaaa", "eeee" );
|
terminal.setLine( 0, "test", "aaaa", "eeee" );
|
||||||
terminal.setLine( 1, "smol", "aaaa", "eeee" );
|
terminal.setLine( 1, "smol", "aaaa", "eeee" );
|
||||||
terminal.setLine( 2, "term", "aaaa", "eeee" );
|
terminal.setLine( 2, "term", "aaaa", "eeee" );
|
||||||
@ -176,7 +176,7 @@ class TerminalTest
|
|||||||
void testResizeWithSameDimensions()
|
void testResizeWithSameDimensions()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
||||||
terminal.resize( 4, 3 );
|
terminal.resize( 4, 3 );
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ class TerminalTest
|
|||||||
void testSetAndGetCursorPos()
|
void testSetAndGetCursorPos()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setCursorPos( 2, 1 );
|
terminal.setCursorPos( 2, 1 );
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ class TerminalTest
|
|||||||
void testSetCursorPosUnchanged()
|
void testSetCursorPosUnchanged()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setCursorPos( 2, 1 );
|
terminal.setCursorPos( 2, 1 );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -217,7 +217,7 @@ class TerminalTest
|
|||||||
void testSetCursorBlink()
|
void testSetCursorBlink()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setCursorBlink( true );
|
terminal.setCursorBlink( true );
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ class TerminalTest
|
|||||||
void testSetCursorBlinkUnchanged()
|
void testSetCursorBlinkUnchanged()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setCursorBlink( true );
|
terminal.setCursorBlink( true );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -243,7 +243,7 @@ class TerminalTest
|
|||||||
void testSetTextColour()
|
void testSetTextColour()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setTextColour( 5 );
|
terminal.setTextColour( 5 );
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ class TerminalTest
|
|||||||
void testSetTextColourUnchanged()
|
void testSetTextColourUnchanged()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setTextColour( 5 );
|
terminal.setTextColour( 5 );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -269,7 +269,7 @@ class TerminalTest
|
|||||||
void testSetBackgroundColour()
|
void testSetBackgroundColour()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setBackgroundColour( 5 );
|
terminal.setBackgroundColour( 5 );
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ class TerminalTest
|
|||||||
void testSetBackgroundColourUnchanged()
|
void testSetBackgroundColourUnchanged()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setBackgroundColour( 5 );
|
terminal.setBackgroundColour( 5 );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -295,7 +295,7 @@ class TerminalTest
|
|||||||
void testBlitFromOrigin()
|
void testBlitFromOrigin()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
blit( terminal, "test", "1234", "abcd" );
|
blit( terminal, "test", "1234", "abcd" );
|
||||||
|
|
||||||
@ -322,7 +322,7 @@ class TerminalTest
|
|||||||
void testBlitWithOffset()
|
void testBlitWithOffset()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setCursorPos( 2, 1 );
|
terminal.setCursorPos( 2, 1 );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -353,7 +353,7 @@ class TerminalTest
|
|||||||
void testBlitOutOfBounds()
|
void testBlitOutOfBounds()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
||||||
|
|
||||||
terminal.setCursorPos( 2, -5 );
|
terminal.setCursorPos( 2, -5 );
|
||||||
@ -372,7 +372,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
public void testBlitPartialBuffer()
|
public void testBlitPartialBuffer()
|
||||||
{
|
{
|
||||||
Terminal terminal = new Terminal( 4, 3 );
|
Terminal terminal = new Terminal( 4, 3, true );
|
||||||
|
|
||||||
ByteBuffer text = LuaValues.encode( "123456" );
|
ByteBuffer text = LuaValues.encode( "123456" );
|
||||||
text.position( 1 );
|
text.position( 1 );
|
||||||
@ -386,7 +386,7 @@ class TerminalTest
|
|||||||
void testWriteFromOrigin()
|
void testWriteFromOrigin()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.write( "test" );
|
terminal.write( "test" );
|
||||||
|
|
||||||
@ -413,7 +413,7 @@ class TerminalTest
|
|||||||
void testWriteWithOffset()
|
void testWriteWithOffset()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setCursorPos( 2, 1 );
|
terminal.setCursorPos( 2, 1 );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -444,7 +444,7 @@ class TerminalTest
|
|||||||
void testWriteOutOfBounds()
|
void testWriteOutOfBounds()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
||||||
|
|
||||||
terminal.setCursorPos( 2, -5 );
|
terminal.setCursorPos( 2, -5 );
|
||||||
@ -465,7 +465,7 @@ class TerminalTest
|
|||||||
void testScrollUp()
|
void testScrollUp()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setLine( 1, "test", "1111", "eeee" );
|
terminal.setLine( 1, "test", "1111", "eeee" );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -496,7 +496,7 @@ class TerminalTest
|
|||||||
void testScrollDown()
|
void testScrollDown()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setLine( 1, "test", "1111", "eeee" );
|
terminal.setLine( 1, "test", "1111", "eeee" );
|
||||||
callCounter.reset();
|
callCounter.reset();
|
||||||
@ -527,7 +527,7 @@ class TerminalTest
|
|||||||
void testScrollZeroLinesUnchanged()
|
void testScrollZeroLinesUnchanged()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
|
|
||||||
terminal.setLine( 1, "test", "1111", "eeee" );
|
terminal.setLine( 1, "test", "1111", "eeee" );
|
||||||
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
||||||
@ -543,7 +543,7 @@ class TerminalTest
|
|||||||
void testClear()
|
void testClear()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
||||||
|
|
||||||
terminal.setLine( 1, "test", "1111", "eeee" );
|
terminal.setLine( 1, "test", "1111", "eeee" );
|
||||||
@ -559,7 +559,7 @@ class TerminalTest
|
|||||||
void testClearLine()
|
void testClearLine()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
TerminalBufferSnapshot old = new TerminalBufferSnapshot( terminal );
|
||||||
|
|
||||||
terminal.setLine( 1, "test", "1111", "eeee" );
|
terminal.setLine( 1, "test", "1111", "eeee" );
|
||||||
@ -576,7 +576,7 @@ class TerminalTest
|
|||||||
void testClearLineOutOfBounds()
|
void testClearLineOutOfBounds()
|
||||||
{
|
{
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal terminal = new Terminal( 4, 3, callCounter );
|
Terminal terminal = new Terminal( 4, 3, true, callCounter );
|
||||||
TerminalBufferSnapshot old;
|
TerminalBufferSnapshot old;
|
||||||
|
|
||||||
terminal.setLine( 1, "test", "1111", "eeee" );
|
terminal.setLine( 1, "test", "1111", "eeee" );
|
||||||
@ -599,7 +599,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testPacketBufferRoundtrip()
|
void testPacketBufferRoundtrip()
|
||||||
{
|
{
|
||||||
Terminal writeTerminal = new Terminal( 2, 1 );
|
Terminal writeTerminal = new Terminal( 2, 1, true );
|
||||||
|
|
||||||
blit( writeTerminal, "hi", "11", "ee" );
|
blit( writeTerminal, "hi", "11", "ee" );
|
||||||
writeTerminal.setCursorPos( 2, 5 );
|
writeTerminal.setCursorPos( 2, 5 );
|
||||||
@ -610,7 +610,7 @@ class TerminalTest
|
|||||||
writeTerminal.write( packetBuffer );
|
writeTerminal.write( packetBuffer );
|
||||||
|
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal readTerminal = new Terminal( 2, 1, callCounter );
|
Terminal readTerminal = new Terminal( 2, 1, true, callCounter );
|
||||||
packetBuffer.writeBytes( packetBuffer );
|
packetBuffer.writeBytes( packetBuffer );
|
||||||
readTerminal.read( packetBuffer );
|
readTerminal.read( packetBuffer );
|
||||||
|
|
||||||
@ -630,7 +630,7 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testNbtRoundtrip()
|
void testNbtRoundtrip()
|
||||||
{
|
{
|
||||||
Terminal writeTerminal = new Terminal( 10, 5 );
|
Terminal writeTerminal = new Terminal( 10, 5, true );
|
||||||
blit( writeTerminal, "hi", "11", "ee" );
|
blit( writeTerminal, "hi", "11", "ee" );
|
||||||
writeTerminal.setCursorPos( 2, 5 );
|
writeTerminal.setCursorPos( 2, 5 );
|
||||||
writeTerminal.setTextColour( 3 );
|
writeTerminal.setTextColour( 3 );
|
||||||
@ -640,7 +640,7 @@ class TerminalTest
|
|||||||
writeTerminal.writeToNBT( nbt );
|
writeTerminal.writeToNBT( nbt );
|
||||||
|
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
Terminal readTerminal = new Terminal( 2, 1, callCounter );
|
Terminal readTerminal = new Terminal( 2, 1, true, callCounter );
|
||||||
|
|
||||||
readTerminal.readFromNBT( nbt );
|
readTerminal.readFromNBT( nbt );
|
||||||
|
|
||||||
@ -660,13 +660,13 @@ class TerminalTest
|
|||||||
@Test
|
@Test
|
||||||
void testReadWriteNBTEmpty()
|
void testReadWriteNBTEmpty()
|
||||||
{
|
{
|
||||||
Terminal terminal = new Terminal( 0, 0 );
|
Terminal terminal = new Terminal( 0, 0, true );
|
||||||
|
|
||||||
CompoundNBT nbt = new CompoundNBT();
|
CompoundNBT nbt = new CompoundNBT();
|
||||||
terminal.writeToNBT( nbt );
|
terminal.writeToNBT( nbt );
|
||||||
|
|
||||||
CallCounter callCounter = new CallCounter();
|
CallCounter callCounter = new CallCounter();
|
||||||
terminal = new Terminal( 0, 1, callCounter );
|
terminal = new Terminal( 0, 1, true, callCounter );
|
||||||
terminal.readFromNBT( nbt );
|
terminal.readFromNBT( nbt );
|
||||||
|
|
||||||
assertThat( terminal, allOf(
|
assertThat( terminal, allOf(
|
||||||
|
@ -26,7 +26,7 @@ public class TerminalStateTest
|
|||||||
Terminal terminal = randomTerminal();
|
Terminal terminal = randomTerminal();
|
||||||
|
|
||||||
PacketBuffer buffer = new PacketBuffer( Unpooled.directBuffer() );
|
PacketBuffer buffer = new PacketBuffer( Unpooled.directBuffer() );
|
||||||
new TerminalState( true, terminal, true ).write( buffer );
|
new TerminalState( terminal, true ).write( buffer );
|
||||||
|
|
||||||
checkEqual( terminal, read( buffer ) );
|
checkEqual( terminal, read( buffer ) );
|
||||||
assertEquals( 0, buffer.readableBytes() );
|
assertEquals( 0, buffer.readableBytes() );
|
||||||
@ -38,7 +38,7 @@ public class TerminalStateTest
|
|||||||
Terminal terminal = randomTerminal();
|
Terminal terminal = randomTerminal();
|
||||||
|
|
||||||
PacketBuffer buffer = new PacketBuffer( Unpooled.directBuffer() );
|
PacketBuffer buffer = new PacketBuffer( Unpooled.directBuffer() );
|
||||||
new TerminalState( true, terminal, false ).write( buffer );
|
new TerminalState( terminal, false ).write( buffer );
|
||||||
|
|
||||||
checkEqual( terminal, read( buffer ) );
|
checkEqual( terminal, read( buffer ) );
|
||||||
assertEquals( 0, buffer.readableBytes() );
|
assertEquals( 0, buffer.readableBytes() );
|
||||||
@ -47,7 +47,7 @@ public class TerminalStateTest
|
|||||||
private static Terminal randomTerminal()
|
private static Terminal randomTerminal()
|
||||||
{
|
{
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
Terminal terminal = new Terminal( 10, 5 );
|
Terminal terminal = new Terminal( 10, 5, true );
|
||||||
for( int y = 0; y < terminal.getHeight(); y++ )
|
for( int y = 0; y < terminal.getHeight(); y++ )
|
||||||
{
|
{
|
||||||
TextBuffer buffer = terminal.getLine( y );
|
TextBuffer buffer = terminal.getLine( y );
|
||||||
@ -77,7 +77,7 @@ public class TerminalStateTest
|
|||||||
|
|
||||||
if( !state.hasTerminal() ) return null;
|
if( !state.hasTerminal() ) return null;
|
||||||
|
|
||||||
Terminal other = new Terminal( state.width, state.height );
|
Terminal other = new Terminal( state.width, state.height, true );
|
||||||
state.apply( other );
|
state.apply( other );
|
||||||
return other;
|
return other;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user