Still doesn't work. it generates the event but eventextra() always returns null.
Main
Strict
Import "Map.bmx"
Import brl.bmploader
Import brl.jpgloader
SetGraphicsDriver GLMax2DDriver()
Global Main:TGadget = CreateWindow("Maptrix V0.1 (c)Dreamspaced 2005.",125,20,500,530,Null,WINDOW_TITLEBAR | WINDOW_MENU )
Global MapView:TGadget = CreateWindow("Map Tree",560,20,200,450,Null,WINDOW_TITLEBAR | WINDOW_STATUS )
Global Tools:TGadget = CreateWindow("Tools",20,105,100,450,Null,WINDOW_TITLEBAR | WINDOW_STATUS )
'Global MapWin:TGadget = CreateWindow("Current Map",125,105,450,400,Null,WINDOW_TITLEBAR | WINDOW_STATUS | WINDOW_MENU )
'--[ Maps ]
Global NewMap:TGadget = CreateButton("New Map",0,0,60,20,main)
Global LoadMap:TGadget = CreateButton("Load",60,0,60,20,main)
Global SaveMap:TGadget = CreateButton("Save",120,0,60,20,main)
Global SaveAsMap:TGadget = CreateButton("Save As",180,0,60,20,main)
Global MapCan:TGadget = CreateCanvas(0,40,ClientWidth(main),ClientHeight(main)-40,main,0,GRAPHICS_BACKBUFFER )
'--[ Tile Viewer ]
Global TileV:TGadget = CreateWindow("Tiles",120,350,500,200,main,WINDOW_TITLEBAR)
Global tilecan:Tgadget = CreateCanvas(100,0,300,200,tilev,0,graphics_backbuffer)
Global tiletree:TGadget = CreateTreeView(5,20,90,140,tilev)
CreateLabel("Tilesets.",0,0,80,20,tilev)
Global NewSet:TGadget = CreateButton("New Set.",405,20,70,20,tilev)
Global CloseSet:Tgadget = CreateButton("Delete",405,45,70,20,tilev)
Global TileSets:Map[255],NumSets
Global tilenode:Tgadget[255]
Global tileset:Map
For Local j=0 To 200
newTileSet()
Next
CreateTimer 60
SetGraphics CanvasGraphics( mapcan )
Local scrolllock
Local scrollx#,scrolly#,firstrun=True
Global EditMap:Map = map.create(0,0,0,0,0)
Local tileroot:Tgadget = TreeViewRoot(tiletree)
Function NewTileSet()
tilesets[numsets] = map.create(8,128,1,64,64)
tileset = tilesets[numsets]
Local root:Tgadget = TreeViewRoot(tiletree)
tilenode[numsets]=AddTreeViewNode("Tileset "+String(numsets+1),root)
numsets:+1
End Function
'SelectedTreeViewNode
Repeat
WaitEvent()
Select EventID()
Case EVENT_GADGETSELECT
If EventSource()=tiletree
'
EndIf
Case EVENT_GADGETACTION
Select EventSource()
Case NewMap
NewMapWin()
Case TileRoot
Print EventData()
Print EventExtra().tostring()
For Local j=0 To numsets-1
Local tn:tgadget = tgadget( EventExtra())
If tn = tilenode[j]
tileset = tilesets[j]
Print "Set to node "+j
End If
Next
Print "Done."
End Select
Case EVENT_WINDOWCLOSE
Select EventSource()
Case Main
End
End Select
Case EVENT_TIMERTICK
SetGraphics CanvasGraphics( MapCan )
Cls
editmap.drawGrid()
editmap.draw()
Flip
SetGraphics CanvasGraphics(Tilecan)
Cls
tileset.drawgrid()
tileset.draw()
Flip
Case EVENT_MOUSEDOWN
Select EventData()
Case 2
scrolllock=True
Case 1
End Select
Case EVENT_MOUSEUP
Select EventData()
Case 2
scrolllock=False
firstrun=True
End Select
Case EVENT_MOUSEMOVE
If scrolllock
If firstrun
scrollx=EventX()
scrolly=EventY()
firstrun=False
End If
Local xs# = EventX()-scrollx
Local ys# = EventY()-scrolly
scrollx=EventX()
scrolly=EventY()
Select EventSource()
Case Mapcan
editmap.scroll( -xs,-ys )
Case tilecan
SetGraphics CanvasGraphics(tilecan)
tileset.scrollbound( -xs,-ys )
End Select
EndIf
Case EVENT_MOUSEWHEEL
'Print "First:"+tst.getscale()
If EventSource() = mapcan
editmap.setvscale( editmap.getvscale()+EventData()*0.03 )
EndIf
'Print tst.getscale()
End Select
Forever
Function newMapwin()
Local dg:TGadget = Desktop()
Local dw = GadgetWidth(dg)
Local dh = GadgetHeight(dg)
JoyX
Local nmwin:tgadget = CreateWindow("New Map",dw/2-110,dh/2-80,220,160,main,WINDOW_TITLEBAR)
Local mwidth:TGadget=CreateTextField(10,10,40,20,nmwin)
CreateLabel("Width",52,10,60,20,nmwin)
Local mheight:TGadget = CreateTextField(105,10,40,20,nmwin)
CreateLabel("Height",147,10,60,20,nmwin)
Local mdepth:TGadget=CreateTextField(10,35,40,20,nmwin)
CreateLabel("Depth",52,35,60,20,nmwin)
Local twidth:Tgadget=CreateTextField(10,60,40,20,nmwin)
CreateLabel("Tile Width",52,60,60,20,nmwin)
Local theight:TGadget=CreateTextField(105,60,40,20,nmwin)
CreateLabel("Tile Height",147,60,60,20,nmwin)
Local ok:Tgadget = CreateButton("Create",10,90,80,20,nmwin)
Local cancel:TGadget = CreateButton("Cancel",100,90,80,20,nmwin)
SetGadgetText mwidth,"32"
SetGadgetText mheight,"32"
SetGadgetText mdepth,"4"
SetGadgetText twidth,"64"
SetGadgetText theight,"64"
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
If EventSource()=nmwin
FreeGadget nmwin
Return
End If
Case EVENT_GADGETACTION
Select EventSource()
Case cancel
FreeGadget nmwin
Return
Case ok
Local width,height,depth,widtht,heightt
width =Int( TextFieldText(mwidth))
height = Int(TextFieldText(mheight))
depth = Int(TextFieldText(mdepth))
widtht = Int(TextFieldText(twidth))
heightt = Int(TextFieldText(Theight))
If width<1 width=1
If height<1 height=1
If depth<1 depth=1
If widtht<4 widtht=4
If heightt<4 heightt=4
editmap = map.create(width,height,depth,widtht,heightt)
FreeGadget nmwin
Return
End Select
End Select
Forever
End Function
Map.bmx
Strict
Import brl.bmploader
Import brl.jpgloader
Type Tile
Field frame:TImage[255],frames
Field fps,mode,framenum
Function Load:Tile(file:String)
Local out:Tile = New tile
out.frame[0] = LoadImage(file)
If out.frame[0] = Null
Throw "Tile image failed to load."
End If
out.frames=1
tile.tiles.addlast( out )
Return out
End Function
Method Draw(x#,y#,w,h)
DrawImageRect frame[framenum],x,y,w,h
End Method
Global tiles:Tlist
End Type
tile.tiles = CreateList()
Type Map
Field map:Tile[,,]
Field high:Int[,]
Field width,height,depth
Field twidth,theight
Field ViewX#,ViewY#,ViewScale#
Method New()
viewscale=1
End Method
Function Create:Map(width,height,depth,tilewidth,tileheight)
Local out:Map = New map
out.width=width
out.height=height
out.depth=depth
out.twidth=tilewidth
out.theight=tileheight
out.map = New tile[width,height,depth]
out.high = New Int[width,height]
Return out
End Function
Method PasteTile(x,y,d,ti:tile)
map[x,y,d]=ti
End Method
Method DrawGrid()
SetColor 0,255,255
SetLineWidth 4
Local mw#,mh#
mw=GraphicsWidth()/2.0
mh=GraphicsHeight()/2.0
For Local x=0 Until width
Local dx# = x*twidth-viewx
Local nx# = dx-mw
dx = mw+nx*viewscale
For Local y=0 Until height
Local dy# = y*theight-viewy
Local ny# = dy-mh
dy = mh+ny*viewscale
DrawLine dx,dy,dx+twidth*viewscale,dy
DrawLine dx,dy,dx,dy+theight*viewscale
DrawLine dx,dy+theight*viewscale,dx+twidth*viewscale,dy+theight*viewscale
DrawLine dx+twidth*viewscale,dy,dx+twidth*viewscale,dy+theight*viewscale
Next
Next
End Method
Method Draw()
SetScale viewscale,viewscale
Local mw#,mh#
mw=GraphicsWidth()/2.0
mh=GraphicsHeight()/2.0
Local gw,gh
gw= GraphicsWidth()
gh = GraphicsHeight()
For Local x=0 Until width
Local dx# = x*twidth-viewx
Local nx# = dx-mw
dx = mw+nx*viewscale
If dx>0-twidth*viewscale And dx<gw+twidth*viewscale
For Local y=0 Until height
Local dy# = y*theight-viewy
Local ny# = dy-mh
dy = mh+ny*viewscale
If dy>0-theight*Viewscale And dy<gh+theight*viewscale
For Local d=0 Until depth
If map[x,y,d]<>Null map[x,y,d].draw(dx,dy,twidth,theight)
Next
If high[x,y]
DrawLine dx,dy,dx+twidth*viewscale,dy
DrawLine dx,dy,dx,dy+theight*viewscale
DrawLine dx,dy+theight*viewscale,dx+twidth*viewscale,dy+theight*viewscale
DrawLine dx+twidth*viewscale,dy,dx+twidth*viewscale,dy+theight*viewscale
high[x,y]=0
EndIf
EndIf
Next
EndIf
Next
SetScale 1,1
End Method
Method SetvScale(scale#)
viewscale=scale
End Method
Method GetvScale#()
Return viewscale
End Method
Method scroll(mx#,my#)
viewx=viewx+mx/viewscale
viewy=viewy+my/viewscale
End Method
Method scrollbound(mx#,my#)
viewx :+mx/viewscale
viewy :+my/viewscale
If viewx<0 viewx=0
If viewy<0 viewy=0
If viewx>width*Twidth-GraphicsWidth()
viewx=width*Twidth-GraphicsWidth()
EndIf
If viewy>height*Theight-GraphicsHeight()
viewy=height*Theight-GraphicsHeight()
EndIf
End Method
End Type
Compiled in the demo version of the gui.
|