Java 类com.badlogic.gdx.math.GridPoint2 实例源码
项目:Mindustry
文件:Generator.java
protected Tile laserTarget(Tile tile, int rotation){
rotation = Mathf.mod(rotation, 4);
GridPoint2 point = Geometry.getD4Points()[rotation];
int i = 0;
for(i = 1; i < laserRange; i++){
Tile other = Vars.world.tile(tile.x + i * point.x, tile.y + i * point.y);
if(other != null && other.block() instanceof PowerAcceptor){
Tile linked = other.getLinked();
if(linked == null || linked instanceof PowerAcceptor){
return other;
}
}
}
return null;
}
项目:AsciiTerminal
文件:AsciiTetris.java
private boolean isFreeTetriminoPosition(GridPoint2 position, int direction) {
boolean turn = true;
for(GridPoint2 p : currentTetrimino.position[direction]) {
if(p.x + position.x >= 0 && p.x + position.x < PLAYFIELD_WIDTH && p.y + position.y >= 0 && p.y + position.y < PLAYFIELD_HEIGHT) {
Color color = cells[p.x + position.x][p.y + position.y];
if(color != null) {
turn = false;
break;
}
}
else {
turn = false;
break;
}
}
return turn;
}
项目:DungeonCrawler
文件:PlayerInputHandler.java
boolean checkDpadDown(int keyCode){
GridPoint2 position = player.getPosition();
if(keyCode == Input.Keys.W || keyCode == Input.Keys.UP){
position.y++;
}
else if(keyCode == Input.Keys.S || keyCode == Input.Keys.DOWN){
position.y--;
}
else if(keyCode == Input.Keys.D || keyCode == Input.Keys.RIGHT){
position.x++;
}
else if(keyCode == Input.Keys.A || keyCode == Input.Keys.LEFT){
position.x--;
}
if (position.equals(player.getPosition())){
return false;
} else {
player.moveTo(position);
return true;
}
}
项目:DungeonCrawler
文件:LineOfSight.java
private static GridPoint2 getNextPointTowardsEndPoint(GridPoint2 startPoint, GridPoint2 endPoint){
int x = startPoint.x;
int y = startPoint.y;
if (startPoint.x < endPoint.x){
x++;
} else if(startPoint.x > endPoint.x){
x--;
}
if (startPoint.y < endPoint.y){
y++;
} else if(startPoint.y > endPoint.y){
y--;
}
return new GridPoint2(x, y);
}
项目:DungeonCrawler
文件:PlainRoom.java
void placeBoundingWalls(Dungeon dungeon, int x, int y, int width, int height){
for(int i = x+1; i < x + width-1; i++){
for(int j = y+1; j < y + height-1; j++) {
dungeon.setTile(new FloorDungeonTile(new GridPoint2(i, j), dungeon));
}
}
for (int j = x; j < width+x; j++) {
dungeon.setTile(new WallDungeonTile(new GridPoint2(j, y), dungeon, false));
dungeon.setTile(new WallDungeonTile(new GridPoint2(j, height + y - 1), dungeon, false));
}
for (int i = y; i < height+y; i++) {
dungeon.setTile(new WallDungeonTile(new GridPoint2(x, i), dungeon, false));
dungeon.setTile(new WallDungeonTile(new GridPoint2(x + width - 1, i), dungeon, false));
}
}
项目:DungeonCrawler
文件:Dungeon.java
public Dungeon(int mapWidth, int mapHeight){
this.mapWidth = mapWidth;
this.mapHeight = mapHeight;
renderer = new DungeonRenderer(this);
map = new DungeonTile[mapWidth+2][mapHeight+2];
for(int i = 0; i < mapWidth+2; i++){
for (int j = 0; j < mapHeight+2; j++){
map[i][j] = new EmptyDungeonTile(new GridPoint2(i-1, j-1), this);
}
}
dungeonRooms = new Array<>();
monsters = new Array<>();
level = 1;
}
项目:DungeonCrawler
文件:Dungeon.java
Array<Array<AstarNode>> getAstarGraph(){
Array<Array<AstarNode>> astarGraph = new Array<>();
for(int i = 0; i < getMapWidth(); i++){
astarGraph.add(new Array<>());
}
for (int i = 0; i < getMapWidth(); i++){
for(int j = 0; j < getMapHeight(); j++){
AstarNode node = new AstarNode();
node.passingCost = getDungeonTile(new GridPoint2(i, j)).getPassingCost();
node.x = i;
node.y = j;
astarGraph.get(i).add(node);
}
}
return astarGraph;
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private void placeStartAndEndStairs(Dungeon dungeon) {
GridPoint2 stairsUpPos;
GridPoint2 stairsDownPos;
Room startRoom = dungeon.startRoom;
Room endRoom = DungeonUtils.getRandomNotStartDungeonRoom(dungeon);
stairsUpPos = startRoom.getRandomFloorTile();
stairsDownPos = endRoom.getRandomFloorTile();
StairsUpDungeonTile stairsUpDungeonTile = new StairsUpDungeonTile(stairsUpPos, dungeon);
StairsDownDungeonTile stairsDownDungeonTile = new StairsDownDungeonTile(stairsDownPos, dungeon);
dungeon.setTile(stairsUpDungeonTile);
dungeon.setTile(stairsDownDungeonTile);
dungeon.stairsDownDungeonTile = stairsDownDungeonTile;
dungeon.stairsUpDungeonTile = stairsUpDungeonTile;
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private Array<Array<AstarNode>> getDungeonAsAstarNodeGraph(Dungeon dungeon) {
Array<Array<AstarNode>> graph = new Array<>();
for(int i = 0; i < dungeon.getMapWidth(); i++){
graph.add(new Array<>());
}
for (int i = 0; i < dungeon.getMapWidth(); i++){
for(int j = 0; j < dungeon.getMapHeight(); j++){
AstarNode node = new AstarNode();
node.passingCost = dungeon.getDungeonTile(new GridPoint2(i, j)).getCorridorPlacingCost();
node.x = i;
node.y = j;
graph.get(i).add(node);
}
}
return graph;
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private void addCorridorTile(Dungeon dungeon, GridPoint2 pos, Direction direction){
DungeonTile tile = dungeon.getDungeonTile(pos);
// Set wall tiles this corridor passes through to doors
if(tile instanceof WallDungeonTile){
if (direction == Direction.VERTICAL ){
// Place a perpendicular door across the corridor
dungeon.setTile(new DoorDungeonTile(pos, dungeon, true));
} else {
dungeon.setTile(new DoorDungeonTile(pos, dungeon, false));
}
}
// Otherwise set the tile to a floor tiles with walls either side
else if(tile instanceof EmptyDungeonTile || tile instanceof CorridorWallDungeonTile) {
dungeon.setTile(new CorridorFloorDungeonTile(pos, dungeon));
if(direction == Direction.VERTICAL){
addCorridorWall(dungeon, new GridPoint2(pos.x+1, pos.y));
addCorridorWall(dungeon, new GridPoint2(pos.x-1, pos.y));
} else {
addCorridorWall(dungeon, new GridPoint2(pos.x, pos.y+1));
addCorridorWall(dungeon, new GridPoint2(pos.x, pos.y-1));
}
}
}
项目:DungeonCrawler
文件:GenericFindPlayerBehavior.java
private boolean getNewPath(){
Dungeon dungeon = Dungeon.getActiveDungeon();
int tries = 0;
GridPoint2 potentialTarget = DungeonUtils.getRandomTileInAnyRoom(dungeon);
Array<AstarNode> potentialPath = DungeonUtils.generateNewPathBetween(character.getPosition(), potentialTarget, character.getDungeon());
//Loop trying to find a path to a random room. Give up after 3 tries.
//TODO build the fScore limit into the algo to avoid unnecessary path generation
float pathCostThreshold = 50000;
while (potentialPath.size == 0 || potentialPath.get(0).fScore > pathCostThreshold){
potentialTarget = DungeonUtils.getRandomTileInAnyRoom(dungeon);
potentialPath = DungeonUtils.generateNewPathBetween(character.getPosition(), potentialTarget, character.getDungeon());
tries++;
if (tries >= 3){
return false;
}
}
pathTarget.set(potentialTarget);
path = potentialPath;
return true;
}
项目:DungeonCrawler
文件:PlayerInputHandler.java
boolean checkDpadDown(int keyCode){
GridPoint2 position = player.getPosition();
if(keyCode == Input.Keys.W || keyCode == Input.Keys.UP){
position.y++;
}
else if(keyCode == Input.Keys.S || keyCode == Input.Keys.DOWN){
position.y--;
}
else if(keyCode == Input.Keys.D || keyCode == Input.Keys.RIGHT){
position.x++;
}
else if(keyCode == Input.Keys.A || keyCode == Input.Keys.LEFT){
position.x--;
}
if (position.equals(player.getPosition())){
return false;
} else {
player.moveTo(position);
return true;
}
}
项目:DungeonCrawler
文件:LineOfSight.java
private static GridPoint2 getNextPointTowardsEndPoint(GridPoint2 startPoint, GridPoint2 endPoint){
int x = startPoint.x;
int y = startPoint.y;
if (startPoint.x < endPoint.x){
x++;
} else if(startPoint.x > endPoint.x){
x--;
}
if (startPoint.y < endPoint.y){
y++;
} else if(startPoint.y > endPoint.y){
y--;
}
return new GridPoint2(x, y);
}
项目:DungeonCrawler
文件:PlainRoom.java
void placeBoundingWalls(Dungeon dungeon, int x, int y, int width, int height){
for(int i = x+1; i < x + width-1; i++){
for(int j = y+1; j < y + height-1; j++) {
dungeon.setTile(new FloorDungeonTile(new GridPoint2(i, j), dungeon));
}
}
for (int j = x; j < width+x; j++) {
dungeon.setTile(new WallDungeonTile(new GridPoint2(j, y), dungeon, false));
dungeon.setTile(new WallDungeonTile(new GridPoint2(j, height + y - 1), dungeon, false));
}
for (int i = y; i < height+y; i++) {
dungeon.setTile(new WallDungeonTile(new GridPoint2(x, i), dungeon, false));
dungeon.setTile(new WallDungeonTile(new GridPoint2(x + width - 1, i), dungeon, false));
}
}
项目:DungeonCrawler
文件:Dungeon.java
public Dungeon(int mapWidth, int mapHeight){
this.mapWidth = mapWidth;
this.mapHeight = mapHeight;
renderer = new DungeonRenderer(this);
map = new DungeonTile[mapWidth+2][mapHeight+2];
for(int i = 0; i < mapWidth+2; i++){
for (int j = 0; j < mapHeight+2; j++){
map[i][j] = new EmptyDungeonTile(new GridPoint2(i-1, j-1), this);
}
}
dungeonRooms = new Array<>();
monsters = new Array<>();
level = 1;
}
项目:DungeonCrawler
文件:Dungeon.java
Array<Array<AstarNode>> getAstarGraph(){
Array<Array<AstarNode>> astarGraph = new Array<>();
for(int i = 0; i < getMapWidth(); i++){
astarGraph.add(new Array<>());
}
for (int i = 0; i < getMapWidth(); i++){
for(int j = 0; j < getMapHeight(); j++){
AstarNode node = new AstarNode();
node.passingCost = getDungeonTile(new GridPoint2(i, j)).getPassingCost();
node.x = i;
node.y = j;
astarGraph.get(i).add(node);
}
}
return astarGraph;
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private void placeStartAndEndStairs(Dungeon dungeon) {
GridPoint2 stairsUpPos;
GridPoint2 stairsDownPos;
Room startRoom = dungeon.startRoom;
Room endRoom = DungeonUtils.getRandomNotStartDungeonRoom(dungeon);
stairsUpPos = startRoom.getRandomFloorTile();
stairsDownPos = endRoom.getRandomFloorTile();
StairsUpDungeonTile stairsUpDungeonTile = new StairsUpDungeonTile(stairsUpPos, dungeon);
StairsDownDungeonTile stairsDownDungeonTile = new StairsDownDungeonTile(stairsDownPos, dungeon);
dungeon.setTile(stairsUpDungeonTile);
dungeon.setTile(stairsDownDungeonTile);
dungeon.stairsDownDungeonTile = stairsDownDungeonTile;
dungeon.stairsUpDungeonTile = stairsUpDungeonTile;
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private Array<Array<AstarNode>> getDungeonAsAstarNodeGraph(Dungeon dungeon) {
Array<Array<AstarNode>> graph = new Array<>();
for(int i = 0; i < dungeon.getMapWidth(); i++){
graph.add(new Array<>());
}
for (int i = 0; i < dungeon.getMapWidth(); i++){
for(int j = 0; j < dungeon.getMapHeight(); j++){
AstarNode node = new AstarNode();
node.passingCost = dungeon.getDungeonTile(new GridPoint2(i, j)).getCorridorPlacingCost();
node.x = i;
node.y = j;
graph.get(i).add(node);
}
}
return graph;
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private void addCorridorTile(Dungeon dungeon, GridPoint2 pos, Direction direction){
DungeonTile tile = dungeon.getDungeonTile(pos);
// Set wall tiles this corridor passes through to doors
if(tile instanceof WallDungeonTile){
if (direction == Direction.VERTICAL ){
// Place a perpendicular door across the corridor
dungeon.setTile(new DoorDungeonTile(pos, dungeon, true));
} else {
dungeon.setTile(new DoorDungeonTile(pos, dungeon, false));
}
}
// Otherwise set the tile to a floor tiles with walls either side
else if(tile instanceof EmptyDungeonTile || tile instanceof CorridorWallDungeonTile) {
dungeon.setTile(new CorridorFloorDungeonTile(pos, dungeon));
if(direction == Direction.VERTICAL){
addCorridorWall(dungeon, new GridPoint2(pos.x+1, pos.y));
addCorridorWall(dungeon, new GridPoint2(pos.x-1, pos.y));
} else {
addCorridorWall(dungeon, new GridPoint2(pos.x, pos.y+1));
addCorridorWall(dungeon, new GridPoint2(pos.x, pos.y-1));
}
}
}
项目:DungeonCrawler
文件:GenericFindPlayerBehavior.java
private boolean getNewPath(){
Dungeon dungeon = Dungeon.getActiveDungeon();
int tries = 0;
GridPoint2 potentialTarget = DungeonUtils.getRandomTileInAnyRoom(dungeon);
Array<AstarNode> potentialPath = DungeonUtils.generateNewPathBetween(character.getPosition(), potentialTarget, character.getDungeon());
//Loop trying to find a path to a random room. Give up after 3 tries.
//TODO build the fScore limit into the algo to avoid unnecessary path generation
float pathCostThreshold = 50000;
while (potentialPath.size == 0 || potentialPath.get(0).fScore > pathCostThreshold){
potentialTarget = DungeonUtils.getRandomTileInAnyRoom(dungeon);
potentialPath = DungeonUtils.generateNewPathBetween(character.getPosition(), potentialTarget, character.getDungeon());
tries++;
if (tries >= 3){
return false;
}
}
pathTarget.set(potentialTarget);
path = potentialPath;
return true;
}
项目:Mindustry
文件:MapView.java
private GridPoint2 project(float x, float y){
float ratio = 1f / ((float)editor.pixmap().getWidth() / editor.pixmap().getHeight());
float size = Math.min(width, height);
float sclwidth = size * zoom;
float sclheight = size * zoom * ratio;
x = (x - getWidth()/2 + sclwidth/2 - offsetx*zoom) / sclwidth * editor.texture().getWidth();
y = (y - getHeight()/2 + sclheight/2 - offsety*zoom) / sclheight * editor.texture().getHeight();
return Tmp.g1.set((int)x, editor.texture().getHeight() - 1 - (int)y);
}
项目:Mindustry
文件:World.java
/**
* Input is in block coordinates, not world coordinates.
* @return null if no collisions found, block position otherwise.
*/
public GridPoint2 raycast(int x0f, int y0f, int x1, int y1){
int x0 = x0f;
int y0 = y0f;
int dx = Math.abs(x1 - x0);
int dy = Math.abs(y1 - y0);
int sx = x0 < x1 ? 1 : -1;
int sy = y0 < y1 ? 1 : -1;
int err = dx - dy;
int e2;
while(true){
if(!passable(x0, y0)){
return Tmp.g1.set(x0, y0);
}
if(x0 == x1 && y0 == y1) break;
e2 = 2 * err;
if(e2 > -dy){
err = err - dy;
x0 = x0 + sx;
}
if(e2 < dx){
err = err + dx;
y0 = y0 + sy;
}
}
return null;
}
项目:gdx-cclibs
文件:GraphHeaderTest.java
public void testRemovedPixmapField(){
GraphHeader.currentReadWriteVersion = 0;
TestClass object = new TestClass();
object.someInt = randInt();
object.someFloat = randFloat();
object.point = new GridPoint2(randInt(), randInt());
object.color = new Color(Color.CYAN);
object.smallTestClass = new SmallTestClass();
object.smallTestClass.someValue = randInt();
Pixmap pixmap = new Pixmap(20, 24, Pixmap.Format.RGBA8888);
for (int i = 0; i < pixmap.getWidth(); i++) {
for (int j = 0; j < pixmap.getHeight(); j++) {
pixmap.drawPixel(i, j, randInt());
}
}
object.smallTestClass.somePixmap = pixmap;
kryo.register(SmallTestClass.class);
kryo.register(TestClass.class);
GraphHeader<TestClass> graphHeader = new GraphHeader<TestClass>();
graphHeader.data = object;
GraphHeader.currentReadWriteVersion = 0;
byte[] written = write(graphHeader);
GraphHeader.currentReadWriteVersion = 1;
GraphHeader<TestClass> returned = read(written, GraphHeader.class);
assertTrue(equals(graphHeader, returned));
assertTrue(returned.data.smallTestClass.somePixmap == null);
}
项目:Quilly-s-Castle
文件:GraphicsComponent.java
@Override
public void receiveMessage(MessageType type, Object... args) {
switch (type) {
case LOAD_ANIMATIONS:
EntityConfig config = (EntityConfig) args[0];
Array<AnimationConfig> animationConfigs = config.getAnimationConfig();
int animationWidth = config.getAnimationWidth();
int animationHeight = config.getAnimationHeight();
String charAtlasID = config.getCharAtlasID();
for (AnimationConfig animationConfig : animationConfigs) {
Array<GridPoint2> gridPoints = animationConfig.getGridPoints();
AnimationType animationType = animationConfig.getAnimationType();
float frameDuration = animationConfig.getFrameDuration();
animations.put(animationType, loadAnimation(charAtlasID, gridPoints, animationWidth, animationHeight, frameDuration));
}
break;
case SET_SIZE:
origin.set((Float) args[0] * 0.5f, (Float) args[1] * 0.5f);
break;
case SET_STATE:
this.state = (State) args[0];
updateCurrentAnimation();
break;
case SET_DIRECTION:
this.direction = (Direction) args[0];
updateCurrentAnimation();
break;
default:
break;
}
}
项目:Quilly-s-Castle
文件:GraphicsComponent.java
private Animation<TextureRegion> loadAnimation(String charAtlasID, Array<GridPoint2> points, int tileWidth, int tileHeight, float frameDuration) {
AtlasRegion charTextureRegion = Utils.CHARACTERS_TEXTURE_ATLAS.findRegion(charAtlasID);
TextureRegion[][] frames = charTextureRegion.split(tileWidth, tileHeight);
Array<TextureRegion> animationFrames = new Array<TextureRegion>(points.size);
for (GridPoint2 point : points) {
animationFrames.add(frames[point.y][point.x]);
}
return new Animation<TextureRegion>(frameDuration, animationFrames, Animation.PlayMode.LOOP);
}
项目:AsciiTerminal
文件:AsciiTetris.java
private void newTetrimino() {
Tetrimino[] tetriminos = Tetrimino.values();
boolean change;
do {
if(nextTetrimino != null) {
currentTetrimino = nextTetrimino;
nextTetrimino = tetriminos[rand.nextInt(tetriminos.length)];
}
else {
nextTetrimino = tetriminos[rand.nextInt(tetriminos.length)];
currentTetrimino = tetriminos[rand.nextInt(tetriminos.length)];
}
if(nextTetrimino == currentTetrimino && countSameTetrimino < 1) {
countSameTetrimino++;
}
if(nextTetrimino == currentTetrimino && countSameTetrimino >= 1) {
change = true;
}
else {
countSameTetrimino = 0;
change = false;
}
}while(change);
currentDirection = 0;
GridPoint2 startPosition = currentTetrimino.startPosition.cpy();
for(int i = currentTetrimino.startPosition.y; i >= 0; i--) {
startPosition.y = i;
if(isFreeTetriminoPosition(startPosition, currentDirection)) {
currentPosition = startPosition;
return;
}
}
}
项目:DungeonCrawler
文件:MapScreen.java
@Override
public void show() {
int tileSize = ResourceLoader.getTileSize();
Gdx.input.setInputProcessor(inputMultiplexer);
GridPoint2 playerPos = PlayerCharacterEntity.getInstance().getPosition();
camera.position.x = playerPos.x * tileSize;
camera.position.y = playerPos.y * tileSize;
}
项目:DungeonCrawler
文件:BasicMonsterCharacterEntity.java
@Override
public boolean moveTo(GridPoint2 position) {
if(Dungeon.getActiveDungeon().isTilePassable(position)){
this.position.set(position);
return true;
} else {
return false;
}
}
项目:DungeonCrawler
文件:MonsterRenderer.java
@Override
public void render(float delta, SpriteBatch batch) {
if (characterEntity.isAlive()){
GridPoint2 pos = characterEntity.getPosition();
if (Dungeon.getActiveDungeon().getDungeonTile(pos).isVisible()){
float visibility = Dungeon.getActiveDungeon().getDungeonTile(characterEntity.getPosition()).getVisibilityLevel();
batch.setColor(visibility, visibility, visibility, 1);
batch.draw(characterEntity.getTexture(), characterEntity.getPosition().x * tileSize, characterEntity.getPosition().y * tileSize);
healthBarRenderer.render(delta, batch);
}
batch.setColor(Color.WHITE);
}
}
项目:DungeonCrawler
文件:LineOfSight.java
public static boolean checkLineOfSight(GridPoint2 startPoint, GridPoint2 endPoint, Dungeon dungeon){
// Moves the start point towards the end point to avoid points being obstructed by themselves
startPoint = getNextPointTowardsEndPoint(startPoint, endPoint);
Array<GridPoint2> cellsOnBresenhamLine = runLine(endPoint, startPoint);
for (int i = 0; i < cellsOnBresenhamLine.size; i++) {
GridPoint2 point = cellsOnBresenhamLine.get(i);
if (dungeon.getDungeonTile(point).isVisionObstructing() && !point.equals(endPoint)){
return false;
}
}
return true;
}
项目:DungeonCrawler
文件:LineOfSight.java
private static Array<GridPoint2> runLine (int startX, int startY, int endX, int endY) {
Array<GridPoint2> line = new Array<>();
// The amount the line has to cover in the x and y axes
int deltaX = endX - startX;
int deltaY = endY - startY;
// the delta error would be infinite on a vertical line and therefore cannot be calculated in the same way
if (deltaX == 0){
return runVertLine(startX, startY, endY);
}
// The amount the points have deviated from the line
float error = 0;
// The amount the points deviate from the line for each movement along the x axis
float deltaError = Math.abs ((float)deltaY / (float)deltaX);
int y = startY;
// plot pixels along the x axis occasionally moving in the y axis once we have deviated too far from the real line
for (int x = startX; x != endX; x+=getSignNumber(deltaX)){
line.add(new GridPoint2(x, y));
error += deltaError;
// While we have deviated more than 1/2 a pixel from the real line, we need to correct for it
// by moving in the y axis
while (error >= 0.5f) {
y += getSignNumber(endY - startY);
error--;
line.add(new GridPoint2(x, y));
}
}
// Due to not knowing which way the loop is reaching it's condition from (x-- or x++)
// the last point has to be added here
line.add(new GridPoint2(endX, endY));
return line;
}
项目:DungeonCrawler
文件:LineOfSight.java
private static Array<GridPoint2> runVertLine(int x, int startY, int endY) {
Array<GridPoint2> line = new Array<>();
// The direction the line is being drawn in (1 for up the Y axis and -1 for down the Y axis)
int deltaYSign = getSignNumber(endY-startY);
for (int y = startY; y != endY; y+=deltaYSign){
line.add(new GridPoint2(x, y));
}
line.add(new GridPoint2(x, endY));
return line;
}
项目:DungeonCrawler
文件:DungeonUtils.java
public static GridPoint2 getRandomNonVisibleTilePosInAnyRoom(Dungeon dungeon){
int roomIndex = MathUtils.random(dungeon.getRoomCount()-1);
GridPoint2 tilePos = dungeon.getDungeonRoom(roomIndex).getRandomFloorTile();
while(dungeon.getDungeonTile(tilePos).isVisible() || dungeon.getDungeonTile(tilePos).isVisionObstructing()){
roomIndex = MathUtils.random(dungeon.getRoomCount()-1);
tilePos = dungeon.getDungeonRoom(roomIndex).getRandomFloorTile();
}
return tilePos;
}
项目:DungeonCrawler
文件:DungeonTile.java
public float getVisibilityLevel() {
if(isVisible()){
tileIsDiscovered = true;
GridPoint2 playerGridPoint = PlayerCharacterEntity.getInstance().getPosition();
float distance = (float)Point.distance(playerGridPoint.x, playerGridPoint.y, pos.x, pos.y);
return 1 - distance/(VIEW_DIST*2);
} else {
return getHasBeenVisibleVisibility();
}
}
项目:DungeonCrawler
文件:DungeonTile.java
public boolean isVisible(){
GridPoint2 playerGridPoint = PlayerCharacterEntity.getInstance().getPosition();
float distance = (float)Point.distance(playerGridPoint.x, playerGridPoint.y, pos.x, pos.y);
if (distance > VIEW_DIST) {
return false;
} else
return distance < 1.5f || isLOSBlocked();
}
项目:DungeonCrawler
文件:Room.java
public GridPoint2 getRandomFloorTile() {
GridPoint2 pos = new GridPoint2();
pos.y = MathUtils.random(getY()+1, getY() + getHeight()-2);
pos.x = MathUtils.random(getX()+1, getX() + getWidth()-2);
if (dungeon.getDungeonTile(pos) instanceof FloorDungeonTile){
return pos;
} else {
return getRandomFloorTile();
}
}
项目:DungeonCrawler
文件:PrisonRoom.java
@Override
public void generate() {
super.generate();
int yOffset = (getHeight()/2) + 1;
for (int i = 0; i + 4 <= getWidth(); i += 4){
placeCell(dungeon, getX() + i, getY(), true);
placeCell(dungeon, getX() + i, getY()+yOffset, false);
}
dungeon.setTile(new WallDungeonTile(new GridPoint2(getX(), getY()+getHeight()/2), dungeon, true));
dungeon.setTile(new WallDungeonTile(new GridPoint2(getX()+getWidth()-1, getY()+getHeight()/2), dungeon, true));
}
项目:DungeonCrawler
文件:PrisonRoom.java
private void placeCell(Dungeon dungeon, int x, int y, boolean southFacing){
placeBoundingWalls(dungeon, x, y, 5, 5);
int doorY = southFacing ? y + 4 : y;
dungeon.setTile(new DoorDungeonTile(new GridPoint2(x+2, doorY), dungeon, true));
if(MathUtils.randomBoolean(0.2f)){
dungeon.setTile(new ChestDungeonTile(new GridPoint2(x+2, y+2), dungeon));
}
}
项目:DungeonCrawler
文件:DoorDungeonTile.java
public DoorDungeonTile(GridPoint2 pos, Dungeon dungeon, boolean isHorizontal) {
super(pos, dungeon);
if(isHorizontal){
texture = ResourceLoader.getResTextureRegion("door-horizontal");
}else{
texture = ResourceLoader.getResTextureRegion("door-vertical");
}
}
项目:DungeonCrawler
文件:DungeonMapGenerator.java
private boolean roomFits(Dungeon dungeon, Room room){
int x = room.getX();
int y = room.getY();
int width = room.getWidth();
int height = room.getHeight();
for(int i = x; i < x + width; i++){
for(int j = y; j < y + height; j++){
if(!dungeon.isTileEmpty(new GridPoint2(i, j))){
return false;
}
}
}
return true;
}