Correct all array misalignments and correct transparncy detection for platforms

Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com>
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
main
sigonasr2 3 years ago
parent eabf5d6f7d
commit dac67fda41
  1. 3
      src/sig/RabiClone.java
  2. 13
      src/sig/map/Map.java
  3. 11
      src/sig/objects/LevelRenderer.java
  4. 2
      src/sig/objects/Player.java

@ -38,6 +38,7 @@ public class RabiClone {
public static JFrame f;
public static List<Object> OBJ = new ArrayList<Object>();
public static boolean COLLISION[] = new boolean[(Tile.TILE_WIDTH*Map.MAP_WIDTH)*(Tile.TILE_HEIGHT*Map.MAP_HEIGHT)];
public static int BASE_WIDTH = 512;
public static int BASE_HEIGHT = 288;
@ -60,8 +61,6 @@ public class RabiClone {
static long lastReportedTime = System.currentTimeMillis();
public static long TIME = 0;
public static boolean COLLISION[] = new boolean[(Tile.TILE_WIDTH*Map.MAP_WIDTH)*(Tile.TILE_HEIGHT*Map.MAP_HEIGHT)];
public static void main(String[] args) {
System.setProperty("sun.java2d.transaccel", "True");
System.setProperty("sun.java2d.d3d", "True");

@ -7,6 +7,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import sig.RabiClone;
import sig.engine.Sprite;
public class Map {
//Maps contain 512x288 tiles, allowing for 16384x9216 pixels of action per map.
@ -46,12 +47,16 @@ public class Map {
switch (readingData) {
case MAP_DATA:
char tileValue = stream.readChar();
newMap.tiles[marker++]=tileValue;
int ypos=marker/Map.MAP_WIDTH;
int xpos=marker%Map.MAP_WIDTH;
for (int y=0;y<Tile.TILE_HEIGHT;y++) {
for (int x=0;x<Tile.TILE_WIDTH;x++) {
RabiClone.COLLISION[(ypos*Tile.TILE_HEIGHT)*(Map.MAP_WIDTH*Tile.TILE_WIDTH)+xpos*Tile.TILE_WIDTH]=Tile.values()[tileValue].getCollision()==CollisionType.SOLID;
newMap.tiles[marker++]=tileValue;
if (Tile.values()[tileValue].getCollision()==CollisionType.SOLID) {
for (int y=0;y<Tile.TILE_HEIGHT;y++) {
for (int x=0;x<Tile.TILE_WIDTH;x++) {
if (Sprite.TILE_SHEET.getBi_array()[(Tile.values()[tileValue].getSpriteSheetY()*Tile.TILE_HEIGHT+y)*Sprite.TILE_SHEET.getCanvasHeight()+Tile.values()[tileValue].getSpriteSheetX()*Tile.TILE_WIDTH+x]!=(byte)32) {
RabiClone.COLLISION[(ypos*Tile.TILE_HEIGHT+y)*(Map.MAP_WIDTH*Tile.TILE_WIDTH)+xpos*Tile.TILE_WIDTH+x]=true;
}
}
}
}
break;

@ -1,7 +1,5 @@
package sig.objects;
import java.util.Arrays;
import sig.RabiClone;
import sig.engine.Alpha;
import sig.engine.Font;
@ -25,7 +23,6 @@ public class LevelRenderer extends Object{
@Override
public void update(double updateMult) {
Arrays.fill(RabiClone.COLLISION, false);
}
@Override
@ -49,13 +46,12 @@ public class LevelRenderer extends Object{
Draw_Text(4,4,new String(RabiClone.player.y_velocity),Font.PROFONT_12);
Draw_Text(4,4+Font.PROFONT_12.getGlyphHeight(),new String(RabiClone.player.slide_time3),Font.PROFONT_12);
}
RenderCollisionGrid(p);
}
private void RenderCollisionGrid(byte[] p) {
for (int y=0;y<RabiClone.BASE_HEIGHT;y++) {
for (int x=0;x<RabiClone.BASE_WIDTH;x++) {
if (RabiClone.COLLISION[((int)getY()+y)*RabiClone.BASE_WIDTH+(x+(int)getX())]) {
if (RabiClone.COLLISION[((int)getY()+y)*RabiClone.BASE_WIDTH*Tile.TILE_WIDTH+((int)getX()+x)]) {
p[y*RabiClone.BASE_WIDTH+x]=(byte)PaletteColor.CRIMSON.ordinal();
}
}
@ -77,6 +73,11 @@ public class LevelRenderer extends Object{
}
}
@Override
public void drawOverlay(byte[] p) {
//RenderCollisionGrid(p);
}
protected void drawMapTileForEditorMode(int x, int y) {}
/**

@ -457,7 +457,7 @@ public class Player extends AnimatedObject implements CollisionEntity {
}
private boolean checkCollision(double x,double y) {
int index = (int)y*RabiClone.BASE_WIDTH+(int)x;
int index = (int)y*RabiClone.BASE_WIDTH*Tile.TILE_WIDTH+(int)x;
if (index>=0&&index<RabiClone.COLLISION.length) {
return RabiClone.COLLISION[index];
} else {

Loading…
Cancel
Save