Files

125 lines
2.3 KiB
BlitzBasic

; Silly collision demo
; Delete me
; dave@birdie72.freeserve.co.uk
Graphics3D 640,480
SetBuffer BackBuffer()
Const D_TYPE=1
Const DB_TYPE=2
Collisions DB_TYPE,D_TYPE,2,1
cam=CreateCamera():PositionEntity cam,0,30,-50
TurnEntity cam,20,0,0
lit=CreateLight()
Global domi=CreateCube()
tex=LoadTexture("tex0.bmp"):ScaleTexture tex,2.2,1
EntityTexture domi,tex
ScaleMesh domi,.1,1,.5
HideEntity domi
p=1
For a#=355 To 90 Step -2.7
r.dom=add_domi(30*Cos(a),30*Sin(a),90+a,p)
EntityColor r\ent,Rnd(255),Rnd(255),Rnd(255)
p=p-1
Next
For a#=85 To 355 Step 2.7
r.dom=add_domi(-30*Cos(a),60-30*Sin(a),90+a,p)
EntityColor r\ent,Rnd(255),Rnd(255),Rnd(255)
p=p-1
Next
For a=1 To 100 Step 1
r.dom=add_domi(a,30,180,p)
EntityColor r\ent,Rnd(255),Rnd(255),Rnd(255)
Next
cube=CreateCube()
FitMesh cube,-250,0,-250,500,500,500
FlipMesh cube
tex=LoadTexture( "floortile.bmp" )
ScaleTexture tex,1.0/3,1.0/3
EntityTexture cube,tex
EntityAlpha cube,.29
EntityFX cube,1
;mr=CreateMirror()
While Not KeyDown(1)
If KeyDown(203) Then TurnEntity cam,0,2,0
If KeyDown(205) Then TurnEntity cam,0,-2,0
UpdateWorld
RenderWorld
Update_domi()
Flip
Wend
FreeEntity cam
EndGraphics
End
Type dom
Field piv
Field ent
Field col
Field fall
Field start
Field miss
End Type
Function Add_Domi.dom(x#,z#,ang#,f)
a.dom=New dom
a\piv=CreatePivot()
a\ent=CopyEntity(domi,a\piv)
PositionEntity a\ent,0,1,0
PositionEntity a\piv,x,0,z
TurnEntity a\piv,0,ang,0
a\col=CreatePivot(a\piv)
EntityRadius a\col,.015
EntityType a\ent,D_TYPE
PositionEntity a\col,0,2,0
EntityType a\col,DB_TYPE
a\miss=False
If f=1 Then
a\fall=True
a\start=True
Else
a\fall=False
a\start=False
End If
Return a
End Function
Function update_Domi()
For a.dom=Each dom
If a\miss=False Then
If EntityRoll(a\piv)<70 Then
If a\fall=True Then
If CountCollisions(a\col)=0 Then
TurnEntity a\piv,0,0,20
Else
a\fall=False
ent=CollisionEntity (a\col,CountCollisions(a\col))
b.dom=Find_Domi(ent)
If b<>Null Then
b\start=True
End If
End If
End If
Else
a\miss=True
End If
End If
Next
For a.dom=Each dom
If a\start=True
If CountCollisions(a\col)=0 Then a\fall=True
End If
Next
End Function
Function Find_Domi.dom(ent)
For a.dom=Each dom
If a\ent=ent Then Return a
Next
Return Null
End Function