My little lightning bolts!
Edit: Picture:

http://s87776868.onlinehome.us/stuff/lightning.zip
The little 'rods' are just Blitz primitives.
Source:
;use the arrow keys to move
Graphics3D 800,600,32,Int(Input$("Windowed: (0 or 1) "))+1
Include "h_lotus.bb"
InitLotus()
;; CAMERA
C = CreateCamera()
PositionEntity C,-10,10,-10
CameraClsColor C,32,32,32
CameraClsMode C,1,1
CameraRange C,.01,10000
SetLotusCamera C
;; FPS
MFPS = 45
Period = 1000/MFPS
Time = MilliSecs()-Period
Global fps,timenext,frames
;; LIGHT
L = CreateLight(2)
PositionEntity L,24,24,24
LightRange L,Sqr(64*64*3)/4
LightColor L,255,255,255
AmbientLight 128,128,128
;;EMITTERS
Global gLightning
gLightning = LoadEmitter("media/ln.png")
SetEmitterParticleMesh gLightning,cP_TRAIL
SetEmitterSizeFrom gLightning,2,2
SetEmitterColorTo 0,255,255,255,1
SetEmitterBlend 0,3
SetEmitterSizeTo 0,2,2
SetEmitterRandomRotation 0,0,10,0,0,-10
SetEmitterAngle 0,0,0,90
Function Strike(X#,Y#,Z#,TX#,TY#,TZ#,AX#,AY#,AZ#,Amount,Chaos#)
SetEmitterLifeSpan 0,Rand(3,14)
DX# = TX-X
DY# = TY-Y
DZ# = TZ-Z
Chaos# = Abs(Chaos)
For N# = 0 To Amount
From# =N/Float(Amount)
If N = Amount Or N = 0 Then
SetEmitterColorFrom 0,0,0,0,0
SetEmitterColorTo 0,0,0,0,0
If N = 0 Then
SetEmitterPosition gLightning,X,Y,Z
Else
SetEmitterPosition gLightning,TX,TY,TZ
EndIf
Else
SetEmitterPosition gLightning,X+DX*From+Sin(From*180)*AX+Rnd(-Chaos/2,Chaos/2),Y+DY*From+Sin(From*180)*AY+Rnd(-Chaos/2,Chaos/2),Z*DZ*From+Sin(From*180)*AZ+Rnd(-Chaos/2,Chaos/2)
SetEmitterColorFrom 0,220,255,255,1
SetEmitterColorTo 0,220,255,255,1
EndIf
CreateParticle gLightning
Next
End Function
Te = 250
S = CreateSphere()
PositionEntity S,-10,20,0
S = CopyEntity(S)
PositionEntity S,10,20,0
L = CreateCylinder()
PositionEntity L,-10,10,0
ScaleEntity L,.2,10,.2
L = CopyEntity(L)
PositionEntity L,10,10,0
Repeat
Repeat
Elapsed = MilliSecs() - time
Until Elapsed
Ticks=Elapsed/Period
Tween#=Float(Elapsed Mod Period) / Float(Period)
For U = 0 To Ticks
Time = Time + Period
Y# = Y + .2
If Y > 20 Then
Y = 0
EndIf
;For N = 0 To Rand(0,5)
Strike -10,Y,0,10,Y,0,Rnd(-2,2)*Y/20,Y/3,Rnd(-2,2)*Y/20,Rand(3,10),1.8
;Next
;; UPDATE CAMERA
mxs# = mxs + Float(MouseXSpeed())/3
mys# = mys + Float(MouseYSpeed())/3
mxs = mxs - mxs/4
mys = mys - mys/4
TurnEntity C,mys,-mxs,0
RotateEntity C,Min(Max(EntityPitch(C),80),-80),EntityYaw(C),0
MoveEntity C,(KeyDown(205)-KeyDown(203))*2,0,(KeyDown(200)-KeyDown(208))*2
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
;; ;; UPDATE PARTICLES
T = MilliSecs()
UpdateLotusParticles()
T = MilliSecs() - T
UpdateWorld
If U = Ticks Then CaptureWorld
Next
RenderWorld Tween
; AppTitle GetFPS(False)
Text 2,2,"FPS: "+GetFPS(False)
Text 2,22,T
Text 2,42,"Particles: "+gLotusParticleCount
Flip False
Until KeyHit(1)
KillLotus()
Function GetFPS(JustChecking = False)
If Not JustChecking Then frames = frames+1
If MilliSecs() > timenext Then
timenext = MilliSecs()+1000
fps = frames
frames = 0
EndIf
Return fps
End Function
|