TGC Codebase Backup



Multiple Cameras by OSX Using Happy Dude

5th Nov 2003 16:52
Summary

This routine allows you to setup up to 4 cameras (for up to 4 players)



Description

Up to 4 players/can be created. The view modes are :

1 Camera - Full screen, half screen or 16:9 ratio
2 Cameras - Horizontal or vertically split screen
3 Cameras - Horizontal, vertical or grouped mode. Grouped mode is the top half of the screen split in two, and the bottom half isn't
4 Cameras - Horizontally and vertically split.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    Rem *** Include File: C:Program FilesDark Basic SoftwareDark Basic ProfessionalRoutinesMultiCamera.dba ***
Rem Created: 19/10/2003 13:43:16

Rem Included in Project: C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsTestMultiCameraTestMultiCamera.dbpro
type _SCREENINFO
   screenWidth as DWORD
   screenHeight as DWORD
   halfX as DWORD
   halfY as DWORD
   thirdX as DWORD
   thirdY as DWORD
endtype

type _PLAYERCAMERA
   camNum as DWORD
   viewX as DWORD
   viewY as DWORD
   viewDX as DWORD
   viewDY as DWORD
endtype

#constant MAXPLAYERS    4
#constant PLAYER1CAMERA 1
#constant PLAYER2CAMERA 2
#constant PLAYER3CAMERA 3
#constant PLAYER4CAMERA 4

#constant PLAYER1       1
#constant PLAYER2       2
#constant PLAYER3       3
#constant PLAYER4       4

#constant NOCAMERA      0

#constant ONEPLAYER_FULLSCREEN   1<<0
#constant ONEPLAYER_HALFSCREEN   1<<1
#constant ONEPLAYER_169RATIO     1<<2
#constant TWOPLAYER_HORZSPLIT    1<<3
#constant TWOPLAYER_VERTSPLIT    1<<4
#constant THREEPLAYER_HORZSPLIT  1<<5
#constant THREEPLAYER_VERTSPLIT  1<<6
#constant THREEPLAYER_GROUP      1<<7

function getScreenSize
   screenInfo.screenWidth=screen width()
   screenInfo.screenHeight=screen height()
   screenInfo.halfX=screenInfo.screenWidth>>1
   screenInfo.halfY=screenInfo.screenHeight>>1
   screenInfo.thirdX=screenInfo.screenWidth/3
   screenInfo.thirdY=screenInfo.screenHeight/3
endfunction

function resetAllCameras
local l as DWORD

   for l=PLAYER1 to PLAYER1+(MAXPLAYERS-1):playerCamera(l).camNum=NOCAMERA:next l
endfunction

function clearAllCameras
local l as DWORD

   for l=PLAYER1 to PLAYER1+(MAXPLAYERS-1)
      if playerCamera(l).camNum<>NOCAMERA
         delete camera playerCamera(l).camNum
         playerCamera(l).camNum=NOCAMERA
      endif
   next l
endfunction

function createViewPort(numPlayers as DWORD,flags as DWORD)
local l as DWORD

   playerCamera(PLAYER1).camNum=PLAYER1CAMERA
   if numPlayers>=2 then playerCamera(PLAYER2).camNum=PLAYER2CAMERA
   if numPlayers>=3 then playerCamera(PLAYER3).camNum=PLAYER3CAMERA
   if numPlayers=4 then playerCamera(PLAYER4).camNum=PLAYER4CAMERA

   select numPlayers
      case  1  :  REM One player
                  if flags && ONEPLAYER_FULLSCREEN
                     playerCamera(PLAYER1).viewX=0
                     playerCamera(PLAYER1).viewY=0
                     playerCamera(PLAYER1).viewDX=screenInfo.screenWidth
                     playerCamera(PLAYER1).viewDY=screenInfo.screenHeight
                  else
                     if flags && ONEPLAYER_HALFSCREEN
                        playerCamera(PLAYER1).viewX=screenInfo.halfX>>1
                        playerCamera(PLAYER1).viewY=screenInfo.halfY>>1
                        playerCamera(PLAYER1).viewDX=playerCamera(PLAYER1).viewX+screenInfo.halfX
                        playerCamera(PLAYER1).viewDY=playerCamera(PLAYER1).viewY+screenInfo.halfY
                     else
                        playerCamera(PLAYER1).viewX=0
                        playerCamera(PLAYER1).viewY=screenInfo.halfY>>1
                        playerCamera(PLAYER1).viewDX=screenInfo.screenWidth
                        playerCamera(PLAYER1).viewDY=playerCamera(PLAYER1).viewY+screenInfo.halfY
                     endif
                  endif
                  endcase
      case  2  :  REM Two players
                  if flags && TWOPLAYER_HORZSPLIT
                     playerCamera(PLAYER1).viewX=0
                     playerCamera(PLAYER1).viewY=0
                     playerCamera(PLAYER1).viewDX=screenInfo.halfX-1
                     playerCamera(PLAYER1).viewDY=screenInfo.screenHeight

                     playerCamera(PLAYER2).viewX=screenInfo.halfX+1
                     playerCamera(PLAYER2).viewY=0
                     playerCamera(PLAYER2).viewDX=screenInfo.screenWidth
                     playerCamera(PLAYER2).viewDY=screenInfo.screenHeight
                  else
                     if flags && TWOPLAYER_VERTSPLIT
                        playerCamera(PLAYER1).viewX=0
                        playerCamera(PLAYER1).viewY=0
                        playerCamera(PLAYER1).viewDX=screenInfo.screenWidth
                        playerCamera(PLAYER1).viewDY=screenInfo.halfY-1

                        playerCamera(PLAYER2).viewX=0
                        playerCamera(PLAYER2).viewY=screenInfo.halfY+1
                        playerCamera(PLAYER2).viewDX=screenInfo.screenWidth
                        playerCamera(PLAYER2).viewDY=screenInfo.screenHeight
                     endif
                  endif
                  endcase
      case  3  :  REM Three players
                  if flags && THREEPLAYER_HORZSPLIT
                     playerCamera(PLAYER1).viewX=0
                     playerCamera(PLAYER1).viewY=0
                     playerCamera(PLAYER1).viewDX=screenInfo.thirdX
                     playerCamera(PLAYER1).viewDY=screenInfo.screenHeight

                     playerCamera(PLAYER2).viewX=screenInfo.thirdX+1
                     playerCamera(PLAYER2).viewY=0
                     playerCamera(PLAYER2).viewDX=(screenInfo.thirdX*2)-1
                     playerCamera(PLAYER2).viewDY=screenInfo.screenHeight

                     playerCamera(PLAYER3).viewX=(screenInfo.thirdX*2)+1
                     playerCamera(PLAYER3).viewY=0
                     playerCamera(PLAYER3).viewDX=screenInfo.screenWidth
                     playerCamera(PLAYER3).viewDY=screeninfo.screenHeight
                  else
                     if flags && THREEPLAYER_VERTSPLIT
                        playerCamera(PLAYER1).viewX=0
                        playerCamera(PLAYER1).viewY=0
                        playerCamera(PLAYER1).viewDX=screenInfo.screenWidth
                        playerCamera(PLAYER1).viewDY=screenInfo.thirdY-1

                        playerCamera(PLAYER2).viewX=0
                        playerCamera(PLAYER2).viewY=screenInfo.thirdY+1
                        playerCamera(PLAYER2).viewDX=screenInfo.screenWidth
                        playerCamera(PLAYER2).viewDY=(screenInfo.thirdY*2)-1

                        playerCamera(PLAYER3).viewX=0
                        playerCamera(PLAYER3).viewY=(screenInfo.thirdY*2)+1
                        playerCamera(PLAYER3).viewDX=screenInfo.screenWidth
                        playerCamera(PLAYER3).viewDY=screeninfo.screenHeight
                     else
                        if flags && THREEPLAYER_GROUP
                           playerCamera(PLAYER1).viewX=0
                           playerCamera(PLAYER1).viewY=0
                           playerCamera(PLAYER1).viewDX=screenInfo.halfX-1
                           playerCamera(PLAYER1).viewDY=screenInfo.halfY-1

                           playerCamera(PLAYER2).viewX=screenInfo.halfX+1
                           playerCamera(PLAYER2).viewY=0
                           playerCamera(PLAYER2).viewDX=screenInfo.screenWidth
                           playerCamera(PLAYER2).viewDY=screenInfo.halfY-1

                           playerCamera(PLAYER3).viewX=0
                           playerCamera(PLAYER3).viewY=screenInfo.halfY+1
                           playerCamera(PLAYER3).viewDX=screenInfo.screenWidth
                           playerCamera(PLAYER3).viewDY=screeninfo.screenHeight
                        endif
                     endif
                  endif
                  endcase
      case  4  :  REM 4 players
                  playerCamera(PLAYER1).viewX=0
                  playerCamera(PLAYER1).viewY=0
                  playerCamera(PLAYER1).viewDX=screenInfo.halfX-1
                  playerCamera(PLAYER1).viewDY=screenInfo.halfY-1

                  playerCamera(PLAYER2).viewX=screenInfo.halfX+1
                  playerCamera(PLAYER2).viewY=0
                  playerCamera(PLAYER2).viewDX=screenInfo.screenWidth
                  playerCamera(PLAYER2).viewDY=screenInfo.halfY-1

                  playerCamera(PLAYER3).viewX=0
                  playerCamera(PLAYER3).viewY=screenInfo.halfY+1
                  playerCamera(PLAYER3).viewDX=screenInfo.halfX-1
                  playerCamera(PLAYER3).viewDY=screenInfo.screenHeight

                  playerCamera(PLAYER4).viewX=screenInfo.halfX+1
                  playerCamera(PLAYER4).viewY=screenInfo.halfY+1
                  playerCamera(PLAYER4).viewDX=screenInfo.screenWidth
                  playerCamera(PLAYER4).viewDY=screenInfo.screenHeight
                  endcase
   endselect

   for l=PLAYER1 to PLAYER1+(numPlayers-1)
      if playerCamera(l).camNum<>0
         make camera playerCamera(l).camNum
         set camera view playerCamera(l).camNum,_
                        playerCamera(l).viewX,playerCamera(l).viewY,_
                        playerCamera(l).viewDX,playerCamera(l).viewDY
         set camera range playerCamera(l).camNum,10,100000
      endif
   next l
endfunction

function scaleToSize(obj as integer,_
                     resX# as float,_
                     resY# as float,_
                     resZ# as float)
local x# as float
local y# as float
local z# as float

   x#=(resX#/object size x(obj))*100.0
   y#=(resY#/object size y(obj))*100.0
   z#=(resZ#/object size z(obj))*100.0
   scale object obj,x#,y#,z#
endfunction