1
0

Implement SCROLL

This commit is contained in:
otya128
2016-12-30 20:27:11 +09:00
parent 6f4b4d0f65
commit a50e50c1e8
2 changed files with 67 additions and 0 deletions

View File

@@ -3366,6 +3366,10 @@ class BuiltinFunction
{ {
p.console.initGRPF(); p.console.initGRPF();
} }
static void SCROLL(PetitComputer p, int x, int y)
{
p.console.scroll(x, y);
}
//alias void function(PetitComputer, Value[], Value[]) BuiltinFunc; //alias void function(PetitComputer, Value[], Value[]) BuiltinFunc;
static BuiltinFunctions[wstring] builtinFunctions; static BuiltinFunctions[wstring] builtinFunctions;
static wstring getBasicName(BFD)(const wstring def) static wstring getBasicName(BFD)(const wstring def)

View File

@@ -497,6 +497,69 @@ class Console
consoleC[consoleHeightC - 1] = tmp; consoleC[consoleHeightC - 1] = tmp;
tmp[] = ConsoleCharacter(0, foreColor, backColor, attr, CSRZ); tmp[] = ConsoleCharacter(0, foreColor, backColor, attr, CSRZ);
} }
import std.range;
void tonikakusugokutesutekinasaikyounaFill(T, T2)(T input, T2 v)
{
foreach (ref e; input)
{
e[] = v;
}
}
void scroll(int x, int y)
{
import std.math;
if (abs(x) >= consoleWidthC)
{
auto oldCSRX = CSRX;
auto oldCSRY = CSRY;
auto oldCSRZ = CSRZ;
cls();
CSRX = oldCSRX;
CSRY = oldCSRY;
CSRZ = oldCSRZ;
return;
}
if (abs(y) >= consoleHeightC)
{
cls();
return;
}
for (int i = 0; i < consoleHeightC; i++)
{
if (x > 0)
{
for (int j = x; j < consoleWidthC; j++)
{
consoleC[i][j - x] = consoleC[i][j];
}
consoleC[i][$ - x..$] = ConsoleCharacter(0, foreColor, backColor);
}
else if (x < 0)
{
for (int j = consoleWidthC - 1; j >= -x; j--)
{
consoleC[i][j] = consoleC[i][j + x];
}
consoleC[i][0..-x] = ConsoleCharacter(0, foreColor, backColor);
}
}
if (y > 0)
{
for (int i = y; i < consoleHeightC; i++)
{
consoleC[i - y][] = consoleC[i][];
}
tonikakusugokutesutekinasaikyounaFill(consoleC[$ - y..$], ConsoleCharacter(0, foreColor, backColor));
}
else if (y < 0)
{
for (int i = consoleHeightC - 1; i >= -y; i--)
{
consoleC[i][] = consoleC[i + y][];
}
tonikakusugokutesutekinasaikyounaFill(consoleC[0..-y], ConsoleCharacter(0, foreColor, backColor));
}
}
bool canDefine(ushort a) bool canDefine(ushort a)
{ {
return fontTable[a].define; return fontTable[a].define;