Тема: Волны
Показать сообщение отдельно
Старый 03.12.2010, 04:55   #5
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Волны

ProcedureDLL UpdateWater_tm()
ForEach Water()
Lis.l=ListIndex(water())
If PeekL(water()\surf+36)<>0
;=================
If water()\ss
hdd.f=0.06
dimple(ListIndex(water()),Random(water()\width),Ra ndom(water()\depth),hdd.f)
EndIf
;--------------------------
For xm= 1 To water()\width+1
For zm=1 To water()\depth +5

If zm<water()\depth-1 And xm<water()\width-1

yv.f=nU(Lis,xm,zm)*water()\h

PokeF (memM(Lis,xm,zm)+4,yv.f)
heiM (Lis,xm,zm)=yv.f

laplas.f=(nU(Lis,xm-1,zm)+nU(Lis,xm+1,zm)+nU(Lis,xm,zm+1)+nU(Lis,xm,zm-1))*0.25-nU(Lis,xm,zm)
pU(Lis,xm,zm)=((2.0-water()\sd)*nU(Lis,xm,zm)-pU(Lis,xm,zm)*(1.0-water()\sd)+laplas)

EndIf
;================================================= =
If zm>4
zmn=zm-5
xmn=xm-1
;-----------------normal-------


e1.f And e0.f=heiM (Lis,xmn,zmn)
If xmn<water()\width
e0.f=heiM (Lis,xmn+1,zmn)
EndIf

If xmn>0
e1.f=heiM (Lis,xmn-1,zmn)
EndIf

xn.f=-(e0.f-e1.f)

e1.f And e0.f=heiM (Lis,xmn,zmn)
If zmn<water()\depth
e0.f=heiM (Lis,xmn,zmn+1)
EndIf

If zmn>0
e1.f=heiM (Lis,xmn,zmn-1)
EndIf

zn.f=e0.f-e1.f
yn.f=4

;--------------------normalisate--------
;-------------------------
PokeF (memM(Lis,xmn,zmn)+12,xn.f)
PokeF (memM(Lis,xmn,zmn)+16,yn.f)
PokeF (memM(Lis,xmn,zmn)+20,zn.f)
EndIf

Next
Next

;================================

;EndIf

*Sw=AllocateMemory(65535)
RtlMoveMemory_(*Sw,@pU(Lis,0,0),65535)
RtlMoveMemory_(@pU(Lis,0,0),@nU(Lis,0,0),65535)
RtlMoveMemory_(@nU(Lis,0,0),*Sw,65535)
FreeMemory(*Sw)



PokeL(water()\surf+36,0)
EndIf

Next


EndProcedure
;================================
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (03.12.2010)