Fix SPLINK
This commit is contained in:
@@ -289,6 +289,7 @@ struct SpriteData
|
|||||||
//SPLINKの親は子より小さい管理番号でしかなれないのでsprite->child->nextのX座標を加算すればなんとかなる
|
//SPLINKの親は子より小さい管理番号でしかなれないのでsprite->child->nextのX座標を加算すればなんとかなる
|
||||||
//->挙動的に違う
|
//->挙動的に違う
|
||||||
int linkx, linky;
|
int linkx, linky;
|
||||||
|
double linkz = 0;
|
||||||
|
|
||||||
//SPCOL
|
//SPCOL
|
||||||
SpriteCollision col;
|
SpriteCollision col;
|
||||||
@@ -590,7 +591,7 @@ class Sprite
|
|||||||
import std.range;
|
import std.range;
|
||||||
import std.algorithm;
|
import std.algorithm;
|
||||||
zChange = false;
|
zChange = false;
|
||||||
synchronized (this) sort!("a.z > b.z", SwapStrategy.stable)(zsortedSprites);
|
synchronized (this) sort!("a.linkz > b.linkz", SwapStrategy.stable)(zsortedSprites);
|
||||||
}
|
}
|
||||||
float disw, dish, disw2, dish2;
|
float disw, dish, disw2, dish2;
|
||||||
disw = petitcom.currentDisplay.rect[0].w / 2;
|
disw = petitcom.currentDisplay.rect[0].w / 2;
|
||||||
@@ -661,18 +662,24 @@ class Sprite
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int x, y;
|
int x, y;
|
||||||
|
double spritez;
|
||||||
if(sprite.parent)
|
if(sprite.parent)
|
||||||
{
|
{
|
||||||
x += cast(int)(sprite.x + sprite.parent.linkx);
|
x += cast(int)(sprite.x + sprite.parent.linkx);
|
||||||
y += cast(int)(sprite.y + sprite.parent.linky);
|
y += cast(int)(sprite.y + sprite.parent.linky);
|
||||||
|
spritez = sprite.z + sprite.parent.linkz;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = cast(int)sprite.x;// - cast(int)(sprite.homex * sprite.scalex);
|
x = cast(int)sprite.x;// - cast(int)(sprite.homex * sprite.scalex);
|
||||||
y = cast(int)sprite.y;// - cast(int)(sprite.homey * sprite.scaley);
|
y = cast(int)sprite.y;// - cast(int)(sprite.homey * sprite.scaley);
|
||||||
|
spritez = sprite.z;
|
||||||
}
|
}
|
||||||
sprite.linkx = x;
|
sprite.linkx = x;
|
||||||
sprite.linky = y;
|
sprite.linky = y;
|
||||||
|
if (sprite.linkz != spritez)
|
||||||
|
zChange = true;
|
||||||
|
sprite.linkz = spritez;
|
||||||
auto homex2 = ((sprite.w / 2f ) - sprite.homex);
|
auto homex2 = ((sprite.w / 2f ) - sprite.homex);
|
||||||
auto homey2 = ((sprite.h / 2f ) - sprite.homey);
|
auto homey2 = ((sprite.h / 2f ) - sprite.homey);
|
||||||
int w = sprite.w;
|
int w = sprite.w;
|
||||||
@@ -851,8 +858,9 @@ class Sprite
|
|||||||
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));
|
||||||
|
sprites[id].linkz = sprites[id].parent ? z + sprites[id].parent.linkz : z;
|
||||||
|
zChange = true;
|
||||||
}
|
}
|
||||||
zChange = true;
|
|
||||||
}
|
}
|
||||||
void getspofs(int id, out double x, out double y, out double z)
|
void getspofs(int id, out double x, out double y, out double z)
|
||||||
{
|
{
|
||||||
@@ -1009,7 +1017,14 @@ class Sprite
|
|||||||
//SPLINK 2,0
|
//SPLINK 2,0
|
||||||
//SPLINK 2,1した時の挙動謎
|
//SPLINK 2,1した時の挙動謎
|
||||||
//最後にSPSETした親が優先される->子が親を保持?
|
//最後にSPSETした親が優先される->子が親を保持?
|
||||||
sprites[child].parent = &sprites[parent];
|
synchronized (this)
|
||||||
|
{
|
||||||
|
sprites[child].parent = &sprites[parent];
|
||||||
|
sprites[child].linkx = cast(int)(sprites[child].x + (sprites[child].parent ? sprites[child].parent.linkx : 0));
|
||||||
|
sprites[child].linky = cast(int)(sprites[child].y + (sprites[child].parent ? sprites[child].parent.linky : 0));
|
||||||
|
sprites[child].linkz = sprites[child].z + sprites[parent].linkz;
|
||||||
|
zChange = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//再帰的にUNLINKされるのか?
|
//再帰的にUNLINKされるのか?
|
||||||
void spunlink(int id)
|
void spunlink(int id)
|
||||||
|
|||||||
Reference in New Issue
Block a user