Set view boundaries between room areas to prevent bleeding screens between each other
Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
77f078693a
commit
62e2c75f00
Binary file not shown.
BIN
maps/world1.map
BIN
maps/world1.map
Binary file not shown.
@ -41,7 +41,7 @@ public enum Maps {
|
|||||||
public View getView(int x,int y) {
|
public View getView(int x,int y) {
|
||||||
int index = (y/Tile.TILE_SCREEN_COUNT_Y)*(Map.MAP_WIDTH/Tile.TILE_WIDTH)+x/Tile.TILE_SCREEN_COUNT_X;
|
int index = (y/Tile.TILE_SCREEN_COUNT_Y)*(Map.MAP_WIDTH/Tile.TILE_WIDTH)+x/Tile.TILE_SCREEN_COUNT_X;
|
||||||
if (index<0||index>=this.map.views.length) {
|
if (index<0||index>=this.map.views.length) {
|
||||||
return View.DIRECT_FOLLOW;
|
return View.FIXED;
|
||||||
} else {
|
} else {
|
||||||
return View.values()[this.map.views[index]];
|
return View.values()[this.map.views[index]];
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package sig.map;
|
package sig.map;
|
||||||
|
|
||||||
public enum View {
|
public enum View {
|
||||||
DIRECT_FOLLOW, //Follows the player directly.
|
|
||||||
LIGHT_FOLLOW,
|
LIGHT_FOLLOW,
|
||||||
// Follows the player loosely, but makes sure there's
|
// Follows the player loosely, but makes sure there's
|
||||||
// still a border between the edge of the screen and the player.
|
// still a border between the edge of the screen and the player.
|
||||||
|
@ -36,6 +36,7 @@ public class Player extends Object{
|
|||||||
|
|
||||||
final double viewBoundaryX=RabiClone.BASE_WIDTH/3;
|
final double viewBoundaryX=RabiClone.BASE_WIDTH/3;
|
||||||
final double viewBoundaryY=RabiClone.BASE_HEIGHT/3;
|
final double viewBoundaryY=RabiClone.BASE_HEIGHT/3;
|
||||||
|
View lastCameraView = View.FIXED;
|
||||||
|
|
||||||
public Player(Panel panel) {
|
public Player(Panel panel) {
|
||||||
super(panel);
|
super(panel);
|
||||||
@ -55,45 +56,85 @@ public class Player extends Object{
|
|||||||
private void handleCameraRoomMovement() {
|
private void handleCameraRoomMovement() {
|
||||||
int tileX = (int)(getX())/Tile.TILE_WIDTH;
|
int tileX = (int)(getX())/Tile.TILE_WIDTH;
|
||||||
int tileY = (int)(getY())/Tile.TILE_HEIGHT;
|
int tileY = (int)(getY())/Tile.TILE_HEIGHT;
|
||||||
|
double newX=RabiClone.level_renderer.getX(),newY=RabiClone.level_renderer.getY(); //By default we use a fixed view.
|
||||||
View currentView = RabiClone.CURRENT_MAP.getView(tileX, tileY);
|
View currentView = RabiClone.CURRENT_MAP.getView(tileX, tileY);
|
||||||
|
if (currentView!=lastCameraView) {
|
||||||
|
lastCameraView=currentView;
|
||||||
|
newX=(tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH;
|
||||||
|
newY=(tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT;
|
||||||
|
}
|
||||||
switch (currentView) {
|
switch (currentView) {
|
||||||
case DIRECT_FOLLOW:
|
|
||||||
RabiClone.level_renderer.setX(getX()-RabiClone.BASE_WIDTH/2);
|
|
||||||
RabiClone.level_renderer.setY(getY()-RabiClone.BASE_HEIGHT/2);
|
|
||||||
break;
|
|
||||||
case FIXED:
|
|
||||||
RabiClone.level_renderer.setX((tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH);
|
|
||||||
RabiClone.level_renderer.setY((tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT);
|
|
||||||
break;
|
|
||||||
case LIGHT_FOLLOW:
|
case LIGHT_FOLLOW:
|
||||||
if (getX()-RabiClone.level_renderer.getX()<viewBoundaryX) {
|
if (getX()-RabiClone.level_renderer.getX()<viewBoundaryX) {
|
||||||
RabiClone.level_renderer.setX(getX()-viewBoundaryX);
|
newX=getX()-viewBoundaryX;
|
||||||
|
int newTileX = (int)(newX)/Tile.TILE_WIDTH;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(newTileX, tileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newX=(tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH;
|
||||||
|
}
|
||||||
} else if (getX()-RabiClone.level_renderer.getX()>RabiClone.BASE_WIDTH-viewBoundaryX) {
|
} else if (getX()-RabiClone.level_renderer.getX()>RabiClone.BASE_WIDTH-viewBoundaryX) {
|
||||||
RabiClone.level_renderer.setX(getX()-(RabiClone.BASE_WIDTH-viewBoundaryX));
|
newX=getX()-(RabiClone.BASE_WIDTH-viewBoundaryX);
|
||||||
|
int newTileX = (int)(getX()+viewBoundaryX)/Tile.TILE_WIDTH;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(newTileX, tileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newX=(tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (getY()-RabiClone.level_renderer.getY()<viewBoundaryY) {
|
if (getY()-RabiClone.level_renderer.getY()<viewBoundaryY) {
|
||||||
RabiClone.level_renderer.setY(getY()-viewBoundaryY);
|
newY=getY()-viewBoundaryY;
|
||||||
|
int newTileY = (int)(getY()-viewBoundaryY)/Tile.TILE_HEIGHT;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(tileX, newTileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newY=(tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT;
|
||||||
|
}
|
||||||
} else if (getY()-RabiClone.level_renderer.getY()>RabiClone.BASE_HEIGHT-viewBoundaryY) {
|
} else if (getY()-RabiClone.level_renderer.getY()>RabiClone.BASE_HEIGHT-viewBoundaryY) {
|
||||||
RabiClone.level_renderer.setY(getY()-(RabiClone.BASE_HEIGHT-viewBoundaryY));
|
newY=getY()-(RabiClone.BASE_HEIGHT-viewBoundaryY);
|
||||||
|
int newTileY = (int)(getY()+viewBoundaryY)/Tile.TILE_HEIGHT;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(tileX, newTileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newY=(tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHT_HORIZONTAL_FOLLOW:
|
case LIGHT_HORIZONTAL_FOLLOW:
|
||||||
if (getX()-RabiClone.level_renderer.getX()<viewBoundaryX) {
|
if (getX()-RabiClone.level_renderer.getX()<viewBoundaryX) {
|
||||||
RabiClone.level_renderer.setX(getX()-viewBoundaryX);
|
newX=getX()-viewBoundaryX;
|
||||||
} else if (getX()-RabiClone.level_renderer.getX()>RabiClone.BASE_WIDTH-viewBoundaryX) {
|
int newTileX = (int)(newX)/Tile.TILE_WIDTH;
|
||||||
RabiClone.level_renderer.setX(getX()-(RabiClone.BASE_WIDTH-viewBoundaryX));
|
View newView = RabiClone.CURRENT_MAP.getView(newTileX, tileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newX=(tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH;
|
||||||
}
|
}
|
||||||
RabiClone.level_renderer.setY((tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT);
|
} else if (getX()-RabiClone.level_renderer.getX()>RabiClone.BASE_WIDTH-viewBoundaryX) {
|
||||||
|
newX=getX()-(RabiClone.BASE_WIDTH-viewBoundaryX);
|
||||||
|
int newTileX = (int)(getX()+viewBoundaryX)/Tile.TILE_WIDTH;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(newTileX, tileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newX=(tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newY=(tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT;
|
||||||
break;
|
break;
|
||||||
case LIGHT_VERTICAL_FOLLOW:
|
case LIGHT_VERTICAL_FOLLOW:
|
||||||
RabiClone.level_renderer.setX((tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH);
|
newX=(tileX/Tile.TILE_SCREEN_COUNT_X)*Map.MAP_WIDTH;
|
||||||
if (getY()-RabiClone.level_renderer.getY()<viewBoundaryY) {
|
if (getY()-RabiClone.level_renderer.getY()<viewBoundaryY) {
|
||||||
RabiClone.level_renderer.setY(getY()-viewBoundaryY);
|
newY=getY()-viewBoundaryY;
|
||||||
|
int newTileY = (int)(getY()-viewBoundaryY)/Tile.TILE_HEIGHT;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(tileX, newTileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newY=(tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT;
|
||||||
|
}
|
||||||
} else if (getY()-RabiClone.level_renderer.getY()>RabiClone.BASE_HEIGHT-viewBoundaryY) {
|
} else if (getY()-RabiClone.level_renderer.getY()>RabiClone.BASE_HEIGHT-viewBoundaryY) {
|
||||||
RabiClone.level_renderer.setY(getY()-(RabiClone.BASE_HEIGHT-viewBoundaryY));
|
newY=getY()-(RabiClone.BASE_HEIGHT-viewBoundaryY);
|
||||||
|
int newTileY = (int)(getY()+viewBoundaryY)/Tile.TILE_HEIGHT;
|
||||||
|
View newView = RabiClone.CURRENT_MAP.getView(tileX, newTileY);
|
||||||
|
if (newView!=currentView) {
|
||||||
|
newY=(tileY/Tile.TILE_SCREEN_COUNT_Y)*Map.MAP_HEIGHT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
RabiClone.level_renderer.setX(newX);
|
||||||
|
RabiClone.level_renderer.setY(newY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user