1
0

Add SPSET check

This commit is contained in:
otya128
2016-12-30 21:01:25 +09:00
parent 5279e5c62e
commit ff19e614c4
2 changed files with 84 additions and 1 deletions

View File

@@ -1456,6 +1456,10 @@ class BuiltinFunction
} }
static void SPCHR(PetitComputer p, int id, int defno, DefaultValue!(int, false) V, DefaultValue!(int, false) W, DefaultValue!(int, false) H, DefaultValue!(int, false) ATTR) static void SPCHR(PetitComputer p, int id, int defno, DefaultValue!(int, false) V, DefaultValue!(int, false) W, DefaultValue!(int, false) H, DefaultValue!(int, false) ATTR)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCHR", 1);
}
if(!V.isDefault && !W.isDefault) if(!V.isDefault && !W.isDefault)
{ {
int u = defno; int u = defno;
@@ -1514,14 +1518,26 @@ class BuiltinFunction
} }
static void SPHIDE(PetitComputer p, int id) static void SPHIDE(PetitComputer p, int id)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPHIDE", 1);
}
p.sprite.sphide(id); p.sprite.sphide(id);
} }
static void SPSHOW(PetitComputer p, int id) static void SPSHOW(PetitComputer p, int id)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPSHOW", 1);
}
p.sprite.spshow(id); p.sprite.spshow(id);
} }
static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y, double z) static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y, double z)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPOFS", 1);
}
if (x.isDefault || y.isDefault) if (x.isDefault || y.isDefault)
{ {
double x_, y_, z_; double x_, y_, z_;
@@ -1533,6 +1549,10 @@ class BuiltinFunction
} }
static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y) static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPOFS", 1);
}
if (x.isDefault || y.isDefault) if (x.isDefault || y.isDefault)
{ {
double x_, y_, z_; double x_, y_, z_;
@@ -1545,6 +1565,10 @@ class BuiltinFunction
@StartOptional("z") @StartOptional("z")
static void SPOFS(PetitComputer p, int id, out double x, out double y, out double z) static void SPOFS(PetitComputer p, int id, out double x, out double y, out double z)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPOFS", 1);
}
p.sprite.getspofs(id, x, y, z); p.sprite.getspofs(id, x, y, z);
} }
static void SPANIM(PetitComputer p, Value[] va_args) static void SPANIM(PetitComputer p, Value[] va_args)
@@ -1552,6 +1576,10 @@ class BuiltinFunction
//TODO:配列 //TODO:配列
auto args = retro(va_args); auto args = retro(va_args);
int no = args[0].castInteger; int no = args[0].castInteger;
if (!p.sprite.isSpriteDefined(no))
{
throw new IllegalFunctionCall("SPANIM", 1);
}
double[] animdata; double[] animdata;
if(args[2].isString) if(args[2].isString)
{ {
@@ -1699,6 +1727,7 @@ class BuiltinFunction
} }
static void SPCLR(PetitComputer p, DefaultValue!(int, false) i) static void SPCLR(PetitComputer p, DefaultValue!(int, false) i)
{ {
//spset is not checked
if(i.isDefault) if(i.isDefault)
p.sprite.spclr(); p.sprite.spclr();
else else
@@ -1706,18 +1735,34 @@ class BuiltinFunction
} }
static void SPHOME(PetitComputer p, int i, int hx, int hy) static void SPHOME(PetitComputer p, int i, int hx, int hy)
{ {
if (!p.sprite.isSpriteDefined(i))
{
throw new IllegalFunctionCall("SPHOME", 1);
}
p.sprite.sphome(i, hx, hy); p.sprite.sphome(i, hx, hy);
} }
static void SPSCALE(PetitComputer p, int i, double x, double y) static void SPSCALE(PetitComputer p, int i, double x, double y)
{ {
if (!p.sprite.isSpriteDefined(i))
{
throw new IllegalFunctionCall("SPSCALE", 1);
}
p.sprite.spscale(i, x, y); p.sprite.spscale(i, x, y);
} }
static void SPROT(PetitComputer p, int i, double rot) static void SPROT(PetitComputer p, int i, double rot)
{ {
if (!p.sprite.isSpriteDefined(i))
{
throw new IllegalFunctionCall("SPROT", 1);
}
p.sprite.sprot(i, rot); p.sprite.sprot(i, rot);
} }
static void SPCOLOR(PetitComputer p, int id, int color) static void SPCOLOR(PetitComputer p, int id, int color)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOLOR", 1);
}
p.sprite.spcolor(id, cast(uint)color); p.sprite.spcolor(id, cast(uint)color);
} }
static void SPLINK(PetitComputer p, int child, int parent) static void SPLINK(PetitComputer p, int child, int parent)
@@ -1726,38 +1771,67 @@ class BuiltinFunction
} }
static void SPUNLINK(PetitComputer p, int id) static void SPUNLINK(PetitComputer p, int id)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPUNLINK", 1);
}
p.sprite.spunlink(id); p.sprite.spunlink(id);
} }
static void SPCOL(PetitComputer p, int id, DefaultValue!(int, false) scale) static void SPCOL(PetitComputer p, int id, DefaultValue!(int, false) scale)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOL", 1);
}
scale.setDefaultValue(false); scale.setDefaultValue(false);
p.sprite.spcol(id, cast(bool)scale); p.sprite.spcol(id, cast(bool)scale);
} }
static void SPCOL(PetitComputer p, int id, DefaultValue!int scale, int mask) static void SPCOL(PetitComputer p, int id, DefaultValue!int scale, int mask)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOL", 1);
}
scale.setDefaultValue(false); scale.setDefaultValue(false);
p.sprite.spcol(id, cast(bool)scale, mask); p.sprite.spcol(id, cast(bool)scale, mask);
} }
static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h, int scale) static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h, int scale)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOL", 1);
}
p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, cast(bool)scale, -1); p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, cast(bool)scale, -1);
} }
static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h, DefaultValue!int scale, int mask) static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h, DefaultValue!int scale, int mask)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOL", 1);
}
scale.setDefaultValue(false); scale.setDefaultValue(false);
p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, cast(bool)scale, mask); p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, cast(bool)scale, mask);
} }
static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h, DefaultValue!int scale) static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h, DefaultValue!int scale)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOL", 1);
}
scale.setDefaultValue(false); scale.setDefaultValue(false);
p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, cast(bool)scale, -1); p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, cast(bool)scale, -1);
} }
static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h) static void SPCOL(PetitComputer p, int id, int x, int y, int w, int h)
{ {
if (!p.sprite.isSpriteDefined(id))
{
throw new IllegalFunctionCall("SPCOL", 1);
}
p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, false, -1); p.sprite.spcol(id, cast(short)x, cast(short)y, cast(ushort)w, cast(ushort)h, false, -1);
} }
static int SPHITSP(PetitComputer p, int id) static int SPHITSP(PetitComputer p, int id)
{ {
//spset is not checked
return p.sprite.sphitsp(id); return p.sprite.sphitsp(id);
} }
static int SPHITSP(PetitComputer p, int id, int min) static int SPHITSP(PetitComputer p, int id, int min)
@@ -1770,6 +1844,7 @@ class BuiltinFunction
} }
static void SPVAR(PetitComputer p, int id, int var, double val) static void SPVAR(PetitComputer p, int id, int var, double val)
{ {
//spset is not checked
p.sprite.spvar(id, var, val); p.sprite.spvar(id, var, val);
} }
static double SPVAR(PetitComputer p, int id, int var) static double SPVAR(PetitComputer p, int id, int var)

View File

@@ -1028,7 +1028,15 @@ class Sprite
{ {
if(parent >= child) if(parent >= child)
{ {
throw new IllegalFunctionCall("SPLINK"); throw new IllegalFunctionCall("SPLINK", 2);
}
if (!isSpriteDefined(child))
{
throw new IllegalFunctionCall("SPLINK", 1);
}
if (!isSpriteDefined(parent))
{
throw new IllegalFunctionCall("SPLINK", 2);
} }
parent = spid(parent); parent = spid(parent);
child = spid(child); child = spid(child);