private bool CheckAcceptableBlockState(Vector3Int position, Quaternion rotation, BlockShapeData shape) { if (!_levelPhysics.CheckShapeInsideLevelBounds(position, rotation, shape)) { return(false); } if (_levelPhysics.CheckOverlappingLevelBlocks(position, rotation, shape)) { return(false); } return(true); }
public bool TrySpawnBlock() { if (NextBlock == null) { NextBlock = CreateRandomBlock(); } if (_levelPhysics.CheckOverlappingLevelBlocks(NextBlock.Position, NextBlock.Rotation, NextBlock.Shape)) { return(false); } _blockStorage.AddBlock(NextBlock); NextBlock = CreateRandomBlock(); OnNextBlockChange?.Invoke(); OnBlockSpawned?.Invoke(); return(true); }
private int ShiftUntilBorderOrBlockCollision(IBlockModel block, Vector3Int direction) { var pos = block.Position; var offset = 1; for (; ; offset++) { var shift = direction * offset; if (_levelPhysics.CheckOverlappingLevelBlocks(pos + shift, block.Rotation, block.Shape)) { break; } if (!_levelPhysics.CheckShapeInsideLevelBounds(pos + shift, block.Rotation, block.Shape)) { break; } } return(offset - 1); }