Тема: Взрыв
Показать сообщение отдельно
Старый 04.09.2005, 22:36   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
SeedRnd(MilliSecs())

Const count_sphere=24
Const count_trash=60
Const alpha_v#=0.003

Type boom
Field pivot
Field spheres[count_sphere]
Field size#[count_sphere]
Field alpha#[count_sphere]
Field time_update
Field trash[count_trash]
Field vx#[count_trash]
Field vy#[count_trash]
Field vz#[count_trash]
Field rvx#[count_trash]
Field rvy#[count_trash]
Field rvz#[count_trash]
Field alpha2#[count_trash]

Field count_sphereL
Field count_trashL
Field alpha_v#
End Type

Function create_Explosion(x#,y#,z#,power#)
Local max_rot#=50
Local max_v#=0.07*power#
Local tarsh_p#=1
b.boom=New boom
b\pivot=CreatePivot()
PositionEntity b\pivot,x,y,z,True

b\count_sphereL=power#*2
b\count_trashL=power#*10
b\alpha_v#=0.0029*(1/power#)

If b\count_sphereL>count_sphere b\count_sphereL= count_sphere
If b\count_trashL>count_trash b\count_trashL= count_trash

For is=1 To b\count_sphereL
b\spheres[is]=CreateSphere(8,b\pivot)
b\size[is]=0.0001
b\alpha[is]=1
Next
For is=1 To b\count_trashL
b\trash[is]=CreateCube()
x#=Rnd(0,tarsh_p*0.3)
y#=Rnd(0,trash_p-x#)
z#=Rnd(0,trash_p-x-z#)
ScaleEntity b\trash[is],x,y,z,True
b\rvx[is]=Rnd(0,max_rot#)
b\rvy[is]=Rnd(0,max_rot#)
b\rvz[is]=Rnd(0,max_rot#)

b\vx[is]=Rnd(-max_v,max_v)
b\vy[is]=Rnd(0,max_v)
b\vz[is]=Rnd(-max_v,max_v)

EntityColor b\trash[is],100,100,100
b\alpha2[is]=1
Next
b\time_update=MilliSecs()
Return Handle(b)
End Function
 
Function update_Explosions()
Local min_dist_sp#=10
Local grav#=0.0001
For b.boom=Each boom
new_time=MilliSecs()
delta_time=new_time-b\time_update
b\time_update=new_time
For is=1 To b\count_sphereL
If b\spheres[is]
b\size[is]=b\size[is]+delta_time*0.1
b\alpha[is]=b\alpha[is]-delta_time*b\alpha_v#

ScaleEntity b\spheres[is],b\size[is],b\size[is],b\size[is],True
If b\alpha[is]>0
EntityAlpha b\spheres[is],b\alpha[is]
EndIf
If b\size[is]<min_dist_sp# bExit=True
If b\alpha[is]<=0 FreeEntity b\spheres[is]:b\spheres[is]=0
If bExit Exit
EndIf
Next
For is=1 To b\count_trashL
If b\trash[is]
TurnEntity b\trash[is],b\rvx[is]*delta_time,b\rvy[is]*delta_time,b\rvz[is]*delta_time,True
TranslateEntity b\trash[is],b\vx[is]*delta_time,b\vy[is]*delta_time,b\vz[is]*delta_time,True
EntityAlpha b\trash[is],b\alpha2[is]
b\alpha2[is]=b\alpha2[is]-delta_time*b\alpha_v#*0.1
b\vy[is]=b\vy[is]-grav#*delta_time
If b\alpha2[is]<=0 FreeEntity b\trash[is]:b\trash[is]=0
EndIf
Next
Next
End Function
;_____________________________
;=MAIN LOOP
Graphics3D 800,600,32
Global camera=CreateCamera()
MoveEntity camera,0,3,-30
Global light=CreateLight()
Global plane=CreatePlane()
EntityColor plane,200,200,0



While Not KeyHit(1)
;@@@@@@@@@@@@@@@@@@@
If MouseHit(1) create_explosion(0,3,40,1.5)
;@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@
update_Explosions()
;@@@@@@@@@@@@@@@@@@@@@@@

RenderWorld
Flip
Wend
End
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием