1
0

Fix console

This commit is contained in:
otya128
2016-12-16 22:47:36 +09:00
parent 0f44fc068f
commit 8322b9addb
2 changed files with 63 additions and 29 deletions

View File

@@ -33,10 +33,8 @@ enum ConsoleAttribute
class Console
{
int fontWidth;
int fontHeight;
int consoleWidth;
int consoleHeight;
int[2] fontWidths;
int[2] fontHeights;
int consoleWidthDisplay1;
int consoleHeightDisplay1;
int consoleWidth4;
@@ -67,6 +65,22 @@ class Console
int[2] CSRXs;
int[2] CSRYs;
int[2] CSRZs;
@property ref fontWidth()
{
return fontWidths[petitcom.displaynum];
}
@property int fontWidth(int value)
{
return fontWidths[petitcom.displaynum] = value;
}
@property ref fontHeight()
{
return fontHeights[petitcom.displaynum];
}
@property int fontHeight(int value)
{
return fontHeights[petitcom.displaynum] = value;
}
@property ref CSRX()
{
return CSRXs[petitcom.displaynum];
@@ -121,35 +135,51 @@ class Console
{
return fontWidth;
}
void resizeConsole()
{
console.length = petitcom.currentDisplay.rect.length;
for(int i = 0; i < petitcom.currentDisplay.rect.length; i++)
{
auto h = petitcom.currentDisplay.rect[i].h / fontHeights[i];
auto w = petitcom.currentDisplay.rect[i].w / fontWidths[i];
if (!console[i] || console[i].length != h || console[i][0].length != w)
{
console[i] = new ConsoleCharacter[][h];
for(int j = 0; j < console[i].length; j++)
{
console[i][j] = new ConsoleCharacter[w];
console[i][j][] = ConsoleCharacter(0, foreColor, backColor);
}
CSRXs[i] = 0;
CSRYs[i] = 0;
CSRZs[i] = 0;
}
}
}
void initConsole()
{
fontWidths = 8;
fontHeights = 8;
CSRXs = 0;
CSRYs = 0;
CSRZs = 0;
foreColors = 15;//#T_WHITE
backColors = 0;
resizeConsole();
}
void width(int w)
{
synchronized(this)
{
cls();
fontWidth = fontHeight = w;
consoleWidth = petitcom.screenWidth / fontWidth;
consoleHeight = petitcom.screenHeight / fontHeight;
console = new ConsoleCharacter[][][petitcom.currentDisplay.rect.length];
foreColor = 15;//#T_WHITE
backColor = 0;
for(int i = 0; i < console.length; i++)
{
console[i] = new ConsoleCharacter[][petitcom.currentDisplay.rect[i].h / fontHeight];
for(int j = 0; j < console[i].length; j++)
{
console[i][j] = new ConsoleCharacter[petitcom.currentDisplay.rect[i].w / fontWidth];
console[i][j][] = ConsoleCharacter(0, foreColor, backColor);
}
}
CSRXs[] = 0;
CSRYs[] = 0;
CSRZs[] = 0;
resizeConsole();
display(petitcom.displaynum);
}
}
//FIXME:画面サイズが変わらないと画面はクリアされないのにクリアされる
void changeDisplay(ref Display display)
{
width(fontWidth);
resizeConsole();
}
bool visible()
{
@@ -162,7 +192,7 @@ class Console
this(PetitComputer p)
{
petitcom = p;
width = 8;
initConsole();
for(int i = 0; i < consoleColor.length; i++)
consoleColorGL[i] = petitcom.toGLColor(consoleColor[i]);
@@ -299,15 +329,17 @@ class Console
glVertex3i(x2, y2, z);
}
}
void adjustScreen()
void adjustScreen(int disp)
{
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPushMatrix();
glScalef(fontWidth / 8f, fontHeight / 8f, 1);
glScalef(fontWidths[disp] / 8f, fontHeights[disp] / 8f, 1);
}
void render()
{
adjustScreen();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
scope (exit)
{
glMatrixMode(GL_MODELVIEW);
@@ -321,8 +353,9 @@ class Console
if (!visibles[i] && !showCursor)
continue;
petitcom.chRenderingDisplay(i);
int consoleWidth = petitcom.currentDisplay.rect[i].w / fontWidth;
int consoleHeight = petitcom.currentDisplay.rect[i].h / fontHeight;
adjustScreen(i);
int consoleWidth = petitcom.currentDisplay.rect[i].w / fontWidths[i];
int consoleHeight = petitcom.currentDisplay.rect[i].h / fontHeights[i];
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);

View File

@@ -870,6 +870,7 @@ class PetitComputer
catch(Throwable t)
{
writeln(t);
readln();
}
}
SDL_Window* window;