1
0

Implement FADE

This commit is contained in:
otya128
2017-07-10 18:29:22 +09:00
parent 5da1668fab
commit c4add72a28
3 changed files with 105 additions and 1 deletions

77
SMILEBASIC/fade.d Normal file
View File

@@ -0,0 +1,77 @@
module otya.smilebasic.fade;
import otya.smilebasic.petitcomputer;
import derelict.opengl3.gl;
class Fade
{
PetitComputer petitcom;
int display;
public this(PetitComputer p, int display)
{
petitcom = p;
this.display = display;
fade(0);
}
int color;
int start;
int startColor;
int end;
int endColor;
public void fade(int color)
{
this.color = color;
end = -1;
start = -1;
}
public void fade(int color, int time)
{
this.startColor = this.color;
this.endColor = color;
this.start = petitcom.maincntRender;
this.end = this.start + time;
}
public int fade()
{
return color;
}
Tt linear(Tx, Tt)(Tx x1, Tx x2, Tt t)
{
return (x2 - x1) / t;
}
void render()
{
auto m = petitcom.maincntRender;
ubyte a, r, g, b;
petitcom.RGBRead(color, r, g, b, a);
if (m <= end)
{
int a1, r1, g1, b1, a2, r2, g2, b2;
petitcom.RGBRead(startColor, r1, g1, b1, a1);
petitcom.RGBRead(endColor, r2, g2, b2, a2);
auto t1 = m - start;
auto t2 = end - start;
a = cast(ubyte)(a1 + (linear(a1, a2, cast(double)t2) * t1));
r = cast(ubyte)(r1 + (linear(r1, r2, cast(double)t2) * t1));
g = cast(ubyte)(g1 + (linear(g1, g2, cast(double)t2) * t1));
b = cast(ubyte)(b1 + (linear(b1, b2, cast(double)t2) * t1));
color = petitcom.RGB(a, r, g, b);
}
if (!a)
return;
petitcom.chRenderingDisplay(display);
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
glColor4ub(r, g, b, a);
glDisable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glVertex2i(0, 0);
glVertex2i(petitcom.currentDisplay.rect[display].w, 0);
glVertex2i(petitcom.currentDisplay.rect[display].w, petitcom.currentDisplay.rect[display].h);
glVertex2i(0, petitcom.currentDisplay.rect[display].h);
glEnd();
glDepthMask(GL_TRUE);
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
}
}