NAMIが正常に表示されるようにした/RUN,CONT,スロットを実装
This commit is contained in:
@@ -72,7 +72,7 @@
|
|||||||
<debuglevel>0</debuglevel>
|
<debuglevel>0</debuglevel>
|
||||||
<debugids />
|
<debugids />
|
||||||
<versionlevel>0</versionlevel>
|
<versionlevel>0</versionlevel>
|
||||||
<versionids />
|
<versionids>NDirectMode</versionids>
|
||||||
<dump_source>0</dump_source>
|
<dump_source>0</dump_source>
|
||||||
<mapverbosity>0</mapverbosity>
|
<mapverbosity>0</mapverbosity>
|
||||||
<createImplib>0</createImplib>
|
<createImplib>0</createImplib>
|
||||||
|
|||||||
@@ -6,16 +6,16 @@ import otya.smilebasic.compiler;
|
|||||||
import std.ascii;
|
import std.ascii;
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
import std.conv;
|
import std.conv;
|
||||||
|
import std.range;
|
||||||
class Lexical
|
class Lexical
|
||||||
{
|
{
|
||||||
TokenType[] table;
|
static TokenType[] table;
|
||||||
TokenType[wstring] reserved;
|
static TokenType[wstring] reserved;
|
||||||
wstring code;
|
wstring code;
|
||||||
int index;
|
int index;
|
||||||
int line;
|
int line;
|
||||||
this(wstring input)
|
static this()
|
||||||
{
|
{
|
||||||
this.code = input;
|
|
||||||
table = new TokenType[256];
|
table = new TokenType[256];
|
||||||
for(int i = 0;i<256;i++)
|
for(int i = 0;i<256;i++)
|
||||||
{
|
{
|
||||||
@@ -75,6 +75,10 @@ class Lexical
|
|||||||
reserved["TRUE"] = TokenType.True;
|
reserved["TRUE"] = TokenType.True;
|
||||||
reserved["FALSE"] = TokenType.False;
|
reserved["FALSE"] = TokenType.False;
|
||||||
reserved.rehash();
|
reserved.rehash();
|
||||||
|
}
|
||||||
|
this(wstring input)
|
||||||
|
{
|
||||||
|
this.code = input;
|
||||||
line = 1;
|
line = 1;
|
||||||
}
|
}
|
||||||
bool empty()
|
bool empty()
|
||||||
@@ -88,10 +92,17 @@ class Lexical
|
|||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
Token token;
|
Token token;
|
||||||
private int pos;
|
private int pos;
|
||||||
|
bool isEmpty;
|
||||||
void popFront()
|
void popFront()
|
||||||
{
|
{
|
||||||
if(empty())
|
if(index >= code.length)
|
||||||
|
{/*
|
||||||
|
if(!isEmpty)
|
||||||
{
|
{
|
||||||
|
//token = Token(TokenType.NewLine);
|
||||||
|
isEmpty = true;
|
||||||
|
//return;
|
||||||
|
}*/
|
||||||
token = Token(TokenType.Unknown);
|
token = Token(TokenType.Unknown);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -509,7 +520,7 @@ class Parser
|
|||||||
{
|
{
|
||||||
lex.popFront();
|
lex.popFront();
|
||||||
auto statements = new Statements(lex.location);
|
auto statements = new Statements(lex.location);
|
||||||
while(!lex.empty())
|
do
|
||||||
{
|
{
|
||||||
auto token = lex.front();
|
auto token = lex.front();
|
||||||
Statement statement;
|
Statement statement;
|
||||||
@@ -525,7 +536,7 @@ class Parser
|
|||||||
{
|
{
|
||||||
statements.addStatement(statement);
|
statements.addStatement(statement);
|
||||||
}
|
}
|
||||||
}
|
} while(!lex.empty());
|
||||||
return statements;
|
return statements;
|
||||||
}
|
}
|
||||||
bool isFuncReturnExpr = false;
|
bool isFuncReturnExpr = false;
|
||||||
|
|||||||
@@ -134,6 +134,19 @@ version(Windows)
|
|||||||
alias extern (Windows) void* function(void*, void*) ImmAssociateContext;
|
alias extern (Windows) void* function(void*, void*) ImmAssociateContext;
|
||||||
alias extern (Windows) int function(int) ImmDisableIME;
|
alias extern (Windows) int function(int) ImmDisableIME;
|
||||||
}
|
}
|
||||||
|
import std.container;
|
||||||
|
struct Slot
|
||||||
|
{
|
||||||
|
DList!wstring program;
|
||||||
|
void load(wstring data)
|
||||||
|
{
|
||||||
|
import std.algorithm;
|
||||||
|
foreach(l; splitter(data, "\n"))
|
||||||
|
{
|
||||||
|
program.insertBack(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
class PetitComputer
|
class PetitComputer
|
||||||
{
|
{
|
||||||
this()
|
this()
|
||||||
@@ -458,11 +471,37 @@ class PetitComputer
|
|||||||
Mutex keybuffermutex;
|
Mutex keybuffermutex;
|
||||||
int keybufferpos;
|
int keybufferpos;
|
||||||
int keybufferlen;
|
int keybufferlen;
|
||||||
|
enum KeyOp
|
||||||
|
{
|
||||||
|
KEY,
|
||||||
|
COPY,
|
||||||
|
PASTE,
|
||||||
|
UNDO,
|
||||||
|
REDO,
|
||||||
|
}
|
||||||
|
struct Key
|
||||||
|
{
|
||||||
|
wchar key;
|
||||||
|
KeyOp op;
|
||||||
|
this(wchar k)
|
||||||
|
{
|
||||||
|
key = k;
|
||||||
|
op = KeyOp.KEY;
|
||||||
|
}
|
||||||
|
this(KeyOp o)
|
||||||
|
{
|
||||||
|
op = o;
|
||||||
|
}
|
||||||
|
}
|
||||||
//解析した結果キー入力のバッファは127くらい
|
//解析した結果キー入力のバッファは127くらい
|
||||||
wchar[] keybuffer;// = new wchar[128];//Linuxだとこうやって確保した場合書き込むとSEGV
|
Key[] keybuffer;// = new wchar[128];//Linuxだとこうやって確保した場合書き込むとSEGV
|
||||||
void sendKey(wchar key)
|
void sendKey(wchar key)
|
||||||
{
|
{
|
||||||
keybuffer[keybufferpos] = cast(wchar)key;
|
sendKey(Key(key));
|
||||||
|
}
|
||||||
|
void sendKey(Key key)
|
||||||
|
{
|
||||||
|
keybuffer[keybufferpos] = key;
|
||||||
keybufferlen++;
|
keybufferlen++;
|
||||||
if(keybufferlen > keybuffer.length)
|
if(keybufferlen > keybuffer.length)
|
||||||
keybufferlen = cast(int)keybuffer.length;
|
keybufferlen = cast(int)keybuffer.length;
|
||||||
@@ -908,16 +947,12 @@ class PetitComputer
|
|||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
version(test) glLoadIdentity();
|
version(test) glLoadIdentity();
|
||||||
version(test) glRotatef(rot_test_deg, rot_test_x, rot_test_y, rot_test_z);
|
version(test) glRotatef(rot_test_deg, rot_test_x, rot_test_y, rot_test_z);
|
||||||
|
renderConsoleGL();
|
||||||
|
|
||||||
if(xscreenmode == 1)
|
if(xscreenmode == 1)
|
||||||
{
|
{
|
||||||
chScreen(0, 240, 400, 240);
|
chScreen(0, 240, 400, 240);
|
||||||
}
|
}
|
||||||
if(xscreenmode == 1)
|
|
||||||
{
|
|
||||||
chScreen(0, 240, 400, 240);
|
|
||||||
}
|
|
||||||
version(test) glLoadIdentity();
|
|
||||||
version(test) glRotatef(rot_test_deg, rot_test_x, rot_test_y, rot_test_z);
|
|
||||||
if(xscreenmode == 2)
|
if(xscreenmode == 2)
|
||||||
{
|
{
|
||||||
renderGraphicPage(0, 320, 480);
|
renderGraphicPage(0, 320, 480);
|
||||||
@@ -936,7 +971,6 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
chScreen(0, 0, 320, 480);
|
chScreen(0, 0, 320, 480);
|
||||||
}
|
}
|
||||||
renderConsoleGL();
|
|
||||||
if(xscreenmode == 1)
|
if(xscreenmode == 1)
|
||||||
{
|
{
|
||||||
chScreen(0, 240, 400, 240);
|
chScreen(0, 240, 400, 240);
|
||||||
@@ -1001,6 +1035,14 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
auto key = event.key.keysym.sym;
|
auto key = event.key.keysym.sym;
|
||||||
button |= buttonTable[event.key.keysym.scancode];
|
button |= buttonTable[event.key.keysym.scancode];
|
||||||
|
if(key == SDLK_v)
|
||||||
|
{
|
||||||
|
auto mod = event.key.keysym.mod;
|
||||||
|
if((mod & 0xC0))
|
||||||
|
{
|
||||||
|
sendKey(Key(KeyOp.PASTE));
|
||||||
|
}
|
||||||
|
}
|
||||||
if(Button.START & buttonTable[event.key.keysym.scancode])
|
if(Button.START & buttonTable[event.key.keysym.scancode])
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
@@ -1053,9 +1095,24 @@ class PetitComputer
|
|||||||
running = false;
|
running = false;
|
||||||
stopflg = true;
|
stopflg = true;
|
||||||
}
|
}
|
||||||
|
void printInformation()
|
||||||
|
{
|
||||||
|
printConsole("otyaSMILEBASIC ver ", otya.smilebasic.systemvariable.Version.VERSIONSTRING, "\n");
|
||||||
|
printConsole("(C)2015-2016 otya\n");
|
||||||
|
printConsole("8327164 bytes free\n");
|
||||||
|
printConsole("\n");
|
||||||
|
printPrompt();
|
||||||
|
}
|
||||||
|
void printPrompt()
|
||||||
|
{
|
||||||
|
//printConsole("[","]");
|
||||||
|
printConsole("OK\n");
|
||||||
|
}
|
||||||
|
Slot[] slot;
|
||||||
void run()
|
void run()
|
||||||
{
|
{
|
||||||
keybuffer = new wchar[128];
|
slot = new Slot[5];
|
||||||
|
keybuffer = new Key[128];
|
||||||
init();
|
init();
|
||||||
consolem = new Mutex();
|
consolem = new Mutex();
|
||||||
keybuffermutex = new Mutex();
|
keybuffermutex = new Mutex();
|
||||||
@@ -1070,9 +1127,34 @@ class PetitComputer
|
|||||||
Parser parser;
|
Parser parser;
|
||||||
otya.smilebasic.vm.VM vm;
|
otya.smilebasic.vm.VM vm;
|
||||||
bool directMode = false;
|
bool directMode = false;
|
||||||
|
bool isRunningDirectMode = false;
|
||||||
|
int oldpc;
|
||||||
|
void runSlot(int lot)
|
||||||
|
{
|
||||||
|
parser = new Parser(std.algorithm.reduce!("a ~ b")(slot[lot].program.opSlice));
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vm = parser.compile();
|
||||||
|
vm.init(this);
|
||||||
|
running = true;
|
||||||
|
}
|
||||||
|
catch(SmileBasicError sbe)
|
||||||
|
{
|
||||||
|
printConsole(sbe.getErrorMessage, "\n");
|
||||||
|
if(sbe.getErrorMessage2.length) printConsole(sbe.getErrorMessage2, "\n");
|
||||||
|
writeln(sbe.to!string);
|
||||||
|
writeln(sbe.getErrorMessage2);
|
||||||
|
}
|
||||||
|
catch(Throwable t)
|
||||||
|
{
|
||||||
|
writeln(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
//デバッグ用
|
//デバッグ用
|
||||||
version(NDirectMode)
|
version(NDirectMode)
|
||||||
{
|
{
|
||||||
|
slot[0].load(readText("./SYS/EX8TECDEMO.TXT").to!wstring);
|
||||||
|
version(none)
|
||||||
parser = new Parser(
|
parser = new Parser(
|
||||||
//readText("./SYS/GAME6TALK.TXT").to!wstring
|
//readText("./SYS/GAME6TALK.TXT").to!wstring
|
||||||
//readText("./SYS/GAME7EXPAD.TXT").to!wstring
|
//readText("./SYS/GAME7EXPAD.TXT").to!wstring
|
||||||
@@ -1080,7 +1162,7 @@ class PetitComputer
|
|||||||
//readText("./SYS/GAME2RPG.TXT").to!wstring
|
//readText("./SYS/GAME2RPG.TXT").to!wstring
|
||||||
//readText("./SYS/GAME1DOTRC.TXT").to!wstring
|
//readText("./SYS/GAME1DOTRC.TXT").to!wstring
|
||||||
//readText(input("LOAD PROGRAM:", true).to!string).to!wstring
|
//readText(input("LOAD PROGRAM:", true).to!string).to!wstring
|
||||||
readText("./SYS/EX8TECDEMO.TXT").to!wstring
|
//readText("./SYS/EX8TECDEMO.TXT").to!wstring
|
||||||
//readText("./SYS/EX1TEXT.TXT").to!wstring
|
//readText("./SYS/EX1TEXT.TXT").to!wstring
|
||||||
//readText("FIZZBUZZ.TXT").to!wstring
|
//readText("FIZZBUZZ.TXT").to!wstring
|
||||||
//readText("TEST.TXT").to!wstring
|
//readText("TEST.TXT").to!wstring
|
||||||
@@ -1123,27 +1205,11 @@ class PetitComputer
|
|||||||
CL=(CL+1) MOD 16 : VSYNC 1
|
CL=(CL+1) MOD 16 : VSYNC 1
|
||||||
GOTO @LOOP`*/
|
GOTO @LOOP`*/
|
||||||
);
|
);
|
||||||
try
|
runSlot(0);
|
||||||
{
|
|
||||||
vm = parser.compile();
|
|
||||||
vm.init(this);
|
|
||||||
running = true;
|
|
||||||
}
|
|
||||||
catch(SmileBasicError sbe)
|
|
||||||
{
|
|
||||||
printConsole(sbe.getErrorMessage, "\n");
|
|
||||||
printConsole(sbe.getErrorMessage2, "\n");
|
|
||||||
//printConsole(sbe.to!string);
|
|
||||||
writeln(sbe.to!string);
|
|
||||||
writeln(sbe.getErrorMessage2);
|
|
||||||
}
|
|
||||||
catch(Throwable t)
|
|
||||||
{
|
|
||||||
writeln(t);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
printInformation();
|
||||||
directMode = true;
|
directMode = true;
|
||||||
/*vm.code.append(parser.compiler.compileProgram());*/
|
/*vm.code.append(parser.compiler.compileProgram());*/
|
||||||
version(none)
|
version(none)
|
||||||
@@ -1194,7 +1260,44 @@ class PetitComputer
|
|||||||
vm = (new Parser("")).compile;
|
vm = (new Parser("")).compile;
|
||||||
vm.init(this);
|
vm.init(this);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printPrompt();
|
||||||
|
}
|
||||||
auto prg = input("", true);
|
auto prg = input("", true);
|
||||||
|
auto lex = new Lexical(prg);
|
||||||
|
lex.popFront();
|
||||||
|
auto token = lex.front();
|
||||||
|
if(token.type == otya.smilebasic.token.TokenType.Iden && token.value.stringValue == "RUN")
|
||||||
|
{
|
||||||
|
lex.popFront();
|
||||||
|
token = lex.front();
|
||||||
|
int slot;
|
||||||
|
bool empty = lex.empty();
|
||||||
|
if(!empty)
|
||||||
|
{
|
||||||
|
if(token.type != otya.smilebasic.token.TokenType.Integer)
|
||||||
|
{
|
||||||
|
printConsole("Illegal function call", "\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
slot = token.value.castInteger;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
isRunningDirectMode = false;
|
||||||
|
runSlot(slot);
|
||||||
|
}
|
||||||
|
else if(token.type == otya.smilebasic.token.TokenType.Iden && token.value.stringValue == "CONT")
|
||||||
|
{
|
||||||
|
vm.pc = oldpc;
|
||||||
|
isRunningDirectMode = false;
|
||||||
|
directMode = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isRunningDirectMode = true;
|
||||||
parser = new Parser(prg);
|
parser = new Parser(prg);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1207,7 +1310,6 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
printConsole(sbe.getErrorMessage, "\n");
|
printConsole(sbe.getErrorMessage, "\n");
|
||||||
if(sbe.getErrorMessage2.length) printConsole(sbe.getErrorMessage2, "\n");
|
if(sbe.getErrorMessage2.length) printConsole(sbe.getErrorMessage2, "\n");
|
||||||
//printConsole(sbe.to!string);
|
|
||||||
writeln(sbe.to!string);
|
writeln(sbe.to!string);
|
||||||
writeln(sbe.getErrorMessage2);
|
writeln(sbe.getErrorMessage2);
|
||||||
auto loc = vm.currentLocation;
|
auto loc = vm.currentLocation;
|
||||||
@@ -1233,12 +1335,12 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
vm.dump();
|
}
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
//vm.dump;
|
//vm.dump;
|
||||||
this.vm = vm;
|
this.vm = vm;
|
||||||
bg[0].put(0,0,1);
|
//bg[0].put(0,0,1);
|
||||||
//gpset(0, 10, 10, 0xFF00FF00);
|
//gpset(0, 10, 10, 0xFF00FF00);
|
||||||
//gline(0, 0, 0, 399, 239, RGB(0, 255, 0));
|
//gline(0, 0, 0, 399, 239, RGB(0, 255, 0));
|
||||||
//gfill(0, 78, 78, 40, 40, RGB(0, 255, 255));
|
//gfill(0, 78, 78, 40, 40, RGB(0, 255, 255));
|
||||||
@@ -1305,6 +1407,9 @@ class PetitComputer
|
|||||||
loc = vm.currentLocation;
|
loc = vm.currentLocation;
|
||||||
printConsole("Break on ", vm.currentSlotNumber, ":", loc.line, "\n");
|
printConsole("Break on ", vm.currentSlotNumber, ":", loc.line, "\n");
|
||||||
stopflg = false;
|
stopflg = false;
|
||||||
|
directMode = true;
|
||||||
|
if(!isRunningDirectMode)
|
||||||
|
oldpc = vm.pc;
|
||||||
}
|
}
|
||||||
if(directMode) break;
|
if(directMode) break;
|
||||||
}
|
}
|
||||||
@@ -1362,7 +1467,11 @@ class PetitComputer
|
|||||||
wchar k;
|
wchar k;
|
||||||
//文字入力中はカーソルを表示する
|
//文字入力中はカーソルを表示する
|
||||||
animationCursor = true;
|
animationCursor = true;
|
||||||
foreach(key; keybuffer[oldpos..kbp])
|
foreach(key1; keybuffer[oldpos..kbp])
|
||||||
|
{
|
||||||
|
wchar key = key1.key;
|
||||||
|
wstring ks;
|
||||||
|
if(key1.op == KeyOp.KEY)
|
||||||
{
|
{
|
||||||
if(key == 8)
|
if(key == 8)
|
||||||
{
|
{
|
||||||
@@ -1380,8 +1489,20 @@ class PetitComputer
|
|||||||
printConsole("\n");
|
printConsole("\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printConsole(key);
|
immutable(wchar[1]) a = key;
|
||||||
buffer ~= key;
|
ks = a[];
|
||||||
|
}
|
||||||
|
else if(key1.op == KeyOp.PASTE)
|
||||||
|
{
|
||||||
|
if(SDL_HasClipboardText())
|
||||||
|
{
|
||||||
|
char* cl = SDL_GetClipboardText();
|
||||||
|
string an = cast(string)(cl[0..std.c.string.strlen(cl)]);
|
||||||
|
ks = an.to!wstring;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printConsole(ks);
|
||||||
|
buffer ~= ks;
|
||||||
}
|
}
|
||||||
clearKeyBuffer();
|
clearKeyBuffer();
|
||||||
if(k == '\r')
|
if(k == '\r')
|
||||||
|
|||||||
@@ -678,8 +678,8 @@ class Sprite
|
|||||||
}
|
}
|
||||||
sprite.linkx = x;
|
sprite.linkx = x;
|
||||||
sprite.linky = y;
|
sprite.linky = y;
|
||||||
auto homex2 = ((sprite.w / 2 ) - sprite.homex);
|
auto homex2 = ((sprite.w / 2f ) - sprite.homex);
|
||||||
auto homey2 = ((sprite.h / 2 ) - sprite.homey);
|
auto homey2 = ((sprite.h / 2f ) - sprite.homey);
|
||||||
int w = sprite.w;
|
int w = sprite.w;
|
||||||
int h = sprite.h;
|
int h = sprite.h;
|
||||||
|
|
||||||
@@ -710,25 +710,26 @@ class Sprite
|
|||||||
glTranslatef((flipx2),
|
glTranslatef((flipx2),
|
||||||
((flipy2)), 0);
|
((flipy2)), 0);
|
||||||
//glTranslatef((flipx2) / dish - 1,1 - ((flipy2) / dish), 0);
|
//glTranslatef((flipx2) / dish - 1,1 - ((flipy2) / dish), 0);
|
||||||
glScalef(flipx, flipy, 1f);
|
|
||||||
//アスペクト比を調節しないといけないらしい
|
//アスペクト比を調節しないといけないらしい
|
||||||
//https://groups.google.com/forum/#!topic/android-group-japan/45mjecPSY4s
|
//https://groups.google.com/forum/#!topic/android-group-japan/45mjecPSY4s
|
||||||
//http://www.tnksoft.com/blog/?p=2889
|
//http://www.tnksoft.com/blog/?p=2889
|
||||||
//glScalef(1.0f / aspect, 1.0f, 1.0f);
|
//glScalef(1.0f / aspect, 1.0f, 1.0f);
|
||||||
glRotatef(360 - sprite.r, 0.0f, 0.0f, 1.0f );
|
glRotatef(360 - sprite.r, 0.0f, 0.0f, 1.0f );
|
||||||
//glScalef(flipx * aspect, flipy, 1f);
|
//glScalef(flipx * aspect, flipy, 1f);
|
||||||
|
glScalef(flipx, flipy, 1f);
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glColor4ubv(cast(ubyte*)&sprite.color);
|
glColor4ubv(cast(ubyte*)&sprite.color);
|
||||||
if((sprite.attr& 0b111) == SpriteAttr.show)
|
if((sprite.attr& 0b111) == SpriteAttr.show)
|
||||||
{
|
{
|
||||||
glTexCoord2f(u / 512f - 1, v / 512f - 1);
|
glTexCoord2f(u / 512f - 1, v / 512f - 1);
|
||||||
glVertex3f(-((sprite.w / 2) - homex2) , -((sprite.h / 2) - homey2), z);//1
|
auto kbc= (-((sprite.w / 2f) - homex2));
|
||||||
|
glVertex3f(-((sprite.w / 2f) - homex2) , -((sprite.h / 2f) - homey2), z);//1
|
||||||
glTexCoord2f(u / 512f - 1 , v2 / 512f - 1);
|
glTexCoord2f(u / 512f - 1 , v2 / 512f - 1);
|
||||||
glVertex3f(-((sprite.w / 2) - homex2), ((sprite.h / 2) + homey2), z);//2
|
glVertex3f(-((sprite.w / 2f) - homex2), ((sprite.h / 2f) + homey2), z);//2
|
||||||
glTexCoord2f(u2 / 512f - 1, v2 / 512f - 1);
|
glTexCoord2f(u2 / 512f - 1, v2 / 512f - 1);
|
||||||
glVertex3f((sprite.w / 2) + homex2, ((sprite.h / 2) + homey2), z);//3//y+--+x--++
|
glVertex3f((sprite.w / 2f) + homex2, ((sprite.h / 2f) + homey2), z);//3//y+--+x--++
|
||||||
glTexCoord2f(u2 / 512f - 1, v / 512f - 1);
|
glTexCoord2f(u2 / 512f - 1, v / 512f - 1);
|
||||||
glVertex3f((sprite.w / 2) + homex2, -((sprite.h / 2) - homey2), z);//4
|
glVertex3f((sprite.w / 2f) + homex2, -((sprite.h / 2f) - homey2), z);//4
|
||||||
glEnd();
|
glEnd();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -92,10 +92,12 @@ class TabStep : SystemVariable
|
|||||||
}
|
}
|
||||||
class Version : SystemVariable
|
class Version : SystemVariable
|
||||||
{
|
{
|
||||||
|
static VERSIONSTRING = "3.1.0";
|
||||||
|
static VERSION = 0x3010000;
|
||||||
@property
|
@property
|
||||||
override Value value()
|
override Value value()
|
||||||
{
|
{
|
||||||
return Value(0x3010000);
|
return Value(VERSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class FreeMem : SystemVariable
|
class FreeMem : SystemVariable
|
||||||
|
|||||||
Reference in New Issue
Block a user