1
0

SPLINK,SPOFS OUT実装,BuiltinFunctionクラスをオーバーロード対応にした

This commit is contained in:
otya128
2015-08-28 18:34:38 +09:00
parent f149ce596f
commit 61c1fd06f4
5 changed files with 515 additions and 113 deletions

View File

@@ -239,18 +239,11 @@ struct SpriteData
this.homey = s.hy;
this.attr = s.a;
}
double debugZ()
{
import std.stdio;
// writefln("sprite=%d, z=%f", id, z);
return z;
}
int opCmp(ref SpriteData spr)
{
import std.stdio;
writeln("WHAT!????");
return 0;
}
//SPLINK用
SpriteData* parent;
//SPLINKの親は子より小さい管理番号でしかなれないのでsprite->child->nextのX座標を加算すればなんとかなる
//->挙動的に違う
int linkx, linky;
}
class Sprite
{
@@ -520,8 +513,19 @@ class Sprite
}
if(sprite.attr & SpriteAttr.show)
{
int x = cast(int)sprite.x;// - cast(int)(sprite.homex * sprite.scalex);
int y = cast(int)sprite.y;// - cast(int)(sprite.homey * sprite.scaley);
int x, y;
if(sprite.parent)
{
x += cast(int)(sprite.x + sprite.parent.linkx);
y += cast(int)(sprite.y + sprite.parent.linky);
}
else
{
x = cast(int)sprite.x;// - cast(int)(sprite.homex * sprite.scalex);
y = cast(int)sprite.y;// - cast(int)(sprite.homey * sprite.scaley);
}
sprite.linkx = x;
sprite.linky = y;
auto homex2 = ((sprite.w / 2 ) - sprite.homex) / disw;
auto homey2 = ((sprite.h / 2 ) - sprite.homey) / dish;
int w = sprite.w;
@@ -652,13 +656,13 @@ class Sprite
auto spdef = SpriteDef(u, v, w, h, 0, 0, attr);
sprites[id] = SpriteData(id, spdef, 0/*要調査*/);
}
void spofs(int id, int x, int y)
void spofs(int id, double x, double y)
{
id = spid(id);
sprites[id].x = x;
sprites[id].y = y;
}
void spofs(int id, int x, int y, int z)
void spofs(int id, double x, double y, int z)
{
id = spid(id);
sprites[id].x = x;
@@ -666,6 +670,13 @@ class Sprite
sprites[id].z = z;
zChange = true;
}
void getspofs(int id, out double x, out double y, out int z)
{
id = spid(id);
x = sprites[id].x;
y = sprites[id].y;
z = sprites[id].z;
}
void sphide(int id)
{
id = spid(id);
@@ -762,4 +773,24 @@ class Sprite
id = spid(id);
sprites[id].color = petitcom.toGLColor(color);
}
void splink(int child, int parent)
{
if(parent >= child)
{
throw new IllegalFunctionCall("SPLINK");
}
parent = spid(parent);
child = spid(child);
//SPLINK 2,0
//SPLINK 2,1した時の挙動謎
//最後にSPSETした親が優先される->子が親を保持?
sprites[child].parent = &sprites[parent];
}
//再帰的にUNLINKされるのか
void spunlink(int id)
{
id = spid(id);
//parent==nullでもエラーでない
sprites[id].parent = null;
}
}