Code archives/Miscellaneous/Zones Library
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
; Example Usage: Include "Zones.bb" Graphics 640,480 SetBuffer BackBuffer() SetZoneCount 2 CreateZone 1,150,50,100,20 CreateZone 2,200,300,40,80 While KeyDown(1)=0 If MouseDown(2) Then DeleteZone 2 Cls Color 255,255,0 For i% = 1 To gintZoneCount Rect ZoneProperty(i, 1), ZoneProperty(i, 2), ZoneProperty(i, 3), ZoneProperty(i, 4), True Next z% = MouseZone() If z > 0 Then Text 0, 0, "Zone:" + z Text 0, 12, "X:" + ZoneProperty(z, 1) Text 0, 24,"Y:" + ZoneProperty(z, 2) Text 0, 36, "Width:" + ZoneProperty(z, 3) Text 0, 48, "Height:" + ZoneProperty(z, 4) Color 255, 0, 0 Rect ZoneProperty(z, 1), ZoneProperty(z, 2), ZoneProperty(z, 3), ZoneProperty(z, 4), True End If Plot MouseX(), MouseY() VWait : Flip False Wend FreeZones EndGraphics End | |||||
; Library: Zones ; Version: 1.0 ; Author: Leigh Bowers ; Based on material provided by GFK (I think), but heavily modified and enhanced. ; Email: leigh.bowers@curvesoftware.co.uk ; Homepage: www.curvesoftware.co.uk/blitz ; SetZoneCount Set the maximum number of zones to use (reserves some memory). ; CreateZone Define a zone. Must be between 1 and the number specified in SetZoneCount ; DeleteZone Delete a zone. ; FreeZones Delete all zones and free up reserved memory. ; MouseZone() Returns the number of the zone the mouse pointer is in. ; ZoneProperty() Returns either the X, Y, Width or Height of the given zone number. ; Zone() Return the number of the zone at given X and Y co-ordinates. Global gintZoneBank%, gintZoneCount% Function SetZoneCount(Num%) gintZoneCount = Num gintZoneBank = CreateBank(gintZoneCount * 8) End Function Function CreateZone(pintZone%, pintX%, pintY%, pintWidth%, pintHeight%) intBankPosition% = (pintZone - 1) * 8 PokeShort gintZoneBank, intBankPosition, pintX PokeShort gintZoneBank, intBankPosition + 2, pintY PokeShort gintZoneBank, intBankPosition + 4, pintWidth PokeShort gintZoneBank, intBankPosition + 6, pintHeight End Function Function ZoneProperty%(pintZone%, pintProperty%) ; Property: 1 = X, 2 = Y, 3 = Width, 4 = Height intBankPosition% = (pintZone - 1) * 8 Return PeekShort (gintZoneBank, intBankPosition + ((pintProperty - 1) * 2)) End Function Function DeleteZone(pintZone%) intBankPosition% = (pintZone - 1) * 8 PokeShort gintZoneBank, intBankPosition, 0 PokeShort gintZoneBank, intBankPosition+ 2, 0 PokeShort gintZoneBank, intBankPosition+ 4, 0 PokeShort gintZoneBank, intBankPosition+ 6, 0 End Function Function FreeZones() gintZoneCount = 0 FreeBank gintZoneBank End Function Function MouseZone%() Return Zone(MouseX(), MouseY()) End Function Function Zone%(pintX%, pintY%) intZoneNum% = 0 intCurrentZone% = 0 While ((intCurrentZone < gintZoneCount) And (intZoneNum = 0)) intBankPosition% = intCurrentZone * 8 intX1% = PeekShort(gintZoneBank, intBankPosition) intY1% = PeekShort(gintZoneBank, intBankPosition + 2) intX2% = (intX1 + PeekShort(gintZoneBank, intBankPosition + 4)) intY2% = (intY1 + PeekShort(gintZoneBank, intBankPosition + 6)) If ((((pintX - intX1) Xor (pintX - intX2)) And ((pintY - intY1) Xor (pintY - intY2))) And $80000000) Then intZoneNum = intCurrentZone + 1 End If intCurrentZone = intCurrentZone + 1 Wend Return intZoneNum End Function |
Comments
None.
Code Archives Forum