| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- ;Lightning Effect
- ;David Bird
- ;[email protected]
- ;http://www.birdie72.freeserve.co.uk
- ;16/6/01 (beta 2.25)
- ;Example of creating a lightning mesh
- Graphics3D 640,480
- SetBuffer BackBuffer()
- ;Set Up collisions here
- ;
- Const TYPE_MOVE=1
- Const TYPE_TERR=2
- Collisions TYPE_MOVE,TYPE_TERR,2,3
- ;Create a camera
- cam=CreateCamera()
- CameraRange cam,1,25000
- CameraClsMode cam,False,True
- PositionEntity cam,0,50,-152
- EntityRadius cam,10
- EntityType cam,TYPE_MOVE
- ;Load terrain
- terr=LoadTerrain("hmap.bmp")
- TerrainDetail terr,4000
- ;Load textures
- tex1=LoadTexture("forest.bmp") ;Grass Texture
- ;resize textures
- ScaleTexture tex1,32,32
- EntityTexture terr,tex1
- ;scale terrain to size
- ScaleEntity terr,50,375,50
- EntityType terr,TYPE_TERR
- ;Add an infinate plane
- plane=CreatePlane()
- EntityTexture plane,tex1
- ScaleEntity plane,50,1,50
- EntityOrder plane,1
- EntityType plane,TYPE_TERR
- ;Load brush for lightning
- Global lightning_brush=LoadBrush("tex0.bmp",3)
- ;lightning forking ammount
- Const Lightning_Count=3
- Global flash=0
- ;
- ;Load a texture for use with as a cloud
- cloud_tex=LoadTexture("tex1.bmp",3)
- ;Create a simple plane for the sky
- ;and texture it
- sky=CreatePlane()
- EntityTexture sky,cloud_tex
- PositionEntity sky,0,500,0
- ScaleTexture cloud_tex,5000,5000
- ;Now do the other side
- sky2=CopyEntity(sky)
- RotateEntity sky2,180,0,0
- EntityParent sky2,sky
- ;
- ; Do audio here
- ;
- listen=CreateListener(cam,.00001,10,5) ;doh
- Global thunder=LoadSound("thunder.wav")
- wind_snd=LoadSound("wind.wav")
- LoopSound wind_snd
- EmitSound(wind_snd,terr)
- AmbientLight 30,30,30
- While Not KeyDown(1)
- ClsColor flash,flash,flash
- If flash>30 Then
- AmbientLight flash,flash,flash
- End If
- Cls
- If KeyDown(203) TurnEntity cam,0,+1,0 ;cursors to turn
- If KeyDown(205) TurnEntity cam,0,-1,0
- TranslateEntity cam,0,-9.8,0 ;drop camera to surface
- If KeyDown(44) MoveEntity cam,0,0,-8 ;A - fly foward
- If KeyDown(30) MoveEntity cam,0,0,8 ;Z - fly backward
- If KeyHit(2) Then Create_lightning(Rnd(1000),500,Rnd(1000),500,20)
- ;Do update
- Update_Lightning(cam)
-
- ;Move the clouds a bit
- MoveEntity sky,Sin(MilliSecs()/1000),0,3
- UpdateWorld
- RenderWorld
-
- Flip
- Wend
- ;Freeup entity's and textures
- Free_Lightning()
- FreeTexture tex1
- FreeTexture cloud_tex
- FreeEntity terr
- FreeEntity sky2
- FreeEntity sky
- FreeEntity plane
- FreeEntity cam
- EndGraphics
- End
- Type lightning
- Field ent
- Field surf
- Field alpha#
- End Type
- ;Update the lightning bolts
- Function Update_Lightning(cam)
- For a.lightning=Each lightning
- a\alpha=a\alpha-.1
- If a\alpha<1 Then
- EntityAlpha a\ent,a\alpha
- EntityColor a\ent,255*a\alpha,255*a\alpha,255
- End If
- If a\alpha<0 Then FreeEntity a\ent:Delete a
- Next
- If flash>0 Then flash=flash-20
- If flash<0 Then flash=0
- End Function
- ;Free up any memory used on with lightning.
- Function Free_Lightning()
- For a.lightning=Each lightning
- If a\ent Then FreeEntity a\ent
- Delete a
- Next
- End Function
- ;Create's Lightning_count bolts of
- ;lightning
- Function Create_lightning(gx#,gy#,gz#,high#,seg)
- flash=255
- pseg=seg
- For cnt=0 To Lightning_Count
- seg=Rand(4,pseg)
- a.lightning=New lightning
- a\alpha=2
- a\ent=CreateMesh()
- EntityFX a\ent,1
- a\surf=CreateSurface(a\ent,lightning_brush)
- x#=0
- y#=0
- z#=0
- stp#=high/Float(seg)
- For b=0 To seg
- AddVertex a\surf,x,y,z,0,0
- x=x-30
- AddVertex a\surf,x,y,z,1,0
- x=x+Rnd(-80,80)
- y=y-stp
- AddVertex a\surf,x,y,z,1,1
- x=x+30
- AddVertex a\surf,x,y,z,0,1
- Next
- For b=0 To (4*seg) Step 4
- AddTriangle(a\surf,b,b+1,b+2)
- AddTriangle(a\surf,b,b+2,b+3)
-
- AddTriangle(a\surf,b,b+2,b+1)
- AddTriangle(a\surf,b,b+3,b+2)
- Next
- PositionEntity a\ent,gx,gy,gz
- Next
- EmitSound thunder,a\ent
- End Function
|