1
0

Implement SPHITINFO

This commit is contained in:
otya128
2017-07-22 12:13:03 +09:00
parent 374d635f8a
commit 57ef38a037
2 changed files with 52 additions and 0 deletions

View File

@@ -2292,6 +2292,30 @@ class BuiltinFunction
{
p.sprite.spstop();
}
static void SPHITINFO(PetitComputer p, out double tm)
{
tm = p.sprite.spriteHitInfo.time;
}
static void SPHITINFO(PetitComputer p, out double tm, out double x1, out double y1, out double x2, out double y2)
{
tm = p.sprite.spriteHitInfo.time;
x1 = p.sprite.spriteHitInfo.x1;
y1 = p.sprite.spriteHitInfo.y1;
x2 = p.sprite.spriteHitInfo.x2;
y2 = p.sprite.spriteHitInfo.y2;
}
static void SPHITINFO(PetitComputer p, out double tm, out double x1, out double y1, out double vx1, out double vy1, out double x2, out double y2, out double vx2, out double vy2)
{
tm = p.sprite.spriteHitInfo.time;
x1 = p.sprite.spriteHitInfo.x1;
y1 = p.sprite.spriteHitInfo.y1;
x2 = p.sprite.spriteHitInfo.x2;
y2 = p.sprite.spriteHitInfo.y2;
vx1 = p.sprite.spriteHitInfo.vx1;
vy1 = p.sprite.spriteHitInfo.vy1;
vx2 = p.sprite.spriteHitInfo.vx2;
vy2 = p.sprite.spriteHitInfo.vy2;
}
static void BGMSTOP(PetitComputer p)
{
writeln("NOTIMPL:BGMSTOP");

View File

@@ -175,6 +175,9 @@ struct SpriteCollision
short sy;
ushort w;
ushort h;
double vx = 0;
double vy = 0;
bool detection(ref SpriteData sp)
{
if(sp.define && sp.col.mask & mask)
@@ -328,6 +331,18 @@ struct SpriteData
SpriteCollision col;
bool enableCol;
}
struct SpriteHitInfo
{
double time;
double x1 = 0;
double y1 = 0;
double vx1 = 0;
double vy1 = 0;
double x2 = 0;
double y2 = 0;
double vx2 = 0;
double vy2 = 0;
}
class Sprite
{
SpriteDef[] defSPDEFTable;
@@ -1146,6 +1161,7 @@ class Sprite
end = spid(end);
return sphitsp2(id, start, end);
}
SpriteHitInfo spriteHitInfo;
int sphitsp2(int id, int start, int end)
{
if (!sprites[id].enableCol)
@@ -1156,7 +1172,19 @@ class Sprite
{
if(id == start) continue;
if(sprites[start].enableCol && sprites[id].col.detection(sprites[start]))
{
spriteHitInfo.time = 0;
spriteHitInfo.x1 = sprites[id].x;
spriteHitInfo.y1 = sprites[id].y;
spriteHitInfo.vx1 = sprites[id].col.vx;
spriteHitInfo.vy1 = sprites[id].col.vy;
spriteHitInfo.x2 = sprites[start].x;
spriteHitInfo.y2 = sprites[start].y;
spriteHitInfo.vx2 = sprites[start].col.vx;
spriteHitInfo.vy2 = sprites[start].col.vy;
return start;
}
}
return -1;
}