Je veut que la souris dépasse le Screen de 650x600 pour aller dans celle de 800x600 pour les gadgets. Voici le code:
Code : Tout sélectionner
;/Allas
;{/ Variable
#TailleMapX = 100
#TailleMapY = 100
#TailleTileX = 64
#TailleTileY = 32
#MiniMapX = 11
#MiniMapY = (800-150)+11
#Window_Main = 0
#LeftOffset = 150
#TopOffset = 0
;}
;/ Variable Windows
Enumeration
#Window_Tools
#StatusBar_0
EndEnumeration
;/ Variable Images+Gadgets
Enumeration
#Selector
#Cursor
#MiniMap
#Grass1
#Grass2
#Grass3
#Grass4
#Grass5
#Grass6
#Grass7
#Grass8
#Grass9
#Grass10
#Grass11
#Grass12
#Grass13
#Grass14
#Grass15
#Grass16
#Grass17
#Grass18
#Grass19
#Grass20
#Grass21
#Grass22
#Grass23
#Grass24
#Grass25
#Grass26
#Grass27
#Grass28
#Grass29
#Grass30
#Grass31
#Grass32
#Grass33
#Grass34
#Grass35
#Grass36
#Grass37
#Grass38
#Grass39
#Grass40
#Grass41
#Grass42
#Grass43
#Grass44
#Grass45
#Grass46
#Road1
#Road2
#Road3
#Road4
#Road5
#Road6
#Road7
#Road8
#Road9
#Road10
#Road11
#Bloc_Petrol
#Water_0
#Forest
#Coast_0
#Coast_1
#Coast_2
#Coast_3
#Building
#GUI_MiniMap
#GUI_MiniMap_Aera
#GUI_Commander
EndEnumeration
;/ Variable Events
Enumeration
#Menu
#Menu_2
#Reprendre
#Minimize
#Maximize
#Close
EndEnumeration
;/ Structure
Structure World
x.l
Y.l
type.l
EndStructure
InitSprite()
InitKeyboard()
InitMouse()
;{/ Declare
Declare CreateMapIsometric(Taille_Map_X.l,Taille_Map_Y.l,TileType.l)
Declare UpdateMap()
Declare ControlInput()
Declare MakeMiniMap()
Declare UpdateMiniMap(x,Y)
Declare Coast_Auto(x,Y)
Declare Menu()
Declare Ouvre_Fenetre_principale()
UsePNGImageDecoder()
Global Dim Map.World(#TailleMapX,#TailleMapY)
;}
;/ Ouvres Fenetres
Ouvre_Fenetre_principale()
OpenWindowedScreen(WindowID(#Window_Main),150,0, 650, 600,1,0,0)
TransparentSpriteColor(-1,RGB(255,0,255))
;{/ LoadImages
IncludePath "C:\Program Files\Be_War\"
LoadSprite(#Selector,"Gfx\Selector.bmp")
LoadSprite(#Cursor,"Gfx\Cursor.bmp")
LoadSprite(#Grass1,"Gfx\Grass2\02A20.bmp")
LoadSprite(#Grass2,"Gfx\Grass2\02A24.bmp")
LoadSprite(#Grass3,"Gfx\Grass2\02A30.bmp")
LoadSprite(#Grass4,"Gfx\Grass2\02A34.bmp")
LoadSprite(#Grass5,"Gfx\Grass2\02A40.bmp")
LoadSprite(#Grass6,"Gfx\Grass2\02A41.bmp")
LoadSprite(#Grass7,"Gfx\Grass2\02A42.bmp")
LoadSprite(#Grass8,"Gfx\Grass2\02A43.bmp")
LoadSprite(#Grass9,"Gfx\Grass2\02A44.bmp")
LoadSprite(#Grass10,"Gfx\Grass2\02b20.bmp")
LoadSprite(#Grass11,"Gfx\Grass2\02b24.bmp")
LoadSprite(#Grass12,"Gfx\Grass2\02b30.bmp")
LoadSprite(#Grass13,"Gfx\Grass2\02b34.bmp")
LoadSprite(#Grass14,"Gfx\Grass2\02b40.bmp")
LoadSprite(#Grass15,"Gfx\Grass2\02b41.bmp")
LoadSprite(#Grass16,"Gfx\Grass2\02b42.bmp")
LoadSprite(#Grass17,"Gfx\Grass2\02b43.bmp")
LoadSprite(#Grass18,"Gfx\Grass2\02b44.bmp")
LoadSprite(#Grass19,"Gfx\Grass2\03A20.bmp")
LoadSprite(#Grass19,"Gfx\Grass2\03A30.bmp")
LoadSprite(#Grass20,"Gfx\Grass2\03A40.bmp")
LoadSprite(#Grass21,"Gfx\Grass2\03A41.bmp")
LoadSprite(#Grass22,"Gfx\Grass2\03A42.bmp")
LoadSprite(#Grass23,"Gfx\Grass2\03b20.bmp")
LoadSprite(#Grass24,"Gfx\Grass2\03b24.bmp")
LoadSprite(#Grass25,"Gfx\Grass2\03b30.bmp")
LoadSprite(#Grass26,"Gfx\Grass2\03b34.bmp")
LoadSprite(#Grass27,"Gfx\Grass2\03b40.bmp")
LoadSprite(#Grass28,"Gfx\Grass2\03b41.bmp")
LoadSprite(#Grass29,"Gfx\Grass2\03b42.bmp")
LoadSprite(#Grass30,"Gfx\Grass2\03b43.bmp")
LoadSprite(#Grass31,"Gfx\Grass2\04a20.bmp")
LoadSprite(#Grass32,"Gfx\Grass2\04a30.bmp")
LoadSprite(#Grass33,"Gfx\Grass2\04a40.bmp")
LoadSprite(#Grass34,"Gfx\Grass2\04a41.bmp")
LoadSprite(#Grass35,"Gfx\Grass2\04a42.bmp")
LoadSprite(#Grass37,"Gfx\Grass2\04b30.bmp")
LoadSprite(#Grass38,"Gfx\Grass2\04b40.bmp")
LoadSprite(#Grass39,"Gfx\Grass2\04b41.bmp")
LoadSprite(#Grass40,"Gfx\Grass2\04b42.bmp")
LoadSprite(#Grass41,"Gfx\Grass2\14a20.bmp")
LoadSprite(#Grass42,"Gfx\Grass2\14a30.bmp")
LoadSprite(#Grass43,"Gfx\Grass2\14a40.bmp")
LoadSprite(#Grass44,"Gfx\Grass2\14a41.bmp")
LoadSprite(#Grass45,"Gfx\Grass2\14a42.bmp")
LoadSprite(#Grass46,"Gfx\Test\02A20.bmp")
LoadSprite(#Bloc_Petrol,"Gfx\Petrol.bmp")
LoadSprite(#Building,"Gfx\Building.bmp")
LoadSprite(#Road1,"Gfx\Road1.bmp")
LoadSprite(#Road2,"Gfx\Road2.bmp")
LoadSprite(#Road3,"Gfx\Road3.bmp")
LoadSprite(#Road4,"Gfx\Road4.bmp")
LoadSprite(#Road5,"Gfx\Road5.bmp")
LoadSprite(#Road6,"Gfx\Road6.bmp")
LoadSprite(#Road7,"Gfx\Road7.bmp")
LoadSprite(#Road8,"Gfx\Road8.bmp")
LoadSprite(#Road9,"Gfx\Road9.bmp")
LoadSprite(#Road10,"Gfx\Road10.bmp")
LoadSprite(#Road11,"Gfx\Road11.bmp")
LoadSprite(#Coast_0,"Gfx\Coast_0.png")
LoadSprite(#Coast_1,"Gfx\Coast_1.png")
LoadSprite(#Coast_2,"Gfx\Coast_2.png")
LoadSprite(#Coast_3,"Gfx\Coast_3.png")
LoadSprite(#Water_0,"Gfx\Water_0.png")
LoadSprite(#Forest,"Gfx\Forest1.bmp")
LoadSprite(#GUI_MiniMap,"Gfx\GUI\Minimap_Support.bmp")
LoadSprite(#GUI_Commander,"Gfx\Gui\Command.bmp")
;}
;{/ Global
Global ScreenWidth.l : ScreenWidth = 800
Global ScreenHeight.l : ScreenHeight = 600
Global ScrollX.l , ScrollY.l
Global EchX.f,EchY.f,PixelX.l,PixelY.l,color.l,Update_MiniMap.l
Global MMAeraX.l
Global MMAeraY.l
Global type.l,Taille.l : Taille=2
;}
Procedure Ouvre_Fenetre_principale()
If OpenWindow ( #Window_Main , ScreenWidth, ScreenHeight, 800, 600, "Be_War Editor" ,#PB_Window_SizeGadget | #PB_Window_SystemMenu)
If CreateGadgetList ( WindowID ( #Window_Main ))
;/ Boutons
LoadImage(#Menu,"Gfx\Gui\Menu.bmp")
ButtonImageGadget(#Menu, 25, 20, 100, 32, ImageID(#Menu))
EndIf
EndIf
EndProcedure
Procedure Menu()
Repeat
Event = WaitWindowEvent ()
If Event = #PB_Event_Gadget
Select EventGadget ()
Case #Menu
Case #Menu
LoadImage(#Menu_2,"Gfx\Gui\Menu_2.bmp")
ImageGadget(#Menu_2, 310, 140, 330, 300, ImageID(#Menu_2))
LoadImage(#Reprendre,"Gfx\GUI\Reprendre.bmp")
ButtonImageGadget(#Reprendre, 360, 170, 230, 40, ImageID(#Reprendre))
LoadImage(#Minimize,"Gfx\Gui\Minimizer.bmp")
ButtonImageGadget(#Minimize, 360, 240, 230, 40, ImageID(#Minimize))
LoadImage(#Maximize,"Gfx\GUI\Maximizer.bmp")
ButtonImageGadget(#Maximize, 360, 310, 230, 40, ImageID(#Maximize))
LoadImage(#Close ,"Gfx\Gui\Close.bmp")
ButtonImageGadget(#Close, 360, 380, 230, 40,ImageID(#Close))
WaitWindowEvent ()
DisableGadget(#Menu_2, #True)
Case #Reprendre
FreeGadget(#Reprendre)
FreeGadget(#Menu_2)
FreeGadget(#Maximize)
FreeGadget(#Minimize)
FreeGadget(#Close)
Case #Minimize
ShowWindow_(WindowID(#Window_Main), #SW_MINIMIZE)
Case #Maximize
If IsZoomed_(WindowID(#Window_Main))
ShowWindow_(WindowID(#Window_Main), #SW_RESTORE)
Else
ShowWindow_(WindowID(#Window_Main), #SW_MAXIMIZE)
EndIf
Case #Close
Event = #PB_Event_CloseWindow
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndProcedure
Procedure UpdateMiniMap(x,Y)
StartDrawing(ImageOutput(#MiniMap))
PixelX = x / EchX
PixelY = Y / EchY
If Map(x,Y)\type=#Grass1
color = RGB(55, 118, 62)
ElseIf Map(x,Y)\type=#Grass2
color = RGB(46, 98, 52)
ElseIf Map(x,Y)\type=#Grass3
color = RGB(43, 91, 48)
ElseIf Map(x,Y)\type=#Grass4
color = $56A24C
ElseIf Map(x,Y)\type=#Grass5
color = RGB(69, 147, 78)
ElseIf Map(x,Y)\type=#Grass6
color = RGB(77, 164, 87)
EndIf
If Map(x,Y)\type=#Bloc_Petrol
color = RGB(255, 255, 10)
EndIf
If Map(x,Y)\type=#Building
color = RGB(0, 255, 87)
EndIf
If Map(x,Y)\type=#Forest
color = RGB(48, 93, 45)
EndIf
If ((PixelX<128) And (PixelY<128))
Plot(PixelX, PixelY, color)
If EchX < 0.5
Plot(PixelX + 2, PixelY, color)
Plot(PixelX + 1, PixelY, color)
ElseIf EchX < 1
Plot(PixelX + 1, PixelY, color)
EndIf
EndIf
StopDrawing()
EndProcedure
Procedure MakeMiniMap()
Shared MMOffsetX.f,MMOffsetY.f
Shared dx.l,dy.l,X1a.l,Y1a.l,X2a.l,Y2a.l,X3a.l,Y3a.l,X4a.l,Y4a.l
MMOffsetX=64
MMOffsetY=64
If #TailleMapX=>128 And #TailleMapY => 128
EchX = #TailleMapX / 128
EchY = #TailleMapY / 128
Else
EchX = 1
EchY = 1
EndIf
CreateImage(#MiniMap,128,128)
StartDrawing(ImageOutput(#MiniMap))
For Y = 1 To #TailleMapY
For x = 1 To #TailleMapX
PixelX = x / EchX
PixelY = Y / EchY
If Map(x,Y)\type=#Grass1
color = RGB(55,150, 62)
ElseIf Map(x,Y)\type=#Grass2
color = RGB(46, 98, 52)
ElseIf Map(x,Y)\type=#Grass3
color = RGB(43, 91, 48)
ElseIf Map(x,Y)\type=#Grass4
color = $56A24C
ElseIf Map(x,Y)\type=#Grass5
color = RGB(69, 147, 78)
ElseIf Map(x,Y)\type=#Grass6
color = RGB(77, 164, 87)
EndIf
If ((PixelX<128) And (PixelY<128))
Plot(PixelX, PixelY, color)
If EchX < 0.5
Plot(PixelX + 2, PixelY, color)
Plot(PixelX + 1, PixelY, color)
ElseIf EchX < 1
Plot(PixelX + 1, PixelY, color)
EndIf
EndIf
Next x
Next Y
StopDrawing()
CreateSprite(#GUI_MiniMap_Aera,128,128)
StartDrawing(SpriteOutput(#GUI_MiniMap_Aera))
Box(0,0,128,128,RGB(255,0,255))
dx = Int(ScreenWidth/#TailleTileX)-1
dy = Int(ScreenHeight/(#TailleTileY*2))-2
X1a=MMOffsetX
Y1a=MMOffsetY
X2a=MMOffsetX + ((dx+dy)/EchX)
Y2a=MMOffsetY + ((dx+dy)/EchY)
X3a=MMOffsetX + ((dx+dy)/EchX)/2
Y3a=MMOffsetY - ((dx+dy)/EchY)/2
X4a=MMOffsetX + (((dx+dy)/EchX)/2)*3
Y4a=MMOffsetY + ((dx+dy)/EchY)/2
LineXY(X1a,Y1a,X2a,Y2a,RGB(255,255,100))
LineXY(X2a,Y2a,X4a,Y4a,RGB(255,255,100))
LineXY(X4a,Y4a,X3a,Y3a,RGB(255,255,100))
LineXY(X3a,Y3a,X1a,Y1a,RGB(255,255,100))
StopDrawing()
EndProcedure
Procedure ControlInput()
; Gestion Basique du scrolling.
If KeyboardPushed(#PB_Key_Left)
ScrollX-20
EndIf
If KeyboardPushed(#PB_Key_Right)
ScrollX+20
EndIf
If KeyboardPushed(#PB_Key_Down)
ScrollY+10
EndIf
If KeyboardPushed(#PB_Key_Up)
ScrollY-10
EndIf
EndProcedure
Procedure UpdateMap()
Shared TilePosX.l,TilePosY.l,MouseSelectX.l,MouseSelectY.l,TileSelectX.l,TileSelectY.l
Shared MMx.l,MMy.l,Select_T.l
For Y = 1 To #TailleMapY
For x = 1 To #TailleMapX
TilePosX = Map(x,Y)\x - ScrollX
TilePosY = (Map(x,Y)\Y - SpriteHeight(Map(x,Y)\type)-#TailleTileY) - ScrollY
;On affiche les tiles que si il sont dans une zone Affichable par l'écran.
If TilePosX >-#TailleTileX And TilePosX < ScreenWidth And TilePosY >-(#TailleTileY*3) And TilePosY < ScreenHeight
DisplayTransparentSprite(Map(x,Y)\type ,TilePosX,TilePosY)
EndIf
If MouseX() > TilePosX + (#TailleTileX/4) And MouseX() < TilePosX + #TailleTileX - (#TailleTileX/4) And MouseY() > TilePosY + (#TailleTileY/4)+SpriteHeight(Map(x,Y)\type)-#TailleTileY And MouseY() < TilePosY + #TailleTileY - (#TailleTileY/4)+SpriteHeight(Map(x,Y)\type)-#TailleTileY
MouseSelectX = TilePosX
MouseSelectY = TilePosY
TileSelectX = x
TileSelectY = Y
EndIf
If TilePosX > 0 And TilePosX < #TailleTileX And TilePosY > 0 And TilePosY < #TailleTileY
MMx = x/EchX
MMy = Y/EchY
EndIf
Next x
Next Y
StartDrawing(ScreenOutput())
DrawingMode(4)
;Affichage de la zone selectionner suivant la taille du pinceau
For T = 1 To Taille
;DisplayTransparentSprite(#Selector,MouseSelectX+(Bx*64)/2,MouseSelectY+(By*32)/2)
Ellipse(MouseX(),MouseY(),T+(Taille*64)/2,T+(Taille*32)/2,RGB(255/T, 255/T, 255 ))
Next
;Dessin Minimap
DrawImage(ImageID(#MiniMap),11,(ScreenHeight-150)+11 )
; Locate(0,0)
; DrawText(Str(TileSelectX)+":"+Str(TileSelectY))
StopDrawing()
MMAeraX = (11-64)+ MMx
MMAeraY = ((ScreenHeight-150+11)-64) + MMy
DisplayTransparentSprite(#GUI_MiniMap_Aera,MMAeraX,MMAeraY)
DisplayTransparentSprite(#GUI_MiniMap,0,ScreenHeight-150)
DisplayTransparentSprite(#GUI_Commander,0,ScreenHeight-SpriteHeight(#GUI_Commander))
DisplayTransparentSprite(#Cursor,MouseX(),MouseY())
;-Paintbrush
If KeyboardReleased(#PB_Key_PageUp)<>0 : Select_T + 1 : EndIf
If KeyboardReleased(#PB_Key_PageDown)<>0 : Select_T - 1 : EndIf
If Select_T > #Forest
Select_T = #Grass1
EndIf
If Select_T < #Grass1
Select_T = #Forest
EndIf
If MouseButton(1)<>0
For By = -Taille/2 To Taille/2
For Bx = -Taille/2 To Taille/2
If TileSelectX+Bx= > 0 And TileSelectX+Bx <= #TailleMapX And TileSelectY+By= > 0 And TileSelectY+By <= #TailleMapY
Map(TileSelectX+Bx,TileSelectY+By)\type = Select_T; #Bloc_Petrol
If Select_T=#Water_0
Coast_Auto(TileSelectX+Bx,TileSelectY+By)
EndIf
UpdateMiniMap(TileSelectX+Bx,TileSelectY+By)
EndIf
Next : Next
EndIf
If MouseWheel()>0
Taille+1
EndIf
If MouseWheel()<0
Taille-1
EndIf
If Taille < 1 : Taille = 1 : EndIf
If Taille > 15 : Taille = 15 : EndIf
If KeyboardPushed(#PB_Key_Tab)
ReleaseMouse(1)
Else
ReleaseMouse(0)
EndIf
EndProcedure
Procedure Coast_Auto(x,Y)
If Map(x,Y)\type = #Water_0
If x+1<#TailleMapX
If Map(x+1,Y)\type <> #Water_0
Map(x+1,Y)\type = #Coast_2
EndIf
EndIf
If x>0
If Map(x-1,Y)\type <> #Water_0
Map(x-1,Y)\type = #Coast_1
EndIf
EndIf
If Y+1<#TailleMapY
If Map(x,Y+1)\type <> #Water_0
Map(x,Y+1)\type = #Coast_3
EndIf
EndIf
If Y-1>0
If Map(x,Y-1)\type <> #Water_0
Map(x,Y-1)\type = #Coast_0
EndIf
EndIf
EndIf
EndProcedure
Procedure CreateMapIsometric(Taille_Map_X.l,Taille_Map_Y.l,TileType.l)
Shared DecalageX.l,DecalageY.l,offset.l
For Y = 1 To Taille_Map_Y
For x = 1 To Taille_Map_X
DecalageX = DecalageX + (#TailleTileX/2)
DecalageY = DecalageY + (#TailleTileY/2)
Map(x,Y)\x = DecalageX
Map(x,Y)\Y = DecalageY
Map(x,Y)\type = TileType
Next x
offset+1
DecalageX = -(offset*(#TailleTileX/2))
DecalageY = (#TailleTileY/2)*offset
Next Y
EndProcedure
;/ Map Iso
CreateMapIsometric(#TailleMapX,#TailleMapY,#Grass1)
MakeMiniMap()
Repeat
Repeat
Event = WaitWindowEvent()
ExamineKeyboard() : ExamineMouse() : ClearScreen(RGB(0,0,0))
UpdateMap()
ControlInput()
FlipBuffers()
Until Event = #PB_Event_CloseWindow
ForEver
If MouseX()>650
ReleaseMouse(1)
EndIf