Monday 9 April 2012

Code Check

Since there have been a number of changes, here's the complete listing to date.

As always unformatted for copy / paste

// April 9 2012 - Tabs converted to 3 spaces
#constant PANEL_ROWS   3
#constant PANEL_COLS   4

#constant DEPTH_SCORE   20
#constant DEPTH_PANEL   30
#constant DEPTH_WORK   40

#constant MAX_WORKOBJECTS   100

type displayType
   physWidth#
   physHeight#
   virtWidth#
   virtHeight#
   iconSize#
   textHeight#
   lastFPS#
   iconImage
endtype

global display as displayType
display.physWidth# = getDeviceWidth()
display.physHeight# = getDeviceHeight()
display.iconSize# = PhysWidth() / PANEL_COLS
display.textHeight# = PhysHeight() / 20.0

setVirtualResolution( PhysWidth() , PhysHeight() )
display.virtWidth# = getVirtualWidth()
display.virtHeight# = getVirtualHeight()
display.iconImage = SafeloadImage( "objects.png" )

type panelType
   height#
   speed#
   isOpen
   image
   sprite
   text
   sound
   iconMax
endtype

global panel as panelType
panel.height# = IconSize() * PANEL_ROWS
panel.speed# = 0.0
panel.isOpen = 0
panel.iconMax = PANEL_ROWS * PANEL_COLS

panel.Image = SafeloadImage( "panel.jpg" )
setImageWrapU( PanelImage() , 1 )
setImageWrapV( PanelImage() , 1 )

panel.sprite = createSprite( PanelImage() )
uScale# = getImageWidth( PanelImage() ) / PhysWidth()
vScale# = getImageHeight( PanelImage() ) / PanelHeight()
setSpriteUVScale( PanelSprite() , uScale# , vScale# )
setSpriteSize( PanelSprite() , PhysWidth() , PanelHeight() )
setSpritePosition( PanelSprite() , 0 , PhysHeight() )
setSpriteDepth( PanelSprite() , DEPTH_PANEL)

panel.text = createText( "Objects" )
setTextSize( panelText() , textHeight() )
setTextAlignMent( panelText() , 1)
setTextPosition( panelText() , PhysWidth() / 2.0 , PhysHeight() - TextHeight() )
setTextDepth( panelText() , DEPTH_PANEL - 1 )

panel.sound = SafeLoadSound("panel.wav")

dim panelIconSprite[ panelIconMax() ]
for icon = 1 to panelIconMax()
   panelIconSprite[ icon ] = createSprite( 0 )
   setSpriteSize( panelIconSprite[ icon ] , IconSize() - 4, IconSize() - 4)
   setSpriteColor( panelIconSprite[ icon ] , 255 , 255 , 255 , 127 )
next icon

type WorkObjectType
   isFree
   objectID
   sprite
endtype

dim workObject[ MAX_WORKOBJECTS ] as WorkObjectType
for thisObject = 1 to MAX_WORKOBJECTS
   workObject[ thisObject ].isFree = 1
   workObject[ thisObject ].objectID = 0
   workObject[ thisObject ].sprite = 0
next thisObject
global numWorkObjects = 0

imageRef = SafeloadImage( "finger.png" )
spriteRef = createSprite( imageRef )

PositionPanelIcons()

testSprite = createSprite( IconImage() )
setSpriteSize( testSprite , IconSize() , - 1)
setSpritePosition( testSprite , 100 , 100 )
setSpriteDepth( testSprite , DEPTH_WORK )
setSpriteAnimation( testSprite , 64 , 64 , 252 )

do
   testFrame = testFrame + 1
   if testFrame = 253 then testFrame = 1
   setSpriteFrame( testSprite , testFrame )

   LoopStart()
   print( "FPS: " + str ( lastFPS() ) )

   if getPointerPressed() > 0
      if getPointerY() >= getTextY( panelText() ) and getPointerY() < getSpriteY( panelSprite() )
         ToggleTrayOpen()
      endif
   endif

   if panelIsOpen() = 1
      if getSpriteY( panelSprite() ) > ( PhysHeight() - panelHeight() )
         MovePanel( -panelSpeed() )
      endif
   else
      if getSpriteY( panelSprite() ) < PhysHeight()
         MovePanel( panelSpeed() )
      endif
   endif

   setSpritePosition( spriteRef , getPointerX() , getPointerY() )
   printc( "Physical: " )
   print( str( PhysWidth() ) + " x " + str( PhysHeight() ) )
   printc( "Pointer: " )
   print( str( getPointerX() ) + " x " + str( getPointerY() ) )
   sync()
loop

function LoopStart()
   display.lastFPS# = screenFPS()
   panel.speed# = panelHeight() / (lastFPS() * 1.25)
endfunction

function ToggleTrayOpen()
   panel.isOpen = 1 - panelIsOpen()
   if panelSound() > 0 then playSound( panelSound() )
endfunction

function MovePanel( distance# )
   setSpriteY( panelSprite() , getSpriteY( panelSprite() ) + distance# )
   setTextY( panelText() , getTextY( panelText() ) + distance# )
   PositionPanelIcons()
endfunction

function PositionPanelIcons()
   iconDepth = getSpriteDepth( PanelSprite() ) - 1
   for icon = 1 to panelIconMax()
      offset = icon - 1
      col = offset mod PANEL_COLS
      row = offset / PANEL_COLS
      x = col * IconSize() + 2
      y = row * IconSize() + getSpriteY( PanelSprite() ) + 2
      setSpritePosition( panelIconSprite[ icon ] , x , y )
      setSpriteDepth( panelIconSprite[ icon ] , iconDepth )
   next icon
endfunction

function SafeLoadImage( thisFileName$ )
   if getFileExists( thisFileName$ )
      thisImageRef = loadImage( thisFileName$ )
   else
      thisImageRef = 0
   endif
endfunction thisImageRef

function SafeLoadSound( thisFileName$ )
   if getFileExists( thisFileName$ )
      thisSoundRef = loadSound( thisFileName$ )
   else
      thisSoundRef = 0
   endif
endfunction thisSoundRef

// Work Object Functions

function TopWorkObject()
endfunction numWorkObjects

function WorkObjectValid( thisObject )
   thisBool = ( thisObject > 0 and thisObject <= TopWorkObject() )
endfunction thisBool

function FirstFreeWorkObject()
   for thisObject = 1 to TopWorkObject()
      if WorkObjectIsFree( thisObject ) > 0 then exit
   next thisObject
   if thisObject > MAX_WORKOBJECTS then thisObject = 0
endfunction thisObject

function AddWorkObject( thisObjectID, thisSprite )
   thisObject = FirstFreeWorkObject()
   if thisObject > TopWorkObject() then numWorkObjects = thisObject
   if WorkObjectValid( thisObject )
      workObject[ thisObject ].isFree = 0
      workObject[ thisObject ].objectID = thisObjectID
      workObject[ thisObject ].sprite = thisSprite
   endif
endfunction thisObject

function DelWorkObject( thisObject )
   if WorkObjectValid( thisObject )
      workObject[ thisObject ].isFree = 1
      if WorkObjectSprite( thisObject ) > 0
         thisSprite = WorkObjectSprite( thisObject )
         workObject[ thisObject ].sprite = 0
         if getSpriteExists( thisSprite ) then deleteSprite( thisSprite )
      endif
      while WorkObjectIsFree( TopWorkObject() ) = 1 and TopWorkObject() >= 0
         dec numWorkObjects , 1
      endwhile
   endif
endfunction

// Return Functions - WorkObject Array

function WorkObjectIsFree( thisObject )
   if WorkObjectValid( thisObject )
      thisIsFree = workObject[ thisObject ].isFree
   else
      thisIsFree = -1
   endif
endfunction thisIsFree

function WorkObjectID( thisObject )
   if WorkObjectValid( thisObject )
      thisObjectID = workObject[ thisObject ].objectID
   else
      thisObjectID = -1
   endif
endfunction thisObjectID

function WorkObjectSprite( thisObject )
   if WorkObjectValid( thisObject )
      thisSprite = workObject[ thisObject ].sprite
   else
      thisSprite = -1
   endif
endfunction thisSprite

// Return Functions  - Display

function PhysWidth()
endfunction display.physWidth#
function PhysHeight()
endfunction display.physHeight#
function VirtWidth()
endfunction display.virtWidth#
function VirtHeight()
endfunction display.virtHeight#
function IconSize()
endfunction display.iconSize#
function TextHeight()
endfunction display.textHeight#
function LastFPS()
endfunction display.lastFPS#
function IconImage()
endfunction display.iconImage

// Return Functions  - Panel

function PanelHeight()
endfunction panel.height#
function PanelSpeed()
endfunction panel.speed#
function PanelIsOpen()
endfunction panel.isOpen
function PanelImage()
endfunction panel.image
function PanelSprite()
endfunction panel.sprite
function PanelText()
endfunction panel.text
function PanelSound()
endfunction panel.sound
function PanelIconMax()
endfunction panel.iconMax


//

No comments:

Post a Comment