Box2D - Chain Type

Previous topic - Next topic

backslider

Hi guys,

I created a simple Type for creating chains like a bridge or a lamp with the Box2D - Wrapper.

Code (glbasic) Select

// --------------------------------- //
// Project: box2dSoftbody
// Start: Thursday, May 31, 2012
// IDE Version: 10.202


// SETCURRENTDIR("Media") // go to media files

b_InitWorld(0,0,640,480,0,.96,TRUE)
b_CreateGroundbox(320,440,640,80)


//------------------------CHAIN------------------------
//Init the chain
LOCAL myChain AS TChain

myChain.AddChainLink(100,300, 0,1,0,10) //create the "sticked" parent

//create 20 chain link childs
FOR i% = 0 TO 49
myChain.AddChainLink(110 + i*10,300, 1,10,0,10)
NEXT

myChain.AddChainLink(610,300, 0,1,0,10)

myChain.Generate() //generate the "physics" chain"
//------------------------CHAIN------------------------

b_CreateBox(50,10,0,300,200,25,25)

//main loop
WHILE TRUE
b_Update(.1, 10)

b_WorldDebug()
SHOWSCREEN
WEND



//CHAIN TYPES
TYPE TChain
chainLinks[] AS TChainLink

//Add a link to the chain
FUNCTION AddChainLink: x%, y%, mass#, friction#, restitution#, size#
LOCAL link AS TChainLink
link.Init(x, y, mass, friction, restitution, size)
DIMPUSH self.chainLinks[], link
ENDFUNCTION

//Generate the chain after creating the links
FUNCTION Generate:
FOR i% = 0 TO LEN(self.chainLinks[]) - 1
LOCAL link AS TChainLink
link = self.chainLinks[i]
link.body = b_CreateCircle(link.mass, link.friction, link.restitution, link.x, link.y, link.size)
self.chainLinks[i] = link

IF i > 0
LOCAL linkBefore AS TChainLink
linkBefore = self.chainLinks[i-1]
DEBUG linkBefore.body + ", " + link.body + "\n"
link.joint = b_JointDistance(link.body, linkBefore.body, link.GetX(), link.GetY(), linkBefore.GetX(), linkBefore.GetY())
ENDIF
NEXT
ENDFUNCTION
ENDTYPE

TYPE TChainLink
x%
y%
mass#
friction#
restitution#
size
body%
joint%

FUNCTION Init: x%, y%, mass#, friction#, restitution#, size#
self.x = x
self.y = y
self.mass = mass
self.friction = friction
self.restitution = restitution
self.size = size / 2
ENDFUNCTION

FUNCTION GetX%:
RETURN b_BodyGetPosX(self.body)
ENDFUNCTION

FUNCTION GetY%:
RETURN b_BodyGetPosY(self.body)
ENDFUNCTION
ENDTYPE


Hope you like it!  :good:

bigsofty

Better late than never.  :D Thanks Backslider, very handy!  :good:
Cheers,

Ian.

"It is practically impossible to teach good programming style to students that have had prior exposure to BASIC.  As potential programmers, they are mentally mutilated beyond hope of regeneration."
(E. W. Dijkstra)

mentalthink

Thanks I think in 3D can be very handly!!! thaks for the work!!!  :good:

backslider

You're welcome ;) I hope it helps you!
Would like to see it in a game. :)