| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- Repeat
- n_dudes=Input$( "Number of dudes (1-50):" )
- Until n_dudes>=1 And n_dudes<=100
- Global info1$="Collision demo"
- Global info2$="Arrow keys/A/Z To drive, Tab To repel"
- Include "../start.bb"
- Type Dude
- Field entity,speed#
- End Type
- Const T_DUDE=1,T_WALLS=2
- Collisions T_DUDE,T_DUDE,1,2 ;sphere-to-sphere, sliding collisions
- Collisions T_DUDE,T_WALLS,2,2 ;sphere-to-polygon, sliding collisions
- walls=CreateCube()
- EntityColor walls,0,32,192
- FitMesh walls,-40,0,-40,80,80,80
- FlipMesh walls
- EntityType walls,T_WALLS
- col=CreateCube()
- FitMesh col,-1,0,-1,2,40,2
- EntityColor col,255,0,0
- EntityAlpha col,.75
- EntityType col,T_WALLS
- For k=30 To 359+30 Step 60
- t=CopyEntity( col )
- RotateEntity t,0,k,0
- MoveEntity t,0,0,34
- Next
- FreeEntity col
- camera=CreateCamera()
- PositionEntity camera,0,50,-46
- TurnEntity camera,45,0,0
- light=CreateLight()
- TurnEntity light,45,45,0
- player=CreateCube()
- EntityColor player,0,255,0
- PositionEntity player,0,3,0
- EntityRadius player,2
- EntityType player,T_DUDE
- nose=CreateCube( player )
- EntityColor nose,0,255,0
- ScaleEntity nose,.5,.5,.5
- PositionEntity nose,0,0,1.5
- sphere=CreateSphere()
- EntityShininess sphere,.5
- EntityType sphere,T_DUDE
- an#=0
- an_step#=360.0/n_dudes
- For k=1 To n_dudes
- d.Dude=New Dude
- d\entity=CopyEntity( sphere )
- EntityColor d\entity,Rnd(255),Rnd(255),Rnd(255)
- TurnEntity d\entity,0,an,0
- MoveEntity d\entity,0,2,37
- ResetEntity d\entity
- d\speed=Rnd( .4,.49 )
- an=an+an_step
- Next
- FreeEntity sphere
- ok=True
- While Not KeyHit(1)
- If KeyDown(203) TurnEntity player,0,5,0
- If KeyDown(205) TurnEntity player,0,-5,0
- If KeyDown(200) MoveEntity player,0,0,.5
- If KeyDown(208) MoveEntity player,0,0,-.5
- If KeyDown(30) TranslateEntity player,0,.2,0
- If KeyDown(44) TranslateEntity player,0,-.2,0
-
- For d.Dude=Each Dude
- If EntityDistance( player,d\entity )>2
- PointEntity d\entity,player
- If KeyDown(15) TurnEntity d\entity,0,180,0
- EndIf
- MoveEntity d\entity,0,0,d\speed
- Next
- UpdateWorld
- RenderWorld
- Goto skip
- If ok
- ;
- ;sanity check!
- ;make sure nothings gone through anything else...
- ;
- For d=Each Dude
- If EntityY( d\entity )<.9
- ok=False
- bad$="Bad Dude Y: "+EntityY( d\entity )
- EndIf
- For d2.Dude=Each Dude
- If d=d2 Then Exit
- If EntityDistance( d\entity,d2\entity )<.9
- ok=False
- bad$="Dude overlap!"
- EndIf
- Next
- Next
- EndIf
-
- If ok
- Text 0,0,"Dudes OK"
- Else
- CameraClsColor camera,255,0,0
- Text 0,0,bad$
- EndIf
- .skip
-
- Flip
- Wend
|