lightning.bb 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. ;
  2. ;
  3. ;
  4. Graphics3D 640,480
  5. SetBuffer BackBuffer()
  6. lit=CreateLight()
  7. piv=CreatePivot()
  8. cam=CreateCamera(piv)
  9. CameraRange cam,1,5000
  10. PositionEntity cam,0,0,-5
  11. Global lightning_brush=LoadBrush("tex0.bmp",2)
  12. Const Lightning_Count=4
  13. While Not KeyDown(1)
  14. TurnEntity piv,0,1,0
  15. If KeyDown(203) TurnEntity cam,0,+1,0
  16. If KeyDown(205) TurnEntity cam,0,-1,0
  17. If KeyDown(200) TurnEntity cam,+1,0,0
  18. If KeyDown(208) TurnEntity cam,-1,0,0
  19. If KeyDown(44) MoveEntity cam,0,0,-.1
  20. If KeyDown(30) MoveEntity cam,0,0,.1
  21. If KeyHit(2) Then Create_lightning(0,0,0,300+Rand(20),30-Rand(20))
  22. Update_Lightning(cam)
  23. UpdateWorld
  24. RenderWorld
  25. Flip
  26. Wend
  27. Free_lightning()
  28. FreeEntity cam
  29. EndGraphics
  30. End
  31. Type lightning
  32. Field ent
  33. Field surf
  34. Field alpha#
  35. End Type
  36. Function Update_Lightning(cam)
  37. For a.lightning=Each lightning
  38. a\alpha=a\alpha-.03
  39. EntityAlpha a\ent,a\alpha
  40. EntityColor a\ent,255*a\alpha,255*a\alpha,255
  41. PointEntity a\ent,cam,0
  42. If a\alpha<0 Then FreeEntity a\ent:Delete a
  43. Next
  44. End Function
  45. Function Free_Lightning()
  46. For a.lightning=Each lightning
  47. If a\ent Then FreeEntity a\ent
  48. Delete a
  49. Next
  50. End Function
  51. Function Create_lightning(gx#,gy#,gz#,high#,seg)
  52. pseg=seg
  53. For cnt=0 To Lightning_Count
  54. seg=Rand(pseg)
  55. a.lightning=New lightning
  56. a\alpha=1
  57. a\ent=CreateMesh()
  58. EntityFX a\ent,4
  59. a\surf=CreateSurface(a\ent,lightning_brush)
  60. x#=0
  61. y#=0
  62. z#=0
  63. stp#=high/Float(seg)
  64. s2p#=stp/2
  65. For b=0 To seg
  66. AddVertex a\surf,x,y,z,0,0
  67. x=x-3
  68. AddVertex a\surf,x,y,z,1,0
  69. x=x+Rnd(-8,8)
  70. y=y-s2p
  71. AddVertex a\surf,x,y,z,1,1
  72. x=x+3
  73. AddVertex a\surf,x,y,z,0,1
  74. Next
  75. For b=0 To (seg) Step 4
  76. AddTriangle(a\surf,b,b+1,b+2)
  77. AddTriangle(a\surf,b+1,b+3,b+2)
  78. AddTriangle(a\surf,b,b+2,b+1)
  79. AddTriangle(a\surf,b+1,b+2,b+3)
  80. Next
  81. Next
  82. PositionEntity a\ent,gx,gy,gz
  83. End Function