1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
#ScreenWidth = 800
#ScreenHeight = 600
#ScrollSpeed=5
#TailleMapX=256
#TailleMapY=256
#TailleTileX = 32
#TailleTileY = 32
#Offset = -16
#Levelling = 5
Structure World
X.i
Y.i
Z.i
EndStructure
Global Dim Map.World(#TailleMapX*#TailleMapY)
Global imgMousePointer.i
Declare Max(nb1.l,nb2.l)
Declare InitMap()
Declare DrawMap()
Declare UpdateMouse()
Macro DebugTxt()
StartDrawing(ScreenOutput())
DrawText(0,0,"x " + Str(MouseX()) + " - y " + Str(MouseY()))
DrawText(0,20,"x1 " + Str(MouseX() - (MouseX() % #TailleTileX)) + " y1 " + Str(MouseY() - (MouseY() % #TailleTileY)))
StopDrawing()
EndMacro
Procedure.l Minimum(nb1.l, nb2.l)
If nb1<nb2
Resultat.l = nb1
Else
Resultat.l = nb2
EndIf
ProcedureReturn Resultat
EndProcedure
Procedure.l Maximum(nb1.l, nb2.l)
If nb1>nb2
Resultat.l = nb1
Else
Resultat.l = nb2
EndIf
ProcedureReturn Resultat
EndProcedure
;- Init Resources
If InitSprite()=0 Or InitMouse()=0 Or InitKeyboard()=0
MessageRequester("Erreur","Impossible d'initialiser DirectX")
End
EndIf
;- Main loop
If OpenWindow(0, 0, 0, 800,600, "3D iso viewer", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,#ScreenWidth+1,#ScreenHeight+1,1,0,0)
imgMousePointer = LoadSprite(#PB_Any,"mouse.bmp",0)
TransparentSpriteColor(imgMousePointer, RGB(255, 0, 255))
DisplayTransparentSprite(imgMousePointer,500,440)
InitMap()
Repeat
While WindowEvent()
Wend
ExamineKeyboard() : ExamineMouse() : ClearScreen($0)
DrawMap()
UpdateMouse()
DebugTxt()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndIf
Procedure InitMap()
a=0
For j=0 To #ScreenHeight Step #TailleTileY
For i=0 To #ScreenWidth Step #TailleTileX
Map(a)\X = i
Map(a)\Y = j
Map(a)\z = 0
a+1
Next i
Next j
EndProcedure
Procedure DrawMap()
StartDrawing(ScreenOutput())
For i =0 To #TailleMapX*#TailleMapY
Plot(Map(i)\X,Map(i)\Y + Map(i)\z,$FF00FF)
Next i
StopDrawing()
EndProcedure
Procedure UpdateMouse()
DisplayTransparentSprite(imgMousePointer,MouseX(),MouseY())
; calculate map(i) current position under mouse
tmp1=(MouseX() - (MouseX() % #TailleTileX))/#TailleTileX
tmp2=(MouseY() - (MouseY() % #TailleTileY))/#TailleTileY
tmp3=(tmp2 * ((#ScreenWidth/#TailleTileX)+1) + tmp1)
If MouseButton(#PB_MouseButton_Left)
StartDrawing(ScreenOutput())
DrawText(0,40,"LEFT")
DrawText(0,60,Str(tmp1) + " " + Str(tmp2) + " " + Str(tmp3))
map(tmp3)\z + #Levelling
StopDrawing()
EndIf
If MouseButton(#PB_MouseButton_Middle)
StartDrawing(ScreenOutput())
DrawText(40,40,"MIDDLE")
DrawText(0,60,Str(tmp1) + " " + Str(tmp2) + " " + Str(tmp3))
StopDrawing()
EndIf
If MouseButton(#PB_MouseButton_Right)
StartDrawing(ScreenOutput())
DrawText(100,40,"RIGHT")
DrawText(0,60,Str(tmp1) + " " + Str(tmp2) + " " + Str(tmp3))
map(tmp3)\z - #Levelling
StopDrawing()
EndIf
; point1X = Minimum((MouseX()-#offset) - ((MouseX()-#offset) % #TailleTileX),800)
; point2X = Minimum((MouseX()-#offset) - ((MouseX()-#offset) % #TailleTileX) + #TailleTileX,800)
; point1Y = Minimum((MouseY()-#offset) - ((MouseY()-#offset) % #TailleTileY),600)
; point2Y = Minimum((MouseY()-#offset) - ((MouseY()-#offset) % #TailleTileY) + #TailleTileY,600)
; isoX1 = point1X - point1Y
; isoX2 = point2X - point2Y
; isoY1 = (point1X+point1Y)/2
; isoY2 = (point2X+point2Y)/2
;
; StartDrawing(ScreenOutput())
; Plot(point1X,point1Y,$FFFFFF)
; Plot(point2X,point2Y,$FFFFFF)
; Plot(point1X,point2Y,$FFFFFF)
; Plot(point2X,point1Y,$FFFFFF)
; StopDrawing()
point1X = Map(tmp3)\X
point1Y = Map(tmp3)\Y + Map(tmp3)\z
point2X = Map(tmp3+1)\X
point2Y = Map(tmp3+1)\Y + Map(tmp3+1)\z
point3X = Map(tmp3+(#ScreenWidth/#TailleTileX)+1)\X
point3Y = Map(tmp3+(#ScreenWidth/#TailleTileX)+1)\Y+Map(tmp3+(#ScreenWidth/#TailleTileX)+1)\z
point4X = Map(tmp3+(#ScreenWidth/#TailleTileX)+2)\X
point4Y =Map(tmp3+(#ScreenWidth/#TailleTileX)+2)\Y+Map(tmp3+(#ScreenWidth/#TailleTileX)+2)\z
StartDrawing(ScreenOutput())
LineXY(point1X,point1Y,point2X,point2Y,$FFFFFF)
LineXY(point1X,point1Y,point3X,point3Y,$FFFFFF)
LineXY(point3X,point3Y,point4X,point4Y,$FFFFFF)
LineXY(point2X,point2Y,point4X,point4Y,$FFFFFF)
StopDrawing()
EndProcedure |
Partager