1
Fork 0

Map does stuff now?

This commit is contained in:
Steffo 2019-04-27 16:48:37 +02:00
parent 39b5006295
commit d4a876097d
2 changed files with 81 additions and 22 deletions

39
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,39 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Unity Editor",
"type": "unity",
"path": "/t:/Unity Projects/LD44/Library/EditorInstance.json",
"request": "launch"
},
{
"name": "Windows Player",
"type": "unity",
"request": "launch"
},
{
"name": "OSX Player",
"type": "unity",
"request": "launch"
},
{
"name": "Linux Player",
"type": "unity",
"request": "launch"
},
{
"name": "iOS Player",
"type": "unity",
"request": "launch"
},
{
"name": "Android Player",
"type": "unity",
"request": "launch"
}
]
}

View file

@ -28,7 +28,7 @@ public class MapRoom {
public readonly IntVector2 end;
public readonly int mapSize;
public MapRoom(int mapSize) {
public MapRoom(int mapSize, int maxRoomSize) {
this.mapSize = mapSize;
start = new IntVector2(Random.Range(0, mapSize), Random.Range(0, mapSize));
end = new IntVector2(Random.Range(0, mapSize), Random.Range(0, mapSize));
@ -42,33 +42,45 @@ public class MapRoom {
start.y = end.y;
end.y = swap;
}
if(end.x - start.x > maxRoomSize) {
end.x--;
start.x++;
}
if(end.y - start.y > maxRoomSize) {
end.y--;
start.y++;
}
}
public bool RightCheck() {
return end.x < mapSize-1;
}
public IntVector2 RightCorridorAttachment() {
if(end.x+1 >= mapSize) {
throw new ImpossibleCorridorError();
}
return new IntVector2(end.x+1, Random.Range(start.y, end.y+1));
}
public bool LeftCheck() {
return start.x > 0;
}
public IntVector2 LeftCorridorAttachment() {
if(start.x-1 <= 0) {
throw new ImpossibleCorridorError();
}
return new IntVector2(start.x-1, Random.Range(start.y, start.y-1));
return new IntVector2(start.x-1, Random.Range(start.y, end.y+1));
}
public bool TopCheck() {
return end.y < mapSize-1;
}
public IntVector2 TopCorridorAttachment() {
if(end.y+1 >= mapSize) {
throw new ImpossibleCorridorError();
}
return new IntVector2(Random.Range(start.x, end.x+1), end.y+1);
}
public bool BottomCheck() {
return start.y > 0;
}
public IntVector2 BottomCorridorAttachment() {
if(start.y-1 <= 0) {
throw new ImpossibleCorridorError();
}
return new IntVector2(Random.Range(start.x, end.x+1), start.y-1);
}
}
@ -88,11 +100,12 @@ public class MapCorridor {
public MapCorridor(MapRoom from, MapRoom to, int mapSize) {
List<CorridorModes> corridorModes = new List<CorridorModes>();
//Find allowed CorridorModes
if(from.end.y <= to.start.y) corridorModes.Add(CorridorModes.bottomToTop);
if(from.start.y >= to.end.y) corridorModes.Add(CorridorModes.topToBottom);
if(from.end.x <= to.start.y) corridorModes.Add(CorridorModes.rightToLeft);
if(from.start.y >= to.end.y) corridorModes.Add(CorridorModes.leftToRight);
if(from.end.y <= to.start.y && from.BottomCheck() && to.TopCheck()) corridorModes.Add(CorridorModes.bottomToTop);
if(from.start.y >= to.end.y && from.TopCheck() && to.BottomCheck()) corridorModes.Add(CorridorModes.topToBottom);
if(from.end.x <= to.start.y && from.RightCheck() && to.LeftCheck()) corridorModes.Add(CorridorModes.rightToLeft);
if(from.start.y >= to.end.y && from.LeftCheck() && to.RightCheck()) corridorModes.Add(CorridorModes.leftToRight);
//Select and use a corridor mode
if(corridorModes.Count < 1) throw new ImpossibleCorridorError();
CorridorModes corridorMode = corridorModes[Random.Range(0, corridorModes.Count)];
if(corridorMode == CorridorModes.bottomToTop) {
start = from.BottomCorridorAttachment();
@ -123,6 +136,9 @@ public class Map : MonoBehaviour
[BeforeStartAttribute]
public int roomsToGenerate = 5;
[BeforeStartAttribute]
public int maxRoomSize = 6;
[BeforeStartAttribute]
public Sprite wallSprite;
@ -218,15 +234,19 @@ public class Map : MonoBehaviour
private void GenerateMap() {
FillWithWalls();
while(rooms.Count < roomsToGenerate) {
MapRoom room = new MapRoom(mapSize);
MapRoom room = new MapRoom(mapSize, maxRoomSize);
if(ScanRoom(room)) {
PlaceRoom(room);
rooms.Add(room);
}
if(rooms.Count > 1) {
MapRoom from = rooms[Random.Range(0, rooms.Count)];
MapRoom to = rooms[Random.Range(0, rooms.Count)];
MapCorridor corridor = new MapCorridor(from, to, mapSize);
MapRoom from = rooms[rooms.Count-1];
MapRoom to = room;
try {
MapCorridor corridor = new MapCorridor(from, to, mapSize);
PlaceCorridor(corridor);
}
catch (ImpossibleCorridorError) {}
}
}
}