'##########ЯДРО ГРАФИЧЕСКОГО ДВИЖКА##########
Sub fillWithTextures()
Dim cntRow As Integer, cntCol As Integer, pixOffsetX As Double, pixOffsetY As Double, _
mapBlockX As Integer, mapBlockY As Integer, texXOffset As Integer, texYOffset As Integer, _
texNumber As Integer, arrBlockTex() As Variant
Dim cntSprites As Integer, spriteOffsetX As Integer, spriteOffsetY As Integer, _
spriteNumber As Integer
ReDim arrRender(main.screenH, main.screenW)
For cntRow = 1 To main.screenH
For cntCol = 1 To main.screenW
'Считаем смещение пикселя экрана относительно координат камеры
pixOffsetX = main.cameraX + cntCol
pixOffsetY = main.cameraY + cntRow
'считаем спрайты
For cntSprites = 1 To UBound(arrMapSprites(), 1)
'считаем смещение спрайта относительно пикселя
spriteOffsetX = pixOffsetX - arrMapSprites(cntSprites, 1)
spriteOffsetY = pixOffsetY - arrMapSprites(cntSprites, 2)
'если пиксель содержит спрайт
If spriteOffsetX >= 0 And spriteOffsetY >= 0 And spriteOffsetX + pixOffsetX < pixOffsetX + main.blockSize _
And spriteOffsetY + pixOffsetY < pixOffsetY + main.blockSize Then
'если элемент спрайта не пуст
If arrSprites((spriteOffsetY + blockSize * arrMapSprites(cntSprites, 3)) + 1, spriteOffsetX + 1) <> 0 Then
arrRender(cntRow, cntCol) = arrSprites((spriteOffsetY + blockSize * arrMapSprites(cntSprites, 3)) + 1, spriteOffsetX + 1)
End If
End If
Next
'рисуем тайлы
If (pixOffsetX > 0 And pixOffsetX < main.mapWidth) And _
(pixOffsetY > 0 And pixOffsetY < main.mapHeight) Then
'расчет тайла, в который входит пиксель
mapBlockX = WorksheetFunction.RoundUp(pixOffsetX / main.blockSize, 0)
mapBlockY = WorksheetFunction.RoundUp(pixOffsetY / main.blockSize, 0)
'определяем номер текстуры
texNumber = arrMapTiles(mapBlockY, mapBlockX)
'Определение цвета текстуры для пикселя
texXOffset = getTexOffset(pixOffsetX) + 1
texYOffset = getTexOffset(pixOffsetY) + 1
If arrMapTiles(mapBlockY, mapBlockX) <> "" And arrTiles(texNumber * _
main.blockSize + texYOffset, texXOffset) <> "" And arrRender(cntRow, cntCol) = "" Then
arrRender(cntRow, cntCol) = arrTiles(texNumber * main.blockSize + texYOffset, texXOffset)
End If
End If
Next
Next
End Sub