1
0

SPHOME,SPCLR,SPSCALE,STR,HEX実�

This commit is contained in:
otya128
2015-08-22 22:49:23 +09:00
parent 9394b853cb
commit 5ce3342dde
3 changed files with 52 additions and 9 deletions

View File

@@ -301,6 +301,15 @@ class BuiltinFunction
{ {
return cast(int)str[0]; return cast(int)str[0];
} }
static wstring STR(int val)
{
return val.to!wstring;
}
static wstring HEX(int val)
{
//ひどい
return val.to!string(16).to!wstring;
}
static void SPSET(PetitComputer p, int id, int defno) static void SPSET(PetitComputer p, int id, int defno)
{ {
p.sprite.spset(id, defno); p.sprite.spset(id, defno);
@@ -406,6 +415,14 @@ class BuiltinFunction
else else
p.sprite.spclr(cast(int)i); p.sprite.spclr(cast(int)i);
} }
static void SPHOME(PetitComputer p, int i, int hx, int hy)
{
p.sprite.sphome(i, hx, hy);
}
static void SPSCALE(PetitComputer p, int i, int x, int y)
{
p.sprite.spscale(i, x, y);
}
static void BGMSTOP(PetitComputer p) static void BGMSTOP(PetitComputer p)
{ {
writeln("NOTIMPL:BGMSTOP"); writeln("NOTIMPL:BGMSTOP");

View File

@@ -657,12 +657,14 @@ class PetitComputer
return; return;
case SDL_KEYUP: case SDL_KEYUP:
{ {
if(event.key.repeat) break;
auto key = event.key.keysym.sym; auto key = event.key.keysym.sym;
button &= ~buttonTable[event.key.keysym.scancode]; button &= ~buttonTable[event.key.keysym.scancode];
} }
break; break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
{ {
if(event.key.repeat) break;
auto key = event.key.keysym.sym; auto key = event.key.keysym.sym;
button |= buttonTable[event.key.keysym.scancode]; button |= buttonTable[event.key.keysym.scancode];
if(key == SDLK_BACKSPACE) if(key == SDLK_BACKSPACE)

View File

@@ -74,9 +74,8 @@ struct SpriteAnimData
bool interpolation;//線形補完するかどうか bool interpolation;//線形補完するかどうか
SpriteAnimState data; SpriteAnimState data;
SpriteAnimState old; SpriteAnimState old;
int load(ref SpriteData sprite, SpriteAnimTarget target, double[] data) int load(int i, ref SpriteData sprite, SpriteAnimTarget target, double[] data)
{ {
int i = 0;
this.frame = -cast(int)data[i]; this.frame = -cast(int)data[i];
i++; i++;
switch(target) switch(target)
@@ -132,6 +131,8 @@ struct SpriteData
double[8] var; double[8] var;
SpriteAttr attr; SpriteAttr attr;
bool define;//定義されてればtrue bool define;//定義されてればtrue
double scalex;
double scaley;
this(bool flag) this(bool flag)
{ {
define = false; define = false;
@@ -145,6 +146,8 @@ struct SpriteData
this.color = -1; this.color = -1;
this.attr = SpriteAttr.show; this.attr = SpriteAttr.show;
this.define = true; this.define = true;
scalex = 1;
scaley = 1;
} }
this(int id, int u, int v, int w, int h) this(int id, int u, int v, int w, int h)
{ {
@@ -158,6 +161,8 @@ struct SpriteData
this.color = -1; this.color = -1;
this.attr = SpriteAttr.show; this.attr = SpriteAttr.show;
this.define = true; this.define = true;
scalex = 1;
scaley = 1;
} }
this(int id, ref SpriteDef spdef) this(int id, ref SpriteDef spdef)
{ {
@@ -173,6 +178,8 @@ struct SpriteData
this.homex = spdef.hx; this.homex = spdef.hx;
this.homey = spdef.hy; this.homey = spdef.hy;
this.define = true; this.define = true;
scalex = 1;
scaley = 1;
} }
SpriteAnimData[][SpriteAnimTarget.V] anim; SpriteAnimData[][SpriteAnimTarget.V] anim;
void setAnimation(SpriteAnimData[] anim, SpriteAnimTarget sat) void setAnimation(SpriteAnimData[] anim, SpriteAnimTarget sat)
@@ -183,6 +190,7 @@ struct SpriteData
void clear() void clear()
{ {
this.define = false; this.define = false;
this.attr = SpriteAttr.none;
} }
} }
struct SpriteDef struct SpriteDef
@@ -289,8 +297,8 @@ class Sprite
} }
if(sprite.attr & SpriteAttr.show) if(sprite.attr & SpriteAttr.show)
{ {
int x = cast(int)sprite.x - sprite.homex; int x = cast(int)sprite.x - cast(int)(sprite.homex * sprite.scalex);
int y = cast(int)sprite.y - sprite.homey; int y = cast(int)sprite.y - cast(int)(sprite.homey * sprite.scaley);
int w = sprite.w; int w = sprite.w;
int h = sprite.h; int h = sprite.h;
if((sprite.attr & SpriteAttr.rotate90) == SpriteAttr.rotate90) if((sprite.attr & SpriteAttr.rotate90) == SpriteAttr.rotate90)
@@ -303,20 +311,20 @@ class Sprite
int v = cast(int)sprite.v; int v = cast(int)sprite.v;
int u2 = cast(int)sprite.u + sprite.w;//-1 int u2 = cast(int)sprite.u + sprite.w;//-1
int v2 = cast(int)sprite.v + sprite.h; int v2 = cast(int)sprite.v + sprite.h;
int flipx = 1, flipy = 1, flipx2 = x, flipy2 = y; float flipx = cast(float)sprite.scalex, flipy = cast(float)sprite.scaley, flipx2 = x, flipy2 = y;
if(sprite.attr & SpriteAttr.hflip) if(sprite.attr & SpriteAttr.hflip)
{ {
flipx = -1; flipx = -flipx;
flipx2 = x2; flipx2 = x2;
} }
if(sprite.attr & SpriteAttr.hflip) if(sprite.attr & SpriteAttr.hflip)
{ {
flipy = -1; flipy = -flipy;
flipy2 = y2; flipy2 = y2;
} }
glTranslatef((flipx2) / 200f - 1,1 - ((flipy2) / 120f), z); glTranslatef((flipx2) / 200f - 1,1 - ((flipy2) / 120f), z);
glRotatef(d, 0.0f, 0.0f, 1.0f );
glScalef(flipx, flipy, 1f); glScalef(flipx, flipy, 1f);
glRotatef(d, 0.0f, 0.0f, 1.0f );
glBegin(GL_QUADS); glBegin(GL_QUADS);
glColor3f(1.0, 1.0, 1.0); glColor3f(1.0, 1.0, 1.0);
if(sprite.attr == SpriteAttr.show) if(sprite.attr == SpriteAttr.show)
@@ -433,9 +441,15 @@ class Sprite
} }
int animcount = data.length / ((target == SpriteAnimTarget.XY || target == SpriteAnimTarget.UV) ? 3 : 2); int animcount = data.length / ((target == SpriteAnimTarget.XY || target == SpriteAnimTarget.UV) ? 3 : 2);
SpriteAnimData[] animdata = new SpriteAnimData[animcount]; SpriteAnimData[] animdata = new SpriteAnimData[animcount];
int j;
for(int i = 0; i < data.length;) for(int i = 0; i < data.length;)
{ {
i = animdata[i].load(sprites[id], target, data); i = animdata[j++].load(i, sprites[id], target, data);
if(data.length - i == 1)
{
//loop
break;
}
} }
sprites[id].setAnimation(animdata, target); sprites[id].setAnimation(animdata, target);
} }
@@ -450,4 +464,14 @@ class Sprite
spclr(i); spclr(i);
} }
} }
void sphome(int i, int hx, int hy)
{
sprites[i].homex = hx;
sprites[i].homey = hy;
}
void spscale(int i, int x, int y)
{
sprites[i].scalex = x;
sprites[i].scaley = y;
}
} }