v0.6.1: levels are now more densely packed on average
This commit is contained in:
parent
0cdd99e389
commit
0e033720c7
|
@ -21,7 +21,6 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
|
@ -53,10 +52,8 @@ import com.watabou.utils.Bundle;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class RegularLevel extends Level {
|
||||
|
||||
|
@ -126,7 +123,7 @@ public abstract class RegularLevel extends Level {
|
|||
protected Builder builder(){
|
||||
return new LoopBuilder()
|
||||
.setLoopShape( 2 ,
|
||||
Random.Float(0.55f, 0.85f),
|
||||
Random.Float(0.4f, 0.7f),
|
||||
Random.Float(0f, 0.5f));
|
||||
}
|
||||
|
||||
|
|
|
@ -146,10 +146,14 @@ public abstract class Builder {
|
|||
protected static float angleBetweenRooms( Room from, Room to){
|
||||
PointF fromCenter = new PointF((from.left + from.right)/2f, (from.top + from.bottom)/2f);
|
||||
PointF toCenter = new PointF((to.left + to.right)/2f, (to.top + to.bottom)/2f);
|
||||
double m = (toCenter.y - fromCenter.y)/(toCenter.x - fromCenter.x);
|
||||
return angleBetweenPoints(fromCenter, toCenter);
|
||||
}
|
||||
|
||||
protected static float angleBetweenPoints( PointF from, PointF to ){
|
||||
double m = (to.y - from.y)/(to.x - from.x);
|
||||
|
||||
float angle = (float)(A*(Math.atan(m) + Math.PI/2.0));
|
||||
if (fromCenter.x > toCenter.x) angle -= 180f;
|
||||
if (from.x > to.x) angle -= 180f;
|
||||
return angle;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.builders;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom;
|
||||
import com.watabou.utils.PointF;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -66,6 +67,8 @@ public class LoopBuilder extends RegularBuilder {
|
|||
+ 0.25 + 0.5*Math.floor(2*x);
|
||||
}
|
||||
|
||||
private PointF loopCenter;
|
||||
|
||||
@Override
|
||||
public ArrayList<Room> build(ArrayList<Room> rooms) {
|
||||
|
||||
|
@ -127,6 +130,14 @@ public class LoopBuilder extends RegularBuilder {
|
|||
prev = c;
|
||||
}
|
||||
|
||||
loopCenter = new PointF();
|
||||
for (Room r : loop){
|
||||
loopCenter.x += (r.left + r.right)/2f;
|
||||
loopCenter.y += (r.top + r.bottom)/2f;
|
||||
}
|
||||
loopCenter.x /= loop.size();
|
||||
loopCenter.y /= loop.size();
|
||||
|
||||
if (shop != null) {
|
||||
float angle;
|
||||
int tries = 10;
|
||||
|
@ -158,4 +169,24 @@ public class LoopBuilder extends RegularBuilder {
|
|||
|
||||
return rooms;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float randomBranchAngle( Room r ) {
|
||||
if (loopCenter == null)
|
||||
return super.randomBranchAngle( r );
|
||||
else {
|
||||
//generate four angles randomly and return the one which points closer to the center
|
||||
float toCenter = angleBetweenPoints( new PointF((r.left + r.right)/2f, (r.top + r.bottom)/2f), loopCenter);
|
||||
if (toCenter < 0) toCenter += 360f;
|
||||
|
||||
float currAngle = Random.Float(360f);
|
||||
for( int i = 0; i < 4; i ++){
|
||||
float newAngle = Random.Float(360f);
|
||||
if (Math.abs(toCenter - newAngle) < Math.abs(toCenter - currAngle)){
|
||||
currAngle = newAngle;
|
||||
}
|
||||
}
|
||||
return currAngle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ public abstract class RegularBuilder extends Builder {
|
|||
}
|
||||
|
||||
//path length is the percentage of pathable rooms that are on
|
||||
protected float pathLength = 0.67f;
|
||||
protected float pathLength = 0.6f;
|
||||
//The chance weights for extra rooms to be added to the path
|
||||
protected float[] pathLenJitterChances = new float[]{1, 0, 0};
|
||||
|
||||
|
@ -66,7 +66,7 @@ public abstract class RegularBuilder extends Builder {
|
|||
return this;
|
||||
}
|
||||
|
||||
protected float extraConnectionChance = 0.1f;
|
||||
protected float extraConnectionChance = 0.2f;
|
||||
|
||||
public RegularBuilder setExtraConnectionChance( float chance ){
|
||||
extraConnectionChance = chance;
|
||||
|
@ -112,7 +112,7 @@ public abstract class RegularBuilder extends Builder {
|
|||
|
||||
// *** Branch Placement ***
|
||||
|
||||
protected static void weightRooms(ArrayList<Room> rooms){
|
||||
protected void weightRooms(ArrayList<Room> rooms){
|
||||
for (Room r : rooms.toArray(new Room[0])){
|
||||
if (r instanceof StandardRoom){
|
||||
for (int i = 1; i < ((StandardRoom) r).sizeCat.connectionWeight(); i++)
|
||||
|
@ -123,7 +123,7 @@ public abstract class RegularBuilder extends Builder {
|
|||
|
||||
//places the rooms in roomsToBranch into branches from rooms in branchable.
|
||||
//note that the three arrays should be separate, they may contain the same rooms however
|
||||
protected static void createBranches(ArrayList<Room> rooms, ArrayList<Room> branchable,
|
||||
protected void createBranches(ArrayList<Room> rooms, ArrayList<Room> branchable,
|
||||
ArrayList<Room> roomsToBranch, float[] connChances){
|
||||
|
||||
int i = 0;
|
||||
|
@ -139,12 +139,12 @@ public abstract class RegularBuilder extends Builder {
|
|||
int connectingRooms = Random.chances(connChances);
|
||||
for (int j = 0; j < connectingRooms; j++){
|
||||
ConnectionRoom t = ConnectionRoom.createRoom();
|
||||
tries = 10;
|
||||
tries = 3;
|
||||
|
||||
do {
|
||||
angle = placeRoom(rooms, curr, t, Random.Float(360f));
|
||||
angle = placeRoom(rooms, curr, t, randomBranchAngle(curr));
|
||||
tries--;
|
||||
} while (angle == -1 && tries >= 0);
|
||||
} while (angle == -1 && tries > 0);
|
||||
|
||||
if (angle == -1) {
|
||||
for (Room r : connectingRoomsThisBranch){
|
||||
|
@ -170,9 +170,9 @@ public abstract class RegularBuilder extends Builder {
|
|||
tries = 10;
|
||||
|
||||
do {
|
||||
angle = placeRoom(rooms, curr, r, Random.Float(360f));
|
||||
angle = placeRoom(rooms, curr, r, randomBranchAngle(curr));
|
||||
tries--;
|
||||
} while (angle == -1 && tries >= 0);
|
||||
} while (angle == -1 && tries > 0);
|
||||
|
||||
if (angle == -1){
|
||||
for (Room t : connectingRoomsThisBranch){
|
||||
|
@ -200,4 +200,8 @@ public abstract class RegularBuilder extends Builder {
|
|||
}
|
||||
}
|
||||
|
||||
protected float randomBranchAngle( Room r ){
|
||||
return Random.Float(360f);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user