Fix SPANIM
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user