1
0

関数内でローカル変数やグローバル変数にアクセスできなかった問題を修正,BGFILL,SPCHK,SPVARなど実装

This commit is contained in:
otya128
2015-08-29 16:23:41 +09:00
parent d05166a3b9
commit 4525728dd5
8 changed files with 215 additions and 34 deletions

View File

@@ -252,10 +252,10 @@ struct SpriteData
this.defno = defno;
col = SpriteCollision(&this);
}
SpriteAnimData[][SpriteAnimTarget.V] anim;
int[SpriteAnimTarget.V] animindex;
int[SpriteAnimTarget.V] animloop;
int[SpriteAnimTarget.V] animloopcnt;
SpriteAnimData[][SpriteAnimTarget.V + 1] anim;
int[SpriteAnimTarget.V + 1] animindex;
int[SpriteAnimTarget.V + 1] animloop;
int[SpriteAnimTarget.V + 1] animloopcnt;
void setAnimation(SpriteAnimData[] anim, SpriteAnimTarget sat, int loop)
{
this.anim[sat] = anim;
@@ -321,6 +321,16 @@ class Sprite
{
this.SPDEFTable[] = (this.defSPDEFTable)[];
}
void getspdef(int id, out int U, out int V, out int W, out int H, out int HX, out int HY, out int A)
{
U = SPDEFTable[id].u;
V = SPDEFTable[id].v;
W = SPDEFTable[id].w;
H = SPDEFTable[id].h;
HX= SPDEFTable[id].hx;
HY= SPDEFTable[id].hy;
A = SPDEFTable[id].a;
}
void spchr(int i, int d)
{
i = spid(i);
@@ -702,13 +712,31 @@ class Sprite
auto spdef = SpriteDef(u, v, w, h, 0, 0, attr);
sprites[id] = SpriteData(id, spdef, 0/*要調査*/);
}
int spchk(int id)
{
id = spid(id);
int state;
for(int i = 0; i <= SpriteAnimTarget.V; i++)
{
if(sprites[id].anim[i])
{
state |= 1 << i;
}
}
return state;
}
void spofs(int id, double x, double y)
{
//animeとめる
id = spid(id);
sprites[id].x = x;
sprites[id].y = y;
sprites[id].linkx = cast(int)(x + (sprites[id].parent ? sprites[id].parent.linkx : 0));
sprites[id].linky = cast(int)(y + (sprites[id].parent ? sprites[id].parent.linky : 0));
sprites[id].anim[SpriteAnimTarget.XY] = null;
sprites[id].animindex[SpriteAnimTarget.XY] = 0;
sprites[id].animloop[SpriteAnimTarget.XY] = 0;
sprites[id].animloopcnt[SpriteAnimTarget.XY] = 0;
}
void spofs(int id, double x, double y, int z)
{
@@ -719,6 +747,10 @@ class Sprite
sprites[id].linkx = cast(int)(x + (sprites[id].parent ? sprites[id].parent.linkx : 0));
sprites[id].linky = cast(int)(y + (sprites[id].parent ? sprites[id].parent.linky : 0));
zChange = true;
sprites[id].anim[SpriteAnimTarget.XY] = null;
sprites[id].animindex[SpriteAnimTarget.XY] = 0;
sprites[id].animloop[SpriteAnimTarget.XY] = 0;
sprites[id].animloopcnt[SpriteAnimTarget.XY] = 0;
}
void getspofs(int id, out double x, out double y, out int z)
{
@@ -762,6 +794,16 @@ class Sprite
"V": SpriteAnimTarget.V,
];
}
SpriteAnimTarget getSpriteAnimTarget(wstring target)
{
bool relative = false;
if(target[$ - 1..$] == "+")
{
target = target[0..$-1];
relative = true;
}
return spriteAnimTarget[target] | (relative ? SpriteAnimTarget.relative : cast(SpriteAnimTarget)0);
}
void spanim(int id, SpriteAnimTarget target, double[] data)
{
id = spid(id);
@@ -916,4 +958,14 @@ class Sprite
}
return -1;
}
void spvar(int id, int var, double val)
{
id = spid(id);
sprites[id].var[var] = val;
}
double spvar(int id, int var)
{
id = spid(id);
return sprites[id].var[var];
}
}