added vt string drawing
This commit is contained in:
parent
1f4d3f4d83
commit
5a786a9f5d
|
@ -41,6 +41,7 @@ public class Test {
|
||||||
term.setChar(new Vec2i(0, 0), 0xC9, Color.GREEN);
|
term.setChar(new Vec2i(0, 0), 0xC9, Color.GREEN);
|
||||||
term.setChar(new Vec2i(9, 9), 0xC9, Color.GREEN);
|
term.setChar(new Vec2i(9, 9), 0xC9, Color.GREEN);
|
||||||
term.setChar(new Vec2i(10, 10), 0xC9, Color.GREEN);
|
term.setChar(new Vec2i(10, 10), 0xC9, Color.GREEN);
|
||||||
|
term.drawHalfString(new Vec2i(11, 11), "AHello world. This is a test.", Color.GREEN);
|
||||||
|
|
||||||
while(!window.shouldClose()) {
|
while(!window.shouldClose()) {
|
||||||
window.tick();
|
window.tick();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package com.danitheskunk.skunkworks.gfx;
|
package com.danitheskunk.skunkworks.gfx;
|
||||||
|
|
||||||
import com.danitheskunk.skunkworks.gfx.font.IFont;
|
|
||||||
import com.danitheskunk.skunkworks.Recti;
|
import com.danitheskunk.skunkworks.Recti;
|
||||||
import com.danitheskunk.skunkworks.Vec2i;
|
import com.danitheskunk.skunkworks.Vec2i;
|
||||||
|
import com.danitheskunk.skunkworks.gfx.font.IFont;
|
||||||
import com.danitheskunk.skunkworks.gfx.vt.Terminal;
|
import com.danitheskunk.skunkworks.gfx.vt.Terminal;
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
@ -60,8 +60,8 @@ abstract public class BaseRenderContext implements IRenderContext {
|
||||||
|
|
||||||
drawTexture(pixelPos, fullFont.getTexture(0xdb), bgColor);
|
drawTexture(pixelPos, fullFont.getTexture(0xdb), bgColor);
|
||||||
if(isHalfWidth) {
|
if(isHalfWidth) {
|
||||||
drawTexture(pixelPos, fullFont.getTexture(terminal.getLeftHalfChar(charPos)), fgColor);
|
drawTexture(pixelPos, halfFont.getTexture(terminal.getLeftHalfChar(charPos)), fgColor);
|
||||||
drawTexture(Vec2i.add(pixelPos, halfCharSize), fullFont.getTexture(terminal.getRightHalfChar(charPos)), fgColor);
|
drawTexture(new Vec2i(pixelPos.getX() + halfCharSize.getX(), pixelPos.getY()), halfFont.getTexture(terminal.getRightHalfChar(charPos)), fgColor);
|
||||||
} else {
|
} else {
|
||||||
drawTexture(pixelPos, fullFont.getTexture(terminal.getChar(charPos)), fgColor);
|
drawTexture(pixelPos, fullFont.getTexture(terminal.getChar(charPos)), fgColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,9 @@ import com.danitheskunk.skunkworks.Vec2i;
|
||||||
import com.danitheskunk.skunkworks.gfx.Color;
|
import com.danitheskunk.skunkworks.gfx.Color;
|
||||||
import com.danitheskunk.skunkworks.gfx.font.IFont;
|
import com.danitheskunk.skunkworks.gfx.font.IFont;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -150,6 +153,74 @@ public class Terminal {
|
||||||
return Vec2i.mul(size, fullCharSize);
|
return Vec2i.mul(size, fullCharSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void drawString(Vec2i pos, String str) {
|
||||||
|
drawString(pos, str, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawString(Vec2i pos, String str, Color foregroundColor) {
|
||||||
|
drawString(pos, str, foregroundColor, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawString(Vec2i pos, String str, Color foregroundColor, Color backgroundColor) {
|
||||||
|
IntBuffer buf;
|
||||||
|
|
||||||
|
try {
|
||||||
|
buf = ByteBuffer.wrap(str.getBytes("UTF-32")).asIntBuffer();
|
||||||
|
} catch(UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < str.length(); ++i) {
|
||||||
|
var ch = buf.get(i);
|
||||||
|
var cpos = new Vec2i(pos.getX() + i, pos.getY());
|
||||||
|
if(ch > 0 && ch < 256) {
|
||||||
|
setChar(cpos, ch);
|
||||||
|
}
|
||||||
|
if(foregroundColor != null) {
|
||||||
|
setForegroundColor(cpos, foregroundColor);
|
||||||
|
}
|
||||||
|
if(backgroundColor != null) {
|
||||||
|
setBackgroundColor(cpos, backgroundColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawHalfString(Vec2i pos, String str) {
|
||||||
|
drawHalfString(pos, str, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawHalfString(Vec2i pos, String str, Color foregroundColor) {
|
||||||
|
drawHalfString(pos, str, foregroundColor, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawHalfString(Vec2i pos, String str, Color foregroundColor, Color backgroundColor) {
|
||||||
|
IntBuffer buf;
|
||||||
|
|
||||||
|
try {
|
||||||
|
buf = ByteBuffer.wrap(str.getBytes("UTF-32")).asIntBuffer();
|
||||||
|
} catch(UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < str.length(); i += 2) {
|
||||||
|
var ch1 = buf.get(i);
|
||||||
|
var ch2 = i + 1 == str.length() ? 0 : buf.get(i + 1);
|
||||||
|
var cpos = new Vec2i(pos.getX() + i / 2, pos.getY());
|
||||||
|
|
||||||
|
if(ch1 < 0 || ch1 >= 256) ch1 = 0;
|
||||||
|
if(ch2 < 0 || ch2 >= 256) ch2 = 0;
|
||||||
|
|
||||||
|
setHalfChars(cpos, ch1, ch2);
|
||||||
|
|
||||||
|
if(foregroundColor != null) {
|
||||||
|
setForegroundColor(cpos, foregroundColor);
|
||||||
|
}
|
||||||
|
if(backgroundColor != null) {
|
||||||
|
setBackgroundColor(cpos, backgroundColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class Cell {
|
private class Cell {
|
||||||
int fullChar;
|
int fullChar;
|
||||||
int secondChar;
|
int secondChar;
|
||||||
|
|
Loading…
Reference in New Issue