TGC Codebase Backup



S by RUCCUS

22nd Apr 2005 19:45
Summary

Snap objects to a grid while moving them with the mouse. Useful for Game Makers. Link to the grid.bmp picture:http://i3.photobucket.com/albums/y84/RUCCUS/GRID.bmp



Description

Comments in source. Move objects around the map with the mouse using a "snapping" type movement. This version requires media.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    ``````````````````````````````````````````````````````````````````
`Snap-To-Grid Movement System (S-GMS)
`Programmed by RUCCUS
``````````````````````````````````````````````````````````````````
`S-GMS is a function created for Dark Basic Pro that allows the
`user to move any selected object with the mouse in a "snapping"
`way, much like proffesional map maker programs.
`The bones of the program uses part of my GMS function to move
`the object with the mouse in combination with some new code I
`created to move the object in sections.
`Use the code in any way you wish, no royalties are required but
`as always with all my code a simple mention of my name would be
`nice, and possibly a link to my site, www.ruccus.net. Goodluck,
`and if you have any questions feel free to email me at
`ruccus@ruccus.net.
``````````````````````````````````````````````````````````````````
`Standard Program Setup
SYNC ON:SYNC RATE 0:SET TEXT FONT "ARIAL":POSITION MOUSE 319.5,237
`Create a few objects for us to move
MAKE OBJECT BOX 1,30,30,30
`Load the image we will texture our grid with
LOAD IMAGE "GRID.bmp",1
`Create a plain and edit it to be our background grid object,
`ONLY for cismetic purposes.
MAKE OBJECT PLAIN 10, 700,530
POSITION OBJECT 10,0,0,0
XROTATE OBJECT 10,-90
TEXTURE OBJECT 10,1
`IMPORTANT: The height at which you position the camera is vital.
`I find 435 to be about right for the GMS, any higher or lower
`can affect how the movement of the objects work. Experiment with
`it if you wish.
POSITION CAMERA 0,435,0
POINT CAMERA 0,0,0
`Start our main loop
DO
`Display some nifteh' text on the screen...
SET TEXT TO BOLD
CENTER TEXT 319.5,0,"Snap-To-Grid Movement System"
SET TEXT TO NORMAL
CENTER TEXT 319.5,15,"Programmed by RUCCUS"
SET TEXT TO BOLD
CENTER TEXT 319.5,450,"Special thanks to APEXnow, [Jimmy] and TheSturgeon for programming help!"
SET TEXT TO NORMAL
`Call the Move Object With Mouse function
SGMS()
`Refresh the screen and end the loop
SYNC
LOOP

`Move Object With Mouse Function

`Breakdown:
`The function stores the object's position for later use. Then
`checks if the mouse is being clicked. If it is, and the mouse is
`at the same coordinates as the object in question, then check
`where the mouse is next. If it's to the left of the object,
`move the object left, if it's to the right, move the object
`right, if it's infront of it, move the object forward. And
`finally if it's behind it, move it backward.
`If the object is off of the screen, reposition it at it's old
`coordinates to disallow moving it off of the screen.

`What to change for different purposes:
`Change what the for checks for for more objects. I.E If you want
`to check for object's between 1 and 10, use
`for i = 1 to 10 Step 1.
`Change the amount at which the object's move to a greater or
`lesser number for larger or lesser movement. Depending on the
`size of your grid and objects, you may want to change this.
`If all your objects are the same width and length, you could
`change the 30 to the object's width and length.
`As a rule of thumb, keep object sizes divisible by the amount
`you're moving the object.

FUNCTION SGMS()
FOR i = 1 TO 1 STEP 1
OLDX#=OBJECT POSITION X(i)
OLDY#=OBJECT POSITION Y(i)
OLDZ#=OBJECT POSITION Z(i)
IF MOUSECLICK()=1
IF MOUSEX()>=(OBJECT SCREEN X(i)-(OBJECT SIZE X(i)/2)-5) AND MOUSEX()<=OBJECT SCREEN X(i)+(OBJECT SIZE X(i)/2)+5 AND MOUSEY() >=(OBJECT SCREEN Y(i)-(OBJECT SIZE Y(i)/2))-10 AND MOUSEY()<=(OBJECT SCREEN Y(i)+(OBJECT SIZE Y(i)/2))+10
IF MOUSEY()< (OBJECT SCREEN Y(i)-(OBJECT SIZE Y(i)/2)+5) THEN MOVE OBJECT i,32
IF MOUSEY()> (OBJECT SCREEN Y(i)+(OBJECT SIZE Y(i)/2)-5) THEN MOVE OBJECT i,-32
IF MOUSEX()<= (OBJECT SCREEN X(i)-(OBJECT SIZE X(i)/2)+5) THEN MOVE OBJECT LEFT i,32
IF MOUSEX()> (OBJECT SCREEN X(i)+(OBJECT SIZE X(i)/2)-5) THEN MOVE OBJECT RIGHT i,32
IF OBJECT IN SCREEN (i)=0 THEN POSITION OBJECT i,OLDX#,OLDY#,OLDZ#
ENDIF
ENDIF
NEXT i
ENDFUNCTION
`````````````````````````````````````````````````````````````````
`Special Thanks
`````````````````````````````````````````````````````````````````
`APEXnow     : For helping me overcome my problem with moving the
`              object up and down.
`[Jimmy]     : For helping me understand the basics of implementing
`              background pictures, i.e the grid.
`TheSturgeon : For trying to help me :P
`````````````````````````````````````````````````````````````````
`Contact me at ruccus@ruccus.net or on the db irc channel for
`more information and help on this or any of my other code
`snippets and tutorials.
`````````````````````````````````````````````````````````````````
`Thanks
` - RUCCUS
`````````````````````````````````````````````````````````````````