1
0

Fix SPANIM

This commit is contained in:
otya128
2016-12-23 15:05:48 +09:00
parent 78a9d27098
commit 4ca392b40b

View File

@@ -265,6 +265,7 @@ struct SpriteData
} }
animloop[sat] = loop; animloop[sat] = loop;
animloopcnt[sat] = 0; animloopcnt[sat] = 0;
animindex[sat] = 0;
this.anim[sat] = anim; this.anim[sat] = anim;
isAnim = true; isAnim = true;
} }
@@ -589,7 +590,7 @@ class Sprite
{ {
if ((!visibles[0] && !visibles[1]) || (petitcom.xscreenmode == 2 && !visibles[0])) if ((!visibles[0] && !visibles[1]) || (petitcom.xscreenmode == 2 && !visibles[0]))
{ {
foreach(ref sprite; sprites) synchronized (this) foreach(ref sprite; sprites)
{ {
if(sprite.define) if(sprite.define)
{ {
@@ -680,7 +681,7 @@ class Sprite
// glDisable(GL_TEXTURE_2D); // glDisable(GL_TEXTURE_2D);
version(test) glLoadIdentity(); version(test) glLoadIdentity();
glLoadIdentity(); glLoadIdentity();
foreach(i, sprite; zsortedSprites) synchronized (this) foreach(i, sprite; zsortedSprites)
{ {
//定義されてたら動かす //定義されてたら動かす
if(sprite.define) if(sprite.define)
@@ -858,12 +859,14 @@ class Sprite
void spset(int id, int defno) void spset(int id, int defno)
{ {
id = spid(id); id = spid(id);
synchronized (this)
sprites[id] = SpriteData(id, SPDEFTable[defno], defno); sprites[id] = SpriteData(id, SPDEFTable[defno], defno);
} }
void spset(int id, int u, int v, int w, int h, SpriteAttr attr) void spset(int id, int u, int v, int w, int h, SpriteAttr attr)
{ {
id = spid(id); id = spid(id);
auto spdef = SpriteDef(u, v, w, h, 0, 0, attr); auto spdef = SpriteDef(u, v, w, h, 0, 0, attr);
synchronized (this)
sprites[id] = SpriteData(id, spdef, 0/*要調査*/); sprites[id] = SpriteData(id, spdef, 0/*要調査*/);
} }
int spchk(int id) int spchk(int id)
@@ -883,21 +886,27 @@ class Sprite
{ {
//animeとめる //animeとめる
id = spid(id); id = spid(id);
synchronized (this)
{
sprites[id].anim[SpriteAnimTarget.XY] = null; sprites[id].anim[SpriteAnimTarget.XY] = null;
sprites[id].x = x; sprites[id].x = x;
sprites[id].y = y; sprites[id].y = y;
sprites[id].linkx = cast(int)(x + (sprites[id].parent ? sprites[id].parent.linkx : 0)); 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].linky = cast(int)(y + (sprites[id].parent ? sprites[id].parent.linky : 0));
} }
}
void spofs(int id, double x, double y, int z) void spofs(int id, double x, double y, int z)
{ {
id = spid(id); id = spid(id);
synchronized (this)
{
sprites[id].anim[SpriteAnimTarget.XY] = null; sprites[id].anim[SpriteAnimTarget.XY] = null;
sprites[id].x = x; sprites[id].x = x;
sprites[id].y = y; sprites[id].y = y;
sprites[id].z = z; sprites[id].z = z;
sprites[id].linkx = cast(int)(x + (sprites[id].parent ? sprites[id].parent.linkx : 0)); 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].linky = cast(int)(y + (sprites[id].parent ? sprites[id].parent.linky : 0));
}
zChange = true; zChange = true;
} }
void getspofs(int id, out double x, out double y, out int z) void getspofs(int id, out double x, out double y, out int z)
@@ -957,6 +966,8 @@ class Sprite
return spriteAnimTarget[target] | (relative ? SpriteAnimTarget.relative : cast(SpriteAnimTarget)0); return spriteAnimTarget[target] | (relative ? SpriteAnimTarget.relative : cast(SpriteAnimTarget)0);
} }
void spanim(int id, SpriteAnimTarget target, double[] data) void spanim(int id, SpriteAnimTarget target, double[] data)
{
synchronized (this)
{ {
id = spid(id); id = spid(id);
bool relative; bool relative;
@@ -1000,14 +1011,16 @@ class Sprite
} }
} }
} }
}
void spclr(int id) void spclr(int id)
{ {
id = spid(id); id = spid(id);
synchronized (this)
sprites[id].clear; sprites[id].clear;
} }
void spclr() void spclr()
{ {
for(int i = 0; i < sprites.length; i++) synchronized (this) for(int i = 0; i < sprites.length; i++)
{ {
sprites[i].clear; sprites[i].clear;
} }
@@ -1015,15 +1028,21 @@ class Sprite
void sphome(int i, int hx, int hy) void sphome(int i, int hx, int hy)
{ {
i = spid(i); i = spid(i);
synchronized (this)
{
sprites[i].homex = hx; sprites[i].homex = hx;
sprites[i].homey = hy; sprites[i].homey = hy;
} }
}
void spscale(int i, double x, double y) void spscale(int i, double x, double y)
{ {
i = spid(i); i = spid(i);
synchronized (this)
{
sprites[i].scalex = x; sprites[i].scalex = x;
sprites[i].scaley = y; sprites[i].scaley = y;
} }
}
void sprot(int i, double rot) void sprot(int i, double rot)
{ {
i = spid(i); i = spid(i);
@@ -1067,7 +1086,7 @@ class Sprite
void spcol(int id, bool scale, int mask) void spcol(int id, bool scale, int mask)
{ {
id = spid(id); id = spid(id);
spcol(id, 0, 0, cast(ushort)sprites[id].w, cast(ushort)sprites[id].h, scale, mask); synchronized (this) spcol(id, 0, 0, cast(ushort)sprites[id].w, cast(ushort)sprites[id].h, scale, mask);
} }
void spcol(int id, short sx, short sy, ushort w, ushort h, bool scale, int mask) void spcol(int id, short sx, short sy, ushort w, ushort h, bool scale, int mask)
{ {