Setup framework for screen door transparency
Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
2c9357ab6a
commit
b2dda88107
Binary file not shown.
@ -164,25 +164,16 @@ public class DrawLoop {
|
|||||||
boolean horizontal = transform==Transform.HORIZONTAL||transform==Transform.HORIZ_VERTIC;
|
boolean horizontal = transform==Transform.HORIZONTAL||transform==Transform.HORIZ_VERTIC;
|
||||||
boolean vertical = transform==Transform.VERTICAL||transform==Transform.HORIZ_VERTIC;
|
boolean vertical = transform==Transform.VERTICAL||transform==Transform.HORIZ_VERTIC;
|
||||||
byte[] p = panel.pixel;
|
byte[] p = panel.pixel;
|
||||||
if (transform==Transform.NONE&&col==PaletteColor.NORMAL) {
|
int transparentTotalCount=alpha.getB();
|
||||||
|
int transparentRunCount=0;
|
||||||
for(int X=(int)xOffset;X<(int)(w+xOffset);X++){
|
for(int X=(int)xOffset;X<(int)(w+xOffset);X++){
|
||||||
for(int Y=(int)yOffset;Y<(int)(h+yOffset);Y++){
|
for(int Y=(int)yOffset;Y<(int)(h+yOffset);Y++){
|
||||||
if (X+x-xOffset<0||Y+y-yOffset<0||X-xOffset+x>=RabiClone.BASE_WIDTH||Y-yOffset+y>=RabiClone.BASE_HEIGHT) {
|
if (alpha!=Alpha.ALPHA0) {
|
||||||
|
if (transparentRunCount++==transparentTotalCount) {
|
||||||
|
transparentRunCount=0;
|
||||||
continue;
|
continue;
|
||||||
} else {
|
|
||||||
int index = ((int)y)*RabiClone.BASE_WIDTH+(int)x;
|
|
||||||
if (sprite.getBi_array()[Y*sprite.getCanvasWidth()+X]==32||index<0||index>=p.length) {
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
Draw(p,index,sprite.getBi_array()[Y*sprite.getCanvasWidth()+X],alpha);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if (col==PaletteColor.NORMAL) {
|
|
||||||
for(int X=(int)xOffset;X<(int)(w+xOffset);X++){
|
|
||||||
for(int Y=(int)yOffset;Y<(int)(h+yOffset);Y++){
|
|
||||||
if (X+x-xOffset<0||Y+y-yOffset<0||X-xOffset+x>=RabiClone.BASE_WIDTH||Y-yOffset+y>=RabiClone.BASE_HEIGHT) {
|
if (X+x-xOffset<0||Y+y-yOffset<0||X-xOffset+x>=RabiClone.BASE_WIDTH||Y-yOffset+y>=RabiClone.BASE_HEIGHT) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
@ -195,34 +186,11 @@ public class DrawLoop {
|
|||||||
sprite.getWidth()-(X-(int)xOffset):
|
sprite.getWidth()-(X-(int)xOffset):
|
||||||
(X-(int)xOffset))
|
(X-(int)xOffset))
|
||||||
+(int)x;
|
+(int)x;
|
||||||
|
|
||||||
if (sprite.getBi_array()[Y*sprite.getCanvasWidth()+X]==32||index<0||index>=p.length) {
|
if (sprite.getBi_array()[Y*sprite.getCanvasWidth()+X]==32||index<0||index>=p.length) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
Draw(p,index,sprite.getBi_array()[Y*sprite.getCanvasWidth()+X],alpha);
|
Draw(p,index,(col==PaletteColor.NORMAL)?sprite.getBi_array()[Y*sprite.getCanvasWidth()+X]:(byte)col.ordinal(),alpha);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(int X=(int)xOffset;X<(int)(w+xOffset);X++){
|
|
||||||
for(int Y=(int)yOffset;Y<(int)(h+yOffset);Y++){
|
|
||||||
if (X+x-xOffset<0||Y+y-yOffset<0||X-xOffset+x>=RabiClone.BASE_WIDTH||Y-yOffset+y>=RabiClone.BASE_HEIGHT) {
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
int index =
|
|
||||||
((vertical?
|
|
||||||
sprite.getHeight()-(Y-(int)yOffset):
|
|
||||||
(Y-(int)yOffset))
|
|
||||||
+(int)y)*RabiClone.BASE_WIDTH+
|
|
||||||
(horizontal?
|
|
||||||
sprite.getWidth()-(X-(int)xOffset):
|
|
||||||
(X-(int)xOffset))
|
|
||||||
+(int)x;
|
|
||||||
if (sprite.getBi_array()[Y*sprite.getCanvasWidth()+X]==32||index<0||index>=p.length) {
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
Draw(p,index,(byte)col.ordinal(),alpha);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,30 @@
|
|||||||
package sig.engine;
|
package sig.engine;
|
||||||
|
|
||||||
public enum Alpha {
|
public enum Alpha {
|
||||||
ALPHA0,
|
ALPHA0(1,1),
|
||||||
ALPHA32,
|
ALPHA32(7,8), //7/8
|
||||||
ALPHA64,
|
ALPHA64(3,4), //3/4
|
||||||
ALPHA96,
|
ALPHA96(5,8), //5/8
|
||||||
ALPHA128,
|
ALPHA128(1,2), //1/2
|
||||||
ALPHA160,
|
ALPHA160(3,8), //3/8
|
||||||
ALPHA192,
|
ALPHA192(1,4), //1/4
|
||||||
ALPHA224,
|
ALPHA224(1,8), //1/8
|
||||||
ALPHA256;
|
ALPHA256(0,8); //0/8
|
||||||
|
|
||||||
|
int A,B;
|
||||||
|
|
||||||
|
/** For every B pixels, A are visible.*/
|
||||||
|
Alpha(int A,int B) {
|
||||||
|
this.A=A;
|
||||||
|
this.B=B;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getA() {
|
||||||
|
return A;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getB() {
|
||||||
|
return B;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user