private void RotateMinoQueue() { MinoSide oldSide = _minoSides.Dequeue(); _currentRotateDirection = _minoSides.Peek(); _minoSides.Enqueue(oldSide); }
private void CreateMino() { Mino mino = ScriptableObject.CreateInstance <Mino>(); List <Vector2Int> localCoordinates = CalculateLocalCoordinates(); //BlocksLocalCoordinates Vector2IntList vectorList = new Vector2IntList(); vectorList.List.AddRange(localCoordinates); mino.AddPairInCreating(MinoSide.Bottom, vectorList); List <Vector2Int> rotateCoordinates = new List <Vector2Int>(localCoordinates); ShowCollectiction(rotateCoordinates); Debug.Log(Enum.GetNames(typeof(MinoSide)).Length); for (int index = 1; index < Enum.GetNames(typeof(MinoSide)).Length; index++) { Debug.Log("rotate"); MinoSide key = (MinoSide)index; rotateCoordinates = CalculateRotateDirectionCoordinates(rotateCoordinates); vectorList = new Vector2IntList(); vectorList.List.AddRange(rotateCoordinates); mino.AddPairInCreating(key, vectorList); ShowCollectiction(rotateCoordinates); } SaveMinoAsset(mino); }
private void InitializeRotateVariables() { foreach (MinoSide side in (MinoSide[])Enum.GetValues(typeof(MinoSide))) { _minoSides.Enqueue(side); } _currentRotateDirection = _minoSides.Peek(); }
public List <Vector2Int> GetCheckBlockCoordinates() { Queue <MinoSide> checkSides = new Queue <MinoSide>(_minoSides); checkSides.Dequeue(); MinoSide newRotateDirection = checkSides.Peek(); return(_mino.BlocksLocalCoordinates[newRotateDirection]); }
private void Update() { if (!Pause.IsPause) { if (TARGET_TIME_AMOUNT < _currentTimeAmount) { Vector2Int direction = new Vector2Int(0, 1); MinoSide side = MinoSide.Bottom; MoveMinoWithChecking(side, direction); _currentTimeAmount = 0f; } else { _currentTimeAmount += Time.deltaTime * _minoFallSpeed; } ActionData actionData = _minoInput.DetectAction(); if (actionData.isActionHappened) { if (actionData.action == MoveAction.Rotate) { List <Vector2Int> checkBlockCoordinates = _minoModel.GetCheckBlockCoordinates(); if (_fieldModel.IsRotateInField(_minoModel.BlocksCoordinates[0], checkBlockCoordinates)) { if (_fieldModel.IsRotatePossible(_minoModel.BlocksCoordinates[0], checkBlockCoordinates)) { _minoModel.Rotate(); } } } else if (actionData.action == MoveAction.ToBottomEnd) { Vector2Int distance = _fieldModel.CalculateDistanceToBottom(_minoModel.BlocksCoordinates); _minoModel.Move(distance); UpdateGameState(); } else if (actionData.action == MoveAction.Right) { Vector2Int direction = new Vector2Int(1, 0); MinoSide side = MinoSide.Right; MoveMinoWithChecking(side, direction); } else if (actionData.action == MoveAction.Left) { Vector2Int direction = new Vector2Int(-1, 0); MinoSide side = MinoSide.Left; MoveMinoWithChecking(side, direction); } } } }
private void MoveMinoWithChecking(MinoSide side, Vector2Int direction) { bool isInField = _fieldModel.IsMoveInField(direction, _minoModel.BlocksCoordinates); bool isMovingPossible = true; if (isInField) { isMovingPossible = _fieldModel.IsMovePossible(direction, _minoModel.BlocksCoordinates); if (isMovingPossible) { _minoModel.Move(direction); } } else if (!isInField && (side == MinoSide.Left || side == MinoSide.Right)) { } if (!(isInField && isMovingPossible) && side == MinoSide.Bottom) { UpdateGameState(); } }
public void AddPairInCreating(MinoSide key, Vector2IntList value) { _blocksLocalCoordinates.Add(key, value); }