Beispiel #1
0
        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);
        }
Beispiel #2
0
        /*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));
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
            }
        }