public static sPosition GetPositionByDirection(sPosition position, eMoveDirection direction)
    {
        int moveX = position.x;
        int moveY = position.y;

        switch (direction)
        {
        case eMoveDirection.LEFT:
            moveX--;
            break;

        case eMoveDirection.RIGHT:
            moveX++;
            break;

        case eMoveDirection.UP:
            moveY--;
            break;

        case eMoveDirection.DOWN:
            moveY++;
            break;
        }

        sPosition newPosition;

        newPosition.x = moveX;
        newPosition.y = moveY;

        return(newPosition);
    }
예제 #2
0
    //Message
    override public void ReceiveObjectMessage(MessageParam msgParam)
    {
        switch (msgParam.message)
        {
        case "Attack":
            Debug.Log("recevie Attack!");
            _damagePoint = msgParam.attackPoint;
            SetAttacker(msgParam.sender);

            sPosition curPosition;
            curPosition.x = _tileX;
            curPosition.y = _tileY;
            sPosition attackedPosition;
            attackedPosition.x = msgParam.sender.GetTileX();
            attackedPosition.y = msgParam.sender.GetTileY();
            eMoveDirection direction = GetDirection(curPosition, attackedPosition);
            //SetNextDirection(direction);
            //MoveStart(attackedPosition.x, attackedPosition.y);
            _state.NextState(eStateType.DAMAGE);
            break;

        case "IsDead":
            Debug.Log("I'm dead!");
            Character msgSender = (Character)msgParam.sender;
            IncreaseEXP(msgSender.GetEXP());
            break;
        }
    }
예제 #3
0
    public override void Update()
    {
        if (_character.EmptyPathFindingTileCell() == false)
        {
            TileCell tileCell = _character.PopPathFindingTileCell();

            sPosition curPosition;
            curPosition.x = _character.GetTileX();
            curPosition.y = _character.GetTileY();

            sPosition nextPosition;
            nextPosition.x = tileCell.GetTileX();
            nextPosition.y = tileCell.GetTileY();

            eMoveDirection direction = GetDirection(curPosition, nextPosition);
            _character.SetNextDirection(direction);

            if ((_character.MoveStart(tileCell.GetTileX(), tileCell.GetTileY()) == false))
            {
                //_nextState = eStateType.ATTACK;
                _nextState = eStateType.DISCOVER;
            }
        }

        else
        {
            _nextState = eStateType.IDLE;
        }
    }
예제 #4
0
    override public void Update()
    {
        eMoveDirection moveDirection = eMoveDirection.NONE;

        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            moveDirection = eMoveDirection.LEFT;
        }

        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            moveDirection = eMoveDirection.RIGHT;
        }

        else if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            moveDirection = eMoveDirection.UP;
        }

        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            moveDirection = eMoveDirection.DOWN;
        }

        if (eMoveDirection.NONE != moveDirection)
        {
            _character.SetNextDirection(moveDirection);
            _nextState = eStateType.MOVE;
        }
    }
예제 #5
0
 public MotionControlCommand(byte vehicleNumber, eMoveDirection moveDirection, eSpeed speed, eLogicalDirection logicalDirection = eLogicalDirection.LogicalGo, byte movementTime = 0x00) :
     base(eAgvCommandWord.MotionControl, vehicleNumber)
 {
     DNHead           = vehicleNumber;
     MoveDirection    = moveDirection;
     Speed            = speed;
     LogicalDirection = logicalDirection;
     MovementTime     = movementTime;
     Check            = (byte)(CommandWord + MoveDirection + (byte)Speed + (byte)LogicalDirection + MovementTime + Data5 + Data6 + Data7 + Data8 + Data9 + Data10 + Data11 + Data12 + Data13 + Data14 + Data15 + Data16);
 }
예제 #6
0
    sPosition GetDirectionTilePosition(eMoveDirection direction, sPosition position)
    {
        switch (direction)
        {
        case eMoveDirection.LEFT: position.x--; break;

        case eMoveDirection.RIGHT: position.x++; break;

        case eMoveDirection.UP: position.y--; break;

        case eMoveDirection.DOWN: position.y++; break;
        }
        return(position);
    }
예제 #7
0
 public MainWindow()
 {
     InitializeComponent();
     this.SourceInitialized           += Window_SourceInitialized;
     this.Loaded                      += Window_Loaded;
     this.StateChanged                += Window_StateChanged;
     this.Closing                     += Window_Closing;
     ShowInTaskbar                     = false;
     MoveDirection                     = eMoveDirection.Up;
     textBlockShoot1.PreviewMouseDown += TextBlockShoot_PreviewMouseDown;
     textBlockShoot2.PreviewMouseDown += TextBlockShoot_PreviewMouseDown;
     textBlockShoot3.PreviewMouseDown += TextBlockShoot3_PreviewMouseDown;
     textBlock.Text                    = GetEnglish();
 }
예제 #8
0
        private void advanceInMatrix(eMoveDirection i_Direction, ref int io_CurrentRow, ref int io_CurrentCol, out bool o_ReachedEnd)
        {
            o_ReachedEnd = false;
            int currentRow = io_CurrentRow;
            int currentCol = io_CurrentCol;

            switch (i_Direction)
            {
            case eMoveDirection.Up:
                o_ReachedEnd = --currentRow < 0;
                break;

            case eMoveDirection.UpRight:
                o_ReachedEnd = --currentRow < 0 || ++currentCol >= BoardSize;
                break;

            case eMoveDirection.Right:
                o_ReachedEnd = ++currentCol >= BoardSize;
                break;

            case eMoveDirection.DownRight:
                o_ReachedEnd = ++currentRow >= BoardSize || ++currentCol >= BoardSize;
                break;

            case eMoveDirection.Down:
                o_ReachedEnd = ++currentRow >= BoardSize;
                break;

            case eMoveDirection.DownLeft:
                o_ReachedEnd = ++currentRow >= BoardSize || --currentCol < 0;
                break;

            case eMoveDirection.Left:
                o_ReachedEnd = --currentCol < 0;
                break;

            case eMoveDirection.UpLeft:
                o_ReachedEnd = --currentCol < 0 || --currentRow < 0;
                break;
            }

            if (!o_ReachedEnd)
            {
                io_CurrentRow = currentRow;
                io_CurrentCol = currentCol;
            }
        }
예제 #9
0
    void UpdateMove()
    {
        if (_character.IsMovePossible())
        {
            _eMoveState = eMoveState.END;
        }
        switch (_eMoveState)
        {
        case eMoveState.START:
            if (0 != _pathfindingStack.Count)
            {
                _nextTileCell = _pathfindingStack.Pop();
                sPosition curPosition;
                curPosition.x = _character.GetTileX();
                curPosition.y = _character.GetTileY();

                sPosition toPosition;
                toPosition.x = _nextTileCell.GetTileX();
                toPosition.y = _nextTileCell.GetTileY();

                _direction = _character.GetDirection(curPosition, toPosition);
                _character.SetAnimation(_direction.ToString().ToLower());
            }
            else
            {
                //상태 변경
                MoveFinish();
                return;
            }
            _eMoveState = eMoveState.MOVE;
            break;

        case eMoveState.MOVE:
            MoveInterpolation();      //보간
            break;

        case eMoveState.END:
            _character.MoveTileCell(_nextTileCell);
            _characterVector = _character.GetPosition();
            _eMoveState      = eMoveState.START;
            break;

        default:
            break;
        }
    }
예제 #10
0
    sPosition GetPositionByDirection(sPosition curPosition, eMoveDirection direction)
    {
        sPosition tilePosition = curPosition;

        switch (direction)
        {
        case eMoveDirection.LEFT:
            tilePosition.x--;
            break;

        case eMoveDirection.RIGHT:
            tilePosition.x++;
            break;

        case eMoveDirection.UP:
            tilePosition.y--;
            break;

        case eMoveDirection.DOWN:
            tilePosition.y++;
            break;
        }

        if (tilePosition.x < 0)
        {
            tilePosition.x = 0;
        }
        if (tilePosition.x > GameManager.Instance.GetMap().GetWidth() - 1)
        {
            curPosition.x = GameManager.Instance.GetMap().GetWidth() - 1;
        }
        if (tilePosition.y < 0)
        {
            tilePosition.y = 0;
        }
        if (tilePosition.y > GameManager.Instance.GetMap().GetHeight() - 1)
        {
            curPosition.y = GameManager.Instance.GetMap().GetHeight() - 1;
        }

        return(tilePosition);
    }
예제 #11
0
        private void TextBlockShoot_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            var animation = new DoubleAnimation();

            if (MoveDirection == eMoveDirection.Up)
            {
                MoveDirection  = eMoveDirection.Down;
                animation.From = imageGrid.Height;
                animation.To   = MaxImgHeight;
            }
            else
            {
                MoveDirection  = eMoveDirection.Up;
                animation.From = imageGrid.Height;
                animation.To   = MinImgHeight;
            }

            animation.Duration = TimeSpan.FromSeconds(OneTimeSpan);
            imageGrid.BeginAnimation(HeightProperty, animation);
        }
예제 #12
0
    public override void Update()
    {
        if (false == _character.IsEmptyPathfindingTileCell())
        {
            if (_moveDuration < _moveSpeed)
            {
                _moveDuration += Time.deltaTime;
                return;
            }
            _moveDuration = 0.0f;

            TileCell tileCell = _character.PopPathfindingTileCell();

            sPosition curPosition;
            curPosition.x = _character.GetTileX();
            curPosition.y = _character.GetTileY();

            sPosition toPosition;
            toPosition.x = tileCell.GetTileX();
            toPosition.y = tileCell.GetTileY();

            eMoveDirection direction = GetDirection(toPosition, curPosition);
            _character.SetNextDirection(direction);

            if (false == _character.MoveStart(tileCell.GetTileX(), tileCell.GetTileY()))
            {
                if (_character.IsAttackable())
                {
                    _nextState = eStateType.ATTACK;
                }
                else
                {
                    _nextState = eStateType.IDLE;
                }
            }
        }
        else
        {
            _nextState = eStateType.IDLE;
        }
    }
    public override void Update()
    {
        base.Update();

        if (_character.GetMoveSpeed() <= _movingDuration)
        {
            _movingDuration = 0.0f;
            if (0 != _pathTileCellStack.Count)
            {
                TileCell tileCell = _pathTileCellStack.Pop();

                sPosition curPosition;
                curPosition.x = _character.GetTileX();
                curPosition.y = _character.GetTileY();

                sPosition nextPosition;
                nextPosition.x = tileCell.GetTileX();
                nextPosition.y = tileCell.GetTileY();

                eMoveDirection direction = GlobalUtility.GetDirection(curPosition, nextPosition);
                _character.SetNextDirection(direction);

                if (GameManager.Instance.GetMap().CanMoveTile(nextPosition.x, nextPosition.y))
                {
                    _character.MoveStart(nextPosition.x, nextPosition.y);
                }
                else
                {
                    _nextState = eStateType.IDLE;
                }
            }
            else
            {
                _nextState = eStateType.IDLE;
            }
        }
        else
        {
            _movingDuration += Time.deltaTime;
        }
    }
예제 #14
0
    public sPosition GetPositionByDirection(sPosition curPosition, int direction)
    {
        sPosition      position      = curPosition;
        eMoveDirection moveDirection = (eMoveDirection)direction;

        switch (moveDirection)
        {
        case eMoveDirection.LEFT:
            position.x--;
            if (position.x < 0)
            {
                position.x++;
            }
            break;

        case eMoveDirection.RIGHT:
            position.x++;
            if (position.x == GameManager.Instance.GetMap().GetWidth())
            {
                position.x--;
            }
            break;

        case eMoveDirection.UP:
            position.y--;
            if (position.y < 0)
            {
                position.y++;
            }
            break;

        case eMoveDirection.DOWN:
            position.y++;
            if (position.y == GameManager.Instance.GetMap().GetHeight())
            {
                position.y--;
            }
            break;
        }
        return(position);
    }
예제 #15
0
        //--------------------------------------------------------------------------------------//
        //        Make list of currect movment and Sequence lists for change team pieces        //
        //--------------------------------------------------------------------------------------//
        private void makeAListOfCurrectMoves()
        {
            GetCurrentPlayer().IsHaveValidMove = false;

            List <Piece> allThePiecesFormCurrentPlayer = GetCurrentPlayer().Pieces;

            foreach (Piece currentPieceOnPlayerList in allThePiecesFormCurrentPlayer)
            {
                Coordinates currentPieceCoordinate = currentPieceOnPlayerList.CoordinatesOnBoard;

                for (eMoveDirection currentDirection = eMoveDirection.TopRightDirection; (byte)currentDirection < k_NumOfDirections; currentDirection++)
                {
                    List <Piece> currentListOfsequencePieces = new List <Piece>();
                    Coordinates  currentCoordinate           = currentPieceCoordinate;
                    currentCoordinate = getCellCoordinateToProcced(currentCoordinate, currentDirection);

                    while (isAValidMove(currentCoordinate))
                    {
                        Piece currentRivalPiece = s_GamePanel[currentCoordinate];
                        currentListOfsequencePieces.Add(currentRivalPiece);
                        currentCoordinate = getCellCoordinateToProcced(currentCoordinate, currentDirection);

                        if (checkIfArriveToEmptyCellOnBoard(currentCoordinate))
                        {
                            saveTheSequenceListToChangeTeamPiecesMember(ref currentListOfsequencePieces, currentCoordinate);
                            GetCurrentPlayer().IsHaveValidMove = true;
                            currentListOfsequencePieces.Clear();
                        }
                        else if (isCurrentCoordinateContainAllyPiece(currentCoordinate))
                        {
                            currentListOfsequencePieces.Clear();
                            break;
                        }
                    }

                    currentListOfsequencePieces.Clear();
                }
            }
        }
예제 #16
0
        private void performTokensReplacementForDirection(
            eSignMarks i_Symbol,
            eMoveDirection i_MoveDirection,
            int i_Row,
            int i_Col,
            eSignMarks[,] i_PreviousBoardStatus,
            out eSignMarks[,] o_NewBoardStatus,
            out int o_NumberOfTokenReplaced)
        {
            o_NewBoardStatus        = null;
            o_NumberOfTokenReplaced = 0;

            eSignMarks[,] boardStateWithUpdatedDirection = new eSignMarks[BoardSize, BoardSize];
            Array.Copy(i_PreviousBoardStatus, boardStateWithUpdatedDirection, i_PreviousBoardStatus.Length);
            boardStateWithUpdatedDirection[i_Row, i_Col] = i_Symbol;

            int        possibleNumberOfTokensReplaced = 0;
            bool       AriiveTOBorder;
            eSignMarks previousTokenValue = eSignMarks.Blank;
            int        row = i_Row;
            int        col = i_Col;

            do
            {
                advanceInMatrix(i_MoveDirection, ref row, ref col, out AriiveTOBorder);
                if (!AriiveTOBorder)
                {
                    previousTokenValue = boardStateWithUpdatedDirection[row, col];
                    boardStateWithUpdatedDirection[row, col] = i_Symbol;
                }
                ++possibleNumberOfTokensReplaced;
            }while (previousTokenValue != i_Symbol && previousTokenValue != eSignMarks.Blank && !AriiveTOBorder);

            if (!AriiveTOBorder && previousTokenValue != eSignMarks.Blank && possibleNumberOfTokensReplaced > 1)
            {
                o_NumberOfTokenReplaced = possibleNumberOfTokensReplaced;
                o_NewBoardStatus        = boardStateWithUpdatedDirection;
            }
        }
예제 #17
0
    bool IsConnectedCellOnDirection(int tileX, int tileY, eMoveDirection direction)
    {
        //진행방향으로만 붙어있는 타일 체크
        sPosition position;

        position.x = tileX;
        position.y = tileY;

        sPosition nextPosition = GlobalUtility.GetPositionByDirection(position, (eMoveDirection)direction);

        if (0 <= nextPosition.x && nextPosition.x < _width && 0 <= nextPosition.y && nextPosition.y < _height)
        {
            if (false == GetTileCell(nextPosition.x, nextPosition.y).IsPathfindable())
            {
                return(true);
            }
        }
        else
        {
            return(true);    //맵 밖
        }
        return(false);
    }
예제 #18
0
    sPosition GetPositionByDirection(sPosition curPosition, eMoveDirection direction)
    {
        sPosition newPosition = curPosition;

        switch (direction)
        {
        case eMoveDirection.LEFT:
            newPosition.x--;
            break;

        case eMoveDirection.RIGHT:
            newPosition.x++;
            break;

        case eMoveDirection.UP:
            newPosition.y--;
            break;

        case eMoveDirection.DOWN:
            newPosition.y++;
            break;
        }
        return(newPosition);
    }
예제 #19
0
    void CreateRandomMaze()
    {
        float tileSize = 32.0f;

        TextAsset scriptAsset = Resources.Load <TextAsset>("Data/Map1Data_layer01");

        string[] records = scriptAsset.text.Split('\n');

        {
            string[] token = records[0].Split(',');
            _width  = int.Parse(token[1]);
            _height = int.Parse(token[2]);
        }
        _tileCellList = new TileCell[_height, _width];

        // 1층
        for (int y = 0; y < _height; y++)
        {
            int      line  = y + 2;
            string[] token = records[line].Split(',');
            for (int x = 0; x < _width; x++)
            {
                int spriteIndex = int.Parse(token[x]);

                GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefbas);
                tileGameObject.transform.SetParent(transform);
                tileGameObject.transform.localScale    = Vector3.one;
                tileGameObject.transform.localPosition = Vector3.zero;

                TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                tileObject.Init(_sprityArray[spriteIndex]);
                tileObject.SetTilePosition(x, y);

                _tileCellList[y, x] = new TileCell();
                GetTileCell(x, y).Init(x, y);
                GetTileCell(x, y).SetPosition(x * tileSize / 100.0f, y * tileSize / 100.0f);
                GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
            }
        }

        // 2층
        // 준비 작업
        for (int y = 0; y < _height; y++)
        {
            if (0 == (y % 2))
            {
                for (int x = 0; x < _width; x++)
                {
                    if (0 == (x % 2))
                    {
                        int spriteIndex = 139;

                        GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefbas);
                        tileGameObject.transform.SetParent(transform);
                        tileGameObject.transform.localScale    = Vector3.one;
                        tileGameObject.transform.localPosition = Vector3.zero;

                        TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                        tileObject.Init(_sprityArray[spriteIndex]);
                        tileObject.SetCanMove(false);
                        tileObject.SetTilePosition(x, y);

                        GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
                    }
                }
            }
        }

        // 가지치기 알고리즘으로 미로 생성
        for (int y = 0; y < _height; y++)
        {
            for (int x = 0; x < _width; x++)
            {
                if (false == GetTileCell(x, y).CanMove())
                {
                    // 연결되지 않은 블럭일 경우
                    if (false == IsConnectedCell(x, y))
                    {
                        // 랜덤한 한 방향으로 블럭이 연결될 때 까지 이어준다
                        eMoveDirection direction = (eMoveDirection)Random.Range(1, (int)eMoveDirection.DOWN + 1);

                        int searchTileX = x;
                        int searchTileY = y;
                        while (false == IsConnectedCell(searchTileX, searchTileY))
                        {
                            switch (direction)
                            {
                            case eMoveDirection.LEFT: searchTileX--; break;

                            case eMoveDirection.RIGHT: searchTileX++; break;

                            case eMoveDirection.UP: searchTileY--; break;

                            case eMoveDirection.DOWN: searchTileY++; break;
                            }
                            if (0 <= searchTileX && searchTileX < _width && 0 <= searchTileY && searchTileY < _height)
                            {
                                // 새로운 블럭을 심는다.
                                int spriteIndex = 139;

                                GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefbas);
                                tileGameObject.transform.SetParent(transform);
                                tileGameObject.transform.localScale    = Vector3.one;
                                tileGameObject.transform.localPosition = Vector3.zero;

                                TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                                tileObject.Init(_sprityArray[spriteIndex]);
                                tileObject.SetCanMove(false);
                                tileObject.SetTilePosition(searchTileX, searchTileY);

                                GetTileCell(searchTileX, searchTileY).AddObject(eTileLayer.GROUND, tileObject);
                            }
                        }
                    }
                }
            }
        }

        /*
         * scriptAsset = Resources.Load<TextAsset>("Data/Map1Data_layer02");
         * records = scriptAsset.text.Split('\n');
         * for (int y = 0; y < _height; y++)
         * {
         *  int line = y + 2;
         *  string[] token = records[line].Split(',');
         *  for (int x = 0; x < _width; x++)
         *  {
         *      int spriteIndex = int.Parse(token[x]);
         *
         *      if (0 <= spriteIndex)
         *      {
         *          GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefbas);
         *          tileGameObject.transform.SetParent(transform);
         *          tileGameObject.transform.localScale = Vector3.one;
         *          tileGameObject.transform.localPosition = Vector3.zero;
         *
         *          TileObject tileObject = tileGameObject.GetComponent<TileObject>();
         *          tileObject.Init(_sprityArray[spriteIndex]);
         *          tileObject.SetCanMove(false);
         *          tileObject.SetTilePosition(x, y);
         *
         *          GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
         *      }
         *  }
         * }
         */
    }
예제 #20
0
    void CreateRandomMaze()
    {
        float tileSize = 32.0f;

        //1층
        {
            TextAsset scriptAsset = Resources.Load <TextAsset>("Data/MapData_layer1");
            string[]  records     = scriptAsset.text.Split('\n');

            {
                string[] token = records[0].Split(',');
                _width  = int.Parse(token[1]);
                _height = int.Parse(token[2]);
            }
            _tileCellList = new TileCell[_height, _width];

            for (int y = 0; y < _height; y++)
            {
                int      line  = y + 2;
                string[] token = records[line].Split(',');
                for (int x = 0; x < _width; x++)
                {
                    int spriteIndex = int.Parse(token[x]);

                    GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefabs);
                    tileGameObject.transform.SetParent(transform);
                    tileGameObject.transform.localScale    = Vector3.one;
                    tileGameObject.transform.localPosition = Vector3.zero;

                    TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                    tileObject.Init(_spriteArray[spriteIndex]);
                    tileObject.SetTilePosition(x, y);

                    _tileCellList[y, x] = new TileCell();
                    GetTileCell(x, y).Init();
                    //GetTileCell(x, y).SetPosition(x * tileSize / 100.0f, -(y * tileSize / 100.0f));
                    GetTileCell(x, y).SetPosition(x * tileSize / 32.0f, -(y * tileSize / 32.0f));
                    GetTileCell(x, y).SetTilePosition(x, y);
                    GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
                }
            }
        }

        //2층(랜덤)
        {
            //1. 일정간격으로 기둥을 박는다.
            int interval = 4;
            for (int y = 0; y < _height; y++)
            {
                if (0 == y % interval)
                {
                    for (int x = 0; x < _width; x++)
                    {
                        if (0 == x % interval)
                        {
                            int spriteIndex = 252;

                            GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefabs);
                            tileGameObject.transform.SetParent(transform);
                            tileGameObject.transform.localScale    = Vector3.one;
                            tileGameObject.transform.localPosition = Vector3.zero;

                            TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                            tileObject.Init(_spriteArray[spriteIndex]);
                            tileObject.SetTilePosition(x, y);
                            tileObject.SetCanMove(false);

                            GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
                        }
                    }
                }
            }

            //2. 가지치기로 미로 생성
            for (int y = 0; y < _height; y++)
            {
                for (int x = 0; x < _width; x++)
                {
                    if (false == GetTileCell(x, y).CanMove())    //기둥
                    {
                        //연결되지 않은 기둥일 경우
                        if (false == IsConnectedCell(x, y))
                        {
                            //랜덤한 한 방향으로 기둥이 연결될떄까지 이어준다
                            eMoveDirection direction = (eMoveDirection)Random.Range((int)eMoveDirection.LEFT, (int)eMoveDirection.DOWN + 1);

                            sPosition searchPosition;
                            searchPosition.x = x;
                            searchPosition.y = y;

                            //while (false == IsConnectedCell(searchPosition.x, searchPosition.y))
                            while (false == IsConnectedCellOnDirection(searchPosition.x, searchPosition.y, direction))
                            {
                                sPosition nextPosition = GlobalUtility.GetPositionByDirection(searchPosition, (eMoveDirection)direction);

                                if (0 <= nextPosition.x && nextPosition.x < _width && 0 <= nextPosition.y && nextPosition.y < _height)
                                {
                                    //새로운 기둥을 심는다.
                                    int spriteIndex = 252;

                                    GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefabs);
                                    tileGameObject.transform.SetParent(transform);
                                    tileGameObject.transform.localScale    = Vector3.one;
                                    tileGameObject.transform.localPosition = Vector3.zero;

                                    TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                                    tileObject.Init(_spriteArray[spriteIndex]);
                                    tileObject.SetTilePosition(nextPosition.x, nextPosition.y);
                                    tileObject.SetCanMove(false);

                                    GetTileCell(nextPosition.x, nextPosition.y).AddObject(eTileLayer.GROUND, tileObject);
                                }

                                direction      = (eMoveDirection)Random.Range((int)eMoveDirection.LEFT, (int)eMoveDirection.DOWN + 1);
                                searchPosition = nextPosition;
                            }
                        }
                    }
                }
            }
        }
    }
예제 #21
0
    void CreateRandomMaze()
    {
        float scale    = 1.0f; // 화면에 보이는 크기 배수
        float tileSize = 32.0f * scale;

        _tileScale = new Vector3(scale, scale);
        //1층
        TextAsset scriptAsset = Resources.Load <TextAsset>("Data/Map1Data_layer1");

        string[] records = scriptAsset.text.Split('\n');

        {
            string[] token = records[0].Split(',');
            _width  = int.Parse(token[1]);
            _height = int.Parse(token[2]);
        }

        _tileCellList = new TileCell[_height, _width];
        for (int y = 0; y < _height; y++)
        {
            int      line  = y + 2;
            string[] token = records[line].Split(',');
            for (int x = 0; x < _width; x++)
            {
                int spriteIndex = int.Parse(token[x]);

                GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefabs);
                tileGameObject.transform.SetParent(transform);
                tileGameObject.transform.localScale    = _tileScale;
                tileGameObject.transform.localPosition = Vector3.zero;

                TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                tileObject.Init(_spriteArray[spriteIndex], x, y);

                _tileCellList[y, x] = new TileCell();
                GetTileCell(x, y).Init();
                //setPosition 합치기
                GetTileCell(x, y).SetPosition(x * tileSize / 100.0f, -y * tileSize / 100.0f);
                GetTileCell(x, y).SetTilePosition(x, y);

                GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
            }
        }
        //2층
        {
            int interval = 2;
            //기둥!
            for (int y = 0; y < _height; y++)
            {
                if (y % interval == 0)
                {
                    for (int x = 0; x < _width; x++)
                    {
                        if (x % interval == 0)
                        {
                            int        spriteIndex    = 127;
                            GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefabs);
                            tileGameObject.transform.SetParent(transform);
                            tileGameObject.transform.localScale    = _tileScale;
                            tileGameObject.transform.localPosition = Vector3.zero;

                            TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                            tileObject.Init(_spriteArray[spriteIndex], x, y);
                            tileObject.SetCanMove(false);
                            GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
                        }
                    }
                }
            }
            //가지치기
            for (int y = 0; y < _height; y++)
            {
                for (int x = 0; x < _width; x++)
                {
                    if (false == GetTileCell(x, y).CanMove())
                    {
                        sPosition tilePosition;
                        tilePosition.x = x;
                        tilePosition.y = y;
                        // 연결 안된 블록이면
                        if (false == IsConnectedCell(tilePosition))
                        {
                            //랜덤한 방향으로 연결될때까지 이어준다
                            eMoveDirection direction = (eMoveDirection)Random.Range(1, (int)eMoveDirection.DOWN + 1);

                            sPosition curPosition;
                            curPosition.x = x;
                            curPosition.y = y;
                            while (false == IsConnectedCell(curPosition))
                            {
                                int i = 0;
                                while (i < interval - 1)
                                {
                                    curPosition = GetDirectionTilePosition((eMoveDirection)direction, curPosition);
                                    if (0 <= curPosition.x && curPosition.x < _width && 0 <= curPosition.y && curPosition.y < _height)
                                    {
                                        int        spriteIndex    = 127;
                                        GameObject tileGameObject = GameObject.Instantiate(TileObjectPrefabs);
                                        tileGameObject.transform.SetParent(transform);
                                        tileGameObject.transform.localScale    = _tileScale;
                                        tileGameObject.transform.localPosition = Vector3.zero;

                                        TileObject tileObject = tileGameObject.GetComponent <TileObject>();
                                        tileObject.Init(_spriteArray[spriteIndex], curPosition.x, curPosition.y);
                                        tileObject.SetCanMove(false);
                                        GetTileCell(curPosition.x, curPosition.y).AddObject(eTileLayer.GROUND, tileObject);
                                    }
                                    i++;
                                }
                            }
                        }
                    }
                }
            }
            //스프라이트 부드럽게
            for (int y = 0; y < _height; y++)
            {
                for (int x = 0; x < _width; x++)
                {
                    sPosition tilePosition;
                    tilePosition.x = x;
                    tilePosition.y = y;
                    if (true == IsConnectedCell(tilePosition))
                    {
                    }
                }
            }
        }
    }
예제 #22
0
        private Coordinates getCellCoordinateToProcced(Coordinates i_CurrentCoordinate, eMoveDirection i_CurrentDirection)
        {
            Coordinates nextCoordinateInDirection = new Coordinates();

            switch (i_CurrentDirection)
            {
            case eMoveDirection.TopRightDirection:
            {
                moveCoordinateTopRightDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.TopDirection:
            {
                moveCoordinateTopDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.TopLeftDirection:
            {
                moveCoordinateTopLeftDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.LeftDirection:
            {
                moveCoordinateLeftDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.LeftDownDirection:
            {
                moveCoordinateLeftDownDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.DownDirection:
            {
                moveCoordinateDownDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.RightDownDirection:
            {
                moveCoordinateRightDownDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;

            case eMoveDirection.RightDirection:
            {
                moveCoordinateRightDirection(ref nextCoordinateInDirection, i_CurrentCoordinate);
            }

            break;
            }

            return(nextCoordinateInDirection);
        }
예제 #23
0
    public void FindPath(eFindMode mode, eFindMethod method)
    {
        bool isViewRange = (eFindMode.VIEW_MOVERANGE == mode || eFindMode.VIEW_ATTACKRANGE == mode);

        while (0 != _pathfindingQueue.Count)
        {
            sPathCommand command = _pathfindingQueue[0];
            _pathfindingQueue.RemoveAt(0);

            if (false == command.tileCell.IsVisit())
            {
                command.tileCell.Visit();

                //FIND TARGET
                if (eFindMode.FIND_PATH == mode)
                {
                    if ((_targetTileCell.GetTileX() == command.tileCell.GetTileX()) &&
                        (_targetTileCell.GetTileY() == command.tileCell.GetTileY()))
                    {
                        _reverseTileCell = _targetTileCell;
                        return;
                    }
                }


                for (eMoveDirection direction = 0; direction <= eMoveDirection.DOWN; direction++)
                {
                    sPosition curPosition;
                    curPosition.x = command.tileCell.GetTileX();
                    curPosition.y = command.tileCell.GetTileY();
                    sPosition nextPosition = GlobalUtility.GetPositionByDirection(curPosition, direction);

                    TileMap  map          = GameManager.Instance.GetMap();
                    TileCell nextTileCell = map.GetTileCell(nextPosition.x, nextPosition.y);

                    if (CheckPrecondition(mode, nextTileCell, _targetTileCell))
                    {
                        float distanceFromStart = command.tileCell.GetDistanceFromStart()
                                                  + command.tileCell.GetDistanceWeight();
                        float heuristic = CalcHeuristic(method, distanceFromStart,
                                                        command.tileCell, nextTileCell, _targetTileCell);

                        if (isViewRange && (_range < distanceFromStart))
                        {
                            return;
                        }

                        if (null == nextTileCell.GetPrevTileCell())
                        {
                            nextTileCell.SetDistanceFromStart(distanceFromStart);
                            nextTileCell.SetPrevTileCell(command.tileCell);

                            sPathCommand newCommand;
                            newCommand.tileCell  = nextTileCell;
                            newCommand.heuristic = heuristic;
                            PushCommand(newCommand);

                            //검색범위를 그려준다.
                            if (isViewRange)
                            {
                                DrawSearchTile(nextTileCell);
                            }
                        }
                    }
                }
            }
        }
    }
예제 #24
0
 public void SetNextDirection(eMoveDirection direction)
 {
     _nextDirection = direction;
 }
예제 #25
0
    public void CreateRandomMaps()
    {
        float _tileSize = 32.0f;

        TextAsset scriptAsset = Resources.Load <TextAsset>("Data/NewMapData1_layer1");

        string[] records = scriptAsset.text.Split('\n');

        {
            string[] token = records[0].Split(',');
            _width  = int.Parse(token[1]);
            _height = int.Parse(token[2]);
        }
        _tileCellList = new TileCell[_height, _width];

        for (int y = 0; y < _height; y++)
        {
            int      line  = y + 2;
            string[] token = records[line].Split(',');

            for (int x = 0; x < _width; x++)
            {
                int spriteIndex = int.Parse(token[x]);

                GameObject tileGameObj = GameObject.Instantiate(TileObjPrefabs);
                tileGameObj.transform.SetParent(transform);
                tileGameObj.transform.localScale = Vector3.one;
                tileGameObj.transform.position   = Vector3.zero;

                TileObject tileObject = tileGameObj.GetComponent <TileObject>();
                tileObject.Init(_spriteArray[spriteIndex]);
                tileObject.SetTilePosition(x, y);
                _tileCellList[y, x] = new TileCell();
                GetTileCell(x, y).Init();
                GetTileCell(x, y).SetPosition(x * _tileSize / 100.0f, -(y * _tileSize / 100.0f));
                GetTileCell(x, y).SetTile(x, y);
                GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObject);
            }
        }

        {
            int interval = 3;

            for (int y = 0; y < _height; y++)
            {
                if (y % interval == 0)
                {
                    for (int x = 0; x < _width; x++)
                    {
                        if (x % interval == 0)
                        {
                            int spriteIndex = 7;

                            GameObject tileGameObj = Instantiate(TileObjPrefabs);
                            tileGameObj.transform.SetParent(transform);
                            tileGameObj.transform.localScale    = Vector3.one;
                            tileGameObj.transform.localPosition = Vector3.zero;

                            GameObject lightObj = Instantiate(LightObjPrefabs);
                            AddLighting(lightObj, tileGameObj);


                            TileObject tileObj = tileGameObj.GetComponent <TileObject>();
                            tileObj.Init(_spriteArray[spriteIndex]);
                            tileObj.SetCanMove(false);

                            GetTileCell(x, y).AddObject(eTileLayer.GROUND, tileObj);
                        }
                    }
                }
            }
        }

        for (int y = 0; y < _height; y++)
        {
            for (int x = 0; x < _width; x++)
            {
                if (GetTileCell(x, y).CanMove() == false)
                {
                    if (IsConnectedCell(x, y) == false)
                    {
                        eMoveDirection direction = (eMoveDirection)Random.Range(1, (int)eMoveDirection.DOWN);

                        int searchTileX = x;
                        int searchTileY = y;

                        while (IsConnectedCell(searchTileX, searchTileY) == false)
                        {
                            switch (direction)
                            {
                            case eMoveDirection.LEFT:
                                searchTileX--;
                                break;

                            case eMoveDirection.RIGHT:
                                searchTileX++;
                                break;

                            case eMoveDirection.UP:
                                searchTileY--;
                                break;

                            case eMoveDirection.DOWN:
                                searchTileY++;
                                break;
                            }

                            if (0 <= searchTileX && searchTileX < _width && 0 <= searchTileY && searchTileY <= _height)
                            {
                                int spriteIndex = 7;

                                GameObject tileGameObj = Instantiate(TileObjPrefabs);
                                tileGameObj.transform.SetParent(transform);
                                tileGameObj.transform.localScale    = Vector3.one;
                                tileGameObj.transform.localPosition = Vector3.zero;

                                TileObject tileObj = tileGameObj.GetComponent <TileObject>();
                                tileObj.Init(_spriteArray[spriteIndex]);
                                tileObj.SetCanMove(false);

                                GetTileCell(searchTileX, searchTileY).AddObject(eTileLayer.GROUND, tileObj);
                            }
                        }
                    }
                }
            }
        }
    }