diff --git a/Assets/Scripts/Door.cs b/Assets/Scripts/Door.cs
index b1a2dd9..4404ad3 100644
--- a/Assets/Scripts/Door.cs
+++ b/Assets/Scripts/Door.cs
@@ -7,6 +7,8 @@ public class Door : MonoBehaviour {
[SerializeField]
Room parent;
+ Vector2Int toOuter;
+
BoxCollider2D boundingBox;
BoxCollider2D triggerBox;
@@ -33,6 +35,10 @@ public class Door : MonoBehaviour {
this.parent = room;
}
+ public void SetToOuter(Vector2Int v) {
+ toOuter = v;
+ }
+
///
/// Locks the door.
///
@@ -73,12 +79,13 @@ public class Door : MonoBehaviour {
Player player = collision.gameObject.GetComponent();
Vector2 centerToCollider = (Vector2) gameObject.transform.position - parent.GetPosition() + parent.GetCenter();
Vector2 centerToPlayer = (Vector2) player.gameObject.transform.position - parent.GetPosition() + parent.GetCenter();
- if (centerToCollider.magnitude - 1 < centerToPlayer.magnitude) {
- Debug.Log(centerToCollider.magnitude - 1);
+ if (centerToCollider.magnitude - 0.89 < centerToPlayer.magnitude) {
+ Debug.Log(centerToCollider.magnitude - 0.89);
Debug.Log(centerToPlayer.magnitude);
return;
}
-
+ Debug.Log(centerToCollider.magnitude - 0.89);
+ Debug.Log(centerToPlayer.magnitude);
Debug.Log("Leaving Trigger");
if(parent == null) {
Debug.Log("This door has no parent Room!");
diff --git a/Assets/Scripts/GameController.cs b/Assets/Scripts/GameController.cs
index 51da196..e421d6e 100644
--- a/Assets/Scripts/GameController.cs
+++ b/Assets/Scripts/GameController.cs
@@ -222,7 +222,7 @@ public class GameController : MonoBehaviour {
lt.ForEach(x => {
x.SetParent(doorRoot.transform);
x.gameObject.GetComponent().SetParent(start);
- });
+ });
start.SetDoorsRootObject(doorRoot);
// Spawnpoint
diff --git a/Assets/Scripts/Generation/GenerationProcessor.cs b/Assets/Scripts/Generation/GenerationProcessor.cs
index ddc89a7..b457af6 100644
--- a/Assets/Scripts/Generation/GenerationProcessor.cs
+++ b/Assets/Scripts/Generation/GenerationProcessor.cs
@@ -3,217 +3,236 @@ using System.Collections.Generic;
using UnityEngine;
public class GenerationProcessor {
- public enum ExtendedTileType {
- BorderOuter, BorderInner, BorderSingle, Ground0, Ground1, Ground2, Ground3, DoorInner, DoorOuter, Rock, RockL, RockU, RockR, RockD, RockLU, RockLR, RockLD, RockUR, RockUD, RockRD, RockLURD, RockLUD, RockLUR, RockURD, RockLRD, Flag
- }
- Dictionary prefabs;
- public GenerationProcessor(Dictionary prefabs) {
- this.prefabs = prefabs;
- }
-
- public GameObject ProcessRoom(Dictionary tiles) {
- GameObject root = new GameObject {
- name = "Room"
- };
- foreach ( Vector2Int v in tiles.Keys ) {
- ExtendedTileType type = GetRandomGroundType();
- int rotation = 0;
- switch ( tiles[v].type ) {
- case Room.TileType.WALL:
- type = GetCorrectWallType(tiles, v);
- rotation = GetCorrectWallRotation(type, tiles[v].position);
- break;
- case Room.TileType.GROUND:
- type = GetRandomGroundType();
- break;
- case Room.TileType.DOOR:
- type = GetCorrectDoorType(tiles, v);
- rotation = GetCorrectDoorRotation(type, tiles, v);
- break;
- case Room.TileType.ROCK:
- type = GetCorrectRockType(tiles, v);
- break;
- }
- CreateGOFromType(v, rotation, tiles[v].type, type, root);
+ public enum ExtendedTileType {
+ BorderOuter, BorderInner, BorderSingle, Ground0, Ground1, Ground2, Ground3, DoorInner, DoorOuter, Rock, RockL, RockU, RockR, RockD, RockLU, RockLR, RockLD, RockUR, RockUD, RockRD, RockLURD, RockLUD, RockLUR, RockURD, RockLRD, Flag
}
- return root;
- }
-
- public GameObject CreateGOFromType(Vector2 v, int rotation, Room.TileType type, ExtendedTileType t, GameObject root) {
- GameObject tmp = null;
- if (type != Room.TileType.GROUND)
- CreateGOFromType(v, 0, Room.TileType.GROUND, GetRandomGroundType(), root);
- if ( prefabs.ContainsKey(t) && root != null ) {
- tmp = Object.Instantiate(prefabs[t], root.transform);
- tmp.transform.position = v;
- tmp.transform.Rotate(new Vector3(0, 0, rotation));
+ Dictionary prefabs;
+ public GenerationProcessor(Dictionary prefabs) {
+ this.prefabs = prefabs;
}
- return tmp;
- }
- private int CountSpecificNeighbours(Dictionary tiles, Vector2Int position, Room.TileType type) {
- int counter = 0;
- Vector2Int toCheck = position + new Vector2Int(0, -1);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == type)
- counter++;
- toCheck = position + new Vector2Int(-1, 0);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == type)
- counter++;
- toCheck = position + new Vector2Int(0, 1);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == type)
- counter++;
- toCheck = position + new Vector2Int(1, 0);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == type)
- counter++;
- return counter;
- }
-
- private ExtendedTileType GetCorrectWallType(Dictionary tiles, Vector2Int position){
- int groundNumber = CountSpecificNeighbours(tiles, position, Room.TileType.GROUND) + CountSpecificNeighbours(tiles, position, Room.TileType.ROCK);
- switch(groundNumber){
- case 0:
- return ExtendedTileType.BorderInner;
- case 2:
- return ExtendedTileType.BorderOuter;
- default:
- return ExtendedTileType.BorderSingle;
- }
- }
-
- private int GetCorrectWallRotation(ExtendedTileType type, GenTile.Position position) {
- int rotation = 0;
- switch (type) {
- case ExtendedTileType.BorderSingle:
- switch (position) {
- case GenTile.Position.BOTTOM:
- rotation = 180;
- break;
- case GenTile.Position.LEFT:
- rotation = 90;
- break;
- case GenTile.Position.TOP:
- rotation = 0;
- break;
- case GenTile.Position.RIGHT:
- rotation = 270;
- break;
+ public GameObject ProcessRoom(Dictionary tiles) {
+ GameObject root = new GameObject {
+ name = "Room"
+ };
+ foreach ( Vector2Int v in tiles.Keys ) {
+ ExtendedTileType type = GetRandomGroundType();
+ int rotation = 0;
+ switch ( tiles[v].type ) {
+ case Room.TileType.WALL:
+ type = GetCorrectWallType(tiles, v);
+ rotation = GetCorrectWallRotation(type, tiles[v].position);
+ break;
+ case Room.TileType.GROUND:
+ type = GetRandomGroundType();
+ break;
+ case Room.TileType.DOOR:
+ type = GetCorrectDoorType(tiles, v);
+ rotation = GetCorrectDoorRotation(type, tiles, v);
+ break;
+ case Room.TileType.ROCK:
+ type = GetCorrectRockType(tiles, v);
+ break;
+ }
+ GameObject go = CreateGOFromType(v, rotation, tiles[v].type, type, root);
+ // Todo dirty hack
+ if ( go.tag == "door" ) {
+ go.GetComponent().SetToOuter(GenerationProcessor.GetDirectionVector(tiles[v].position));
+ }
}
- break;
- case ExtendedTileType.BorderInner:
- switch (position) {
- case GenTile.Position.BOTTOM_LEFT:
- rotation = 90;
- break;
- case GenTile.Position.TOP_LEFT:
- rotation = 0;
- break;
- case GenTile.Position.TOP_RIGHT:
- rotation = 270;
- break;
- case GenTile.Position.BOTTOM_RIGHT:
- rotation = 180;
- break;
+ return root;
+ }
+
+ public GameObject CreateGOFromType(Vector2 v, int rotation, Room.TileType type, ExtendedTileType t, GameObject root) {
+ GameObject tmp = null;
+ if ( type != Room.TileType.GROUND )
+ CreateGOFromType(v, 0, Room.TileType.GROUND, GetRandomGroundType(), root);
+ if ( prefabs.ContainsKey(t) && root != null ) {
+ tmp = Object.Instantiate(prefabs[t], root.transform);
+ tmp.transform.position = v;
+ tmp.transform.Rotate(new Vector3(0, 0, rotation));
}
- break;
+ return tmp;
}
- return rotation;
- }
- private ExtendedTileType GetCorrectRockType(Dictionary tiles, Vector2Int position) {
- int meta = 0;
- Vector2Int toCheck = position + new Vector2Int(0, -1);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK)
- meta += 1;
- toCheck = position + new Vector2Int(-1, 0);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK)
- meta += 2;
- toCheck = position + new Vector2Int(0, 1);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK)
- meta += 4;
- toCheck = position + new Vector2Int(1, 0);
- if (tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK)
- meta += 8;
-
- switch(meta) {
- case 1:
- return ExtendedTileType.RockD;
- case 2:
- return ExtendedTileType.RockL;
- case 3:
- return ExtendedTileType.RockLD;
- case 4:
- return ExtendedTileType.RockU;
- case 5:
- return ExtendedTileType.RockUD;
- case 6:
- return ExtendedTileType.RockLU;
- case 7:
- return ExtendedTileType.RockLUD;
- case 8:
- return ExtendedTileType.RockR;
- case 9:
- return ExtendedTileType.RockRD;
- case 10:
- return ExtendedTileType.RockLR;
- case 11:
- return ExtendedTileType.RockLRD;
- case 12:
- return ExtendedTileType.RockUR;
- case 13:
- return ExtendedTileType.RockURD;
- case 14:
- return ExtendedTileType.RockLUR;
- case 15:
- return ExtendedTileType.RockLURD;
- default:
- return ExtendedTileType.Rock;
- }
- }
-
- private ExtendedTileType GetCorrectDoorType(Dictionary tiles, Vector2Int position) {
- int neighbourDoors = CountSpecificNeighbours(tiles, position, Room.TileType.DOOR);
- switch(neighbourDoors) {
- case 1:
- return ExtendedTileType.DoorOuter;
- default:
- return ExtendedTileType.DoorInner;
- }
- }
-
- private int GetCorrectDoorRotation(ExtendedTileType type, Dictionary tiles, Vector2Int position) {
- switch(type) {
- case ExtendedTileType.DoorOuter:
+ private int CountSpecificNeighbours(Dictionary tiles, Vector2Int position, Room.TileType type) {
+ int counter = 0;
Vector2Int toCheck = position + new Vector2Int(0, -1);
- if(tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR)
- return 270;
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == type )
+ counter++;
toCheck = position + new Vector2Int(-1, 0);
- if(tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR)
- return 180;
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == type )
+ counter++;
toCheck = position + new Vector2Int(0, 1);
- if(tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR)
- return 90;
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == type )
+ counter++;
toCheck = position + new Vector2Int(1, 0);
- return 0;
- case ExtendedTileType.DoorInner:
- Vector2Int toCheckD = position + new Vector2Int(0, -1);
- if(tiles.ContainsKey(toCheckD) && tiles[toCheckD].type == Room.TileType.DOOR)
- return 90;
- return 0;
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == type )
+ counter++;
+ return counter;
}
- return 0;
- }
- private ExtendedTileType GetRandomGroundType() {
- int num = (int) (UnityEngine.Random.value * 4);
- switch(num) {
- case 0:
- return ExtendedTileType.Ground0;
- case 1:
- return ExtendedTileType.Ground1;
- case 2:
- return ExtendedTileType.Ground2;
- default:
- return ExtendedTileType.Ground3;
+ private ExtendedTileType GetCorrectWallType(Dictionary tiles, Vector2Int position) {
+ int groundNumber = CountSpecificNeighbours(tiles, position, Room.TileType.GROUND) + CountSpecificNeighbours(tiles, position, Room.TileType.ROCK);
+ switch ( groundNumber ) {
+ case 0:
+ return ExtendedTileType.BorderInner;
+ case 2:
+ return ExtendedTileType.BorderOuter;
+ default:
+ return ExtendedTileType.BorderSingle;
+ }
+ }
+
+ private int GetCorrectWallRotation(ExtendedTileType type, GenTile.Position position) {
+ int rotation = 0;
+ switch ( type ) {
+ case ExtendedTileType.BorderSingle:
+ switch ( position ) {
+ case GenTile.Position.BOTTOM:
+ rotation = 180;
+ break;
+ case GenTile.Position.LEFT:
+ rotation = 90;
+ break;
+ case GenTile.Position.TOP:
+ rotation = 0;
+ break;
+ case GenTile.Position.RIGHT:
+ rotation = 270;
+ break;
+ }
+ break;
+ case ExtendedTileType.BorderInner:
+ switch ( position ) {
+ case GenTile.Position.BOTTOM_LEFT:
+ rotation = 90;
+ break;
+ case GenTile.Position.TOP_LEFT:
+ rotation = 0;
+ break;
+ case GenTile.Position.TOP_RIGHT:
+ rotation = 270;
+ break;
+ case GenTile.Position.BOTTOM_RIGHT:
+ rotation = 180;
+ break;
+ }
+ break;
+ }
+ return rotation;
+ }
+
+ private ExtendedTileType GetCorrectRockType(Dictionary tiles, Vector2Int position) {
+ int meta = 0;
+ Vector2Int toCheck = position + new Vector2Int(0, -1);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK )
+ meta += 1;
+ toCheck = position + new Vector2Int(-1, 0);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK )
+ meta += 2;
+ toCheck = position + new Vector2Int(0, 1);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK )
+ meta += 4;
+ toCheck = position + new Vector2Int(1, 0);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.ROCK )
+ meta += 8;
+
+ switch ( meta ) {
+ case 1:
+ return ExtendedTileType.RockD;
+ case 2:
+ return ExtendedTileType.RockL;
+ case 3:
+ return ExtendedTileType.RockLD;
+ case 4:
+ return ExtendedTileType.RockU;
+ case 5:
+ return ExtendedTileType.RockUD;
+ case 6:
+ return ExtendedTileType.RockLU;
+ case 7:
+ return ExtendedTileType.RockLUD;
+ case 8:
+ return ExtendedTileType.RockR;
+ case 9:
+ return ExtendedTileType.RockRD;
+ case 10:
+ return ExtendedTileType.RockLR;
+ case 11:
+ return ExtendedTileType.RockLRD;
+ case 12:
+ return ExtendedTileType.RockUR;
+ case 13:
+ return ExtendedTileType.RockURD;
+ case 14:
+ return ExtendedTileType.RockLUR;
+ case 15:
+ return ExtendedTileType.RockLURD;
+ default:
+ return ExtendedTileType.Rock;
+ }
+ }
+
+ private ExtendedTileType GetCorrectDoorType(Dictionary tiles, Vector2Int position) {
+ int neighbourDoors = CountSpecificNeighbours(tiles, position, Room.TileType.DOOR);
+ switch ( neighbourDoors ) {
+ case 1:
+ return ExtendedTileType.DoorOuter;
+ default:
+ return ExtendedTileType.DoorInner;
+ }
+ }
+
+ private int GetCorrectDoorRotation(ExtendedTileType type, Dictionary tiles, Vector2Int position) {
+ switch ( type ) {
+ case ExtendedTileType.DoorOuter:
+ Vector2Int toCheck = position + new Vector2Int(0, -1);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR )
+ return 270;
+ toCheck = position + new Vector2Int(-1, 0);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR )
+ return 180;
+ toCheck = position + new Vector2Int(0, 1);
+ if ( tiles.ContainsKey(toCheck) && tiles[toCheck].type == Room.TileType.DOOR )
+ return 90;
+ toCheck = position + new Vector2Int(1, 0);
+ return 0;
+ case ExtendedTileType.DoorInner:
+ Vector2Int toCheckD = position + new Vector2Int(0, -1);
+ if ( tiles.ContainsKey(toCheckD) && tiles[toCheckD].type == Room.TileType.DOOR )
+ return 90;
+ return 0;
+ }
+ return 0;
+ }
+
+ public static Vector2Int GetDirectionVector(GenTile.Position p) {
+ switch ( p ) {
+ case GenTile.Position.TOP:
+ return new Vector2Int(0, 1);
+ case GenTile.Position.LEFT:
+ return new Vector2Int(-1, 0);
+ case GenTile.Position.RIGHT:
+ return new Vector2Int(1, 0);
+ case GenTile.Position.BOTTOM:
+ return new Vector2Int(0, -1);
+ default:
+ return new Vector2Int();
+ }
+ }
+
+ private ExtendedTileType GetRandomGroundType() {
+ int num = ( int ) ( UnityEngine.Random.value * 4 );
+ switch ( num ) {
+ case 0:
+ return ExtendedTileType.Ground0;
+ case 1:
+ return ExtendedTileType.Ground1;
+ case 2:
+ return ExtendedTileType.Ground2;
+ default:
+ return ExtendedTileType.Ground3;
+ }
}
- }
}
diff --git a/Assets/Scripts/Objectives/StartObjective.cs b/Assets/Scripts/Objectives/StartObjective.cs
index 26e0375..46adbd3 100644
--- a/Assets/Scripts/Objectives/StartObjective.cs
+++ b/Assets/Scripts/Objectives/StartObjective.cs
@@ -31,14 +31,6 @@ public class StartObjective : Objective {
}
}
- ///
- /// Returns the created Player object. Call this after !
- ///
- /// Player
- public Player GetPlayer() {
- return player;
- }
-
///
/// Code executed if the goal is reached eg. opening doors.
///
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index add3fa1..7a3dfe8 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -12,8 +12,8 @@ PlayerSettings:
targetDevice: 2
useOnDemandResources: 0
accelerometerFrequency: 60
- companyName: DefaultCompany
- productName: New Unity Project
+ companyName: Bildschirmflausch
+ productName: Dungeon Drifter
defaultCursor: {fileID: 0}
cursorHotspot: {x: 0, y: 0}
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
@@ -543,7 +543,7 @@ PlayerSettings:
splashScreenBackgroundSourceLandscape: {fileID: 0}
splashScreenBackgroundSourcePortrait: {fileID: 0}
spritePackerPolicy:
- webGLMemorySize: 256
+ webGLMemorySize: 512
webGLExceptionSupport: 1
webGLNameFilesAsHashes: 0
webGLDataCaching: 0