public bool DoCheckAccess(Direction checkDir) { Vector2 <int> dir = GetDirection(checkDir); MazeGrid nextGrid = mMap.GetGrid(mCurGrid.XY.x + dir.x, mCurGrid.XY.y + dir.y); return(nextGrid.CheckPass() == MazeGrid.PassResult.Pass); }
/*public override void OnSingletonInit() * { * mMap = GetComponentInChildren<MazeMap>(); * mAvatar = GetComponentInChildren<MazeAvatar>(); * * Reset(); * }*/ public void Reset() { //todo: configurable string savePath = System.IO.Path.Combine(Application.persistentDataPath, "MazeMapDesign"); savePath = System.IO.Path.Combine(savePath, "Level1.json"); string jsonText = File.ReadAllText(savePath); MazeMapData data = jsonText.FromJson <MazeMapData>(); mMap.Init(data); mCurGrid = mMap.GetStartGrid(); List <Vector2 <int> > dirs = DIRECTIONS.GetRange(0, DIRECTIONS.Count); while (dirs.Count > 0) { //get a random accessible direction Vector2 <int> dir = dirs[Random.Range(0, dirs.Count)]; MazeGrid grid = mMap.GetGrid(mCurGrid.XY.x + dir.x, mCurGrid.XY.y + dir.y); if (grid.CheckPass() == MazeGrid.PassResult.Pass) { mCurDir = dir; break; } dirs.Remove(dir); } mAvatar.Init(mCurGrid.Position, new Vector3(mCurDir.x, 0, mCurDir.y)); }
public IEnumerator DoMoveForward() { MazeGrid nextGrid = mMap.GetGrid(mCurGrid.XY.x + mCurDir.x, mCurGrid.XY.y + mCurDir.y); yield return(mAvatar.Move(nextGrid.Position)); mCurGrid = nextGrid; }
private void BuildMap() { foreach (Transform child in transform) { if (child.gameObject != m_Background && child.gameObject != m_GridPrefab) { GameObject.Destroy(child.gameObject); } } float gridWidth = m_Boundary.width / mMapData.Width; float gridHeight = m_Boundary.height / mMapData.Height; mGridLength = Mathf.Min(gridWidth, gridHeight); float mapWidth = mGridLength * mMapData.Width; float mapHeight = mGridLength * mMapData.Height; m_Background.transform.localPosition = new Vector3(m_Boundary.center.x, m_Boundary.center.y, 1); m_Background.transform.localScale = new Vector3(mapWidth + 0.2f, mapHeight + 0.2f, 1); //topleft Vector3 startPos = new Vector3(m_Boundary.center.x - 0.5f * mapWidth, m_Boundary.center.y + 0.5f * mapHeight); startPos.x += 0.5f * mGridLength; startPos.y -= 0.5f * mGridLength; Vector3 gridPos = startPos; mGrids = new MazeGrid[mMapData.Height, mMapData.Width]; for (int i = 0; i < mMapData.Height; i++) { for (int j = 0; j < mMapData.Width; j++) { int index = i * mMapData.Width + j; GridType gridType = mMapData.Grids[index]; GameObject gridObj = GameObject.Instantiate(m_GridPrefab, transform, false); gridObj.SetActive(true); gridObj.name = "Grid" + gridType.ToString(); gridObj.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>(MazeDefine.GridTextures[gridType]); gridObj.transform.localPosition = gridPos; gridObj.transform.localScale = new Vector3(mGridLength, mGridLength, 1); if (j < mMapData.Width - 1) { gridPos.x += mGridLength; } else { gridPos.x = startPos.x; } MazeGrid grid = MazeGridFactory.Create(gridType, new Vector2 <int>(j, i)); grid.GridObject = gridObj; mGrids[i, j] = grid; if (gridType == GridType.Start) { mStart = grid; } else if (gridType == GridType.Terminal) { mTerminal = grid; } } gridPos.y -= mGridLength; } }