sekä 'voimavirta'jutut ei toimi vielä kunnolla....
Code: Select all
FrameLimit 40
SCREEN 1500,900,0,2
SetWindow "PlasmaEfekti by Axu",3
Type Plasma
Field X#
Field Y#
Field Dir#
Field Speed#
Field Typ
EndType
SW=ScreenWidth()
SH=ScreenHeight()
For i=1 To 100
nP.Plasma=New(Plasma)
nP\X=Rand(SW)
nP\Y=Rand(SH)
nP\Dir=GetAngle(nP\X,nP\Y,MouseX(),MouseY())
nP\Speed=Distance(nP\X,nP\Y,MouseX(),MouseY())/100
Next i
DIF=1
MouseMode=1
PlasmaAffect=1
DrawStyle=1
Repeat
mX=MouseX()
mY=MouseY()
If MouseMode=0 And MouseHit(1) Then
i=0
For iP.Plasma=Each Plasma
If Distance(mX,mY,iP\X+Cos(iP\Dir)*iP\Speed,iP\Y-Sin(iP\Dir)*iP\Speed)<20 Then i=1:Exit
Next iP
If i=0 Then
nP.Plasma=New(Plasma)
nP\X=mX
nP\Y=mY
nP\Typ=1
EndIf
EndIf
For iP.Plasma=Each Plasma
If iP\Typ=0 Then
oX=iP\X:oY=iP\Y
If oX>SW Or oX<0 Then
iP\Dir=WrapAngle(-iP\Dir+180)
Repeat
iP\X=CurveValue(SW/2,iP\X,50)
Until iP\X<SW And iP\X>0
EndIf
If oY>SH Or oY<0 Then
iP\Dir=WrapAngle(-iP\Dir)
Repeat
iP\Y=CurveValue(SH/2,iP\Y,50)
Until iP\Y<SW And iP\X>0
EndIf
If MouseMode Then
If MouseDown(1) Then
iP\Dir=CurveAngle(GetAngle(mX,mY,oX,oY),iP\Dir,Rand(10-DIF,10+DIF))
Else
iP\Dir=CurveAngle(GetAngle(oX,oY,mX,mY),iP\Dir,Rand(10-DIF,10+DIF))
EndIf
If MouseDown(2) Then
iP\Speed=CurveValue(Distance(oX,oY,mX,mY)/-Rand(10-DIF,10+DIF),iP\Speed,10)
Else
iP\Speed=CurveValue(Distance(oX,oY,mX,mY)/ Rand(10-DIF,10+DIF),iP\Speed,10)
EndIf
EndIf
If PlasmaAffect Then
' num=0:FDir=0
For jP.Plasma=Each Plasma
'num+1
If Distance(iP\X,iP\Y,jP\X,jP\Y)<300 Then
If jP\Typ=0 Then
' FDir+jP\Dir
iP\Dir=CurveAngle(jP\Dir,iP\Dir,Distance(oX,oY,jP\X,jP\Y)*Rand(10-DIF,10+DIF)+jP\Speed)
Else
'FDir=FDir+jP\Dir*10
' num+9
iP\Dir=CurveAngle(jP\Dir,iP\Dir,Distance(oX,oY,jP\X,jP\Y)/Rand(10-DIF,10+DIF)+jP\Speed)
EndIf
EndIf
Next jP
' FDir=FDir/num
' iP\Dir=CurveAngle(FDir,iP\Dir,Rand(10-DIF,10+DIF))
EndIf
iP\X=iP\X+Cos(iP\Dir)*iP\Speed
iP\Y=iP\Y-Sin(iP\Dir)*iP\Speed
Color iP\Speed*10,255-iP\Speed*10,iP\Dir
If DrawStyle=1 Then
Line oX,oY,iP\X,iP\Y
Else
Circle oX,oY,Abs(iP\Speed)
EndIf
Else
If MouseDown(1) And Distance(mX,mY,iP\X+Cos(iP\Dir)*iP\Speed,iP\Y-Sin(iP\Dir)*iP\Speed)<20 Then
iP\Dir=GetAngle(iP\X,iP\Y,mX,mY)
iP\Speed=Distance(iP\X,iP\Y,mX,mY)
EndIf
Color 255,255,255
Line iP\X,iP\Y,iP\X+Cos(iP\Dir)*iP\Speed,iP\Y-Sin(iP\Dir)*iP\Speed
Circle iP\X+Cos(iP\Dir)*iP\Speed-10,iP\Y-Sin(iP\Dir)*iP\Speed-10,20,0
EndIf
Next iP
Color 255,255,255
Text 1,1 ,"FPS: "+FPS()
Text 1,15,"Satunnaisuus: "+DIF+" Nuolet Y/A vaihtaa"
If PlasmaAffect Then
Text 1,30,"Plasma vaikuttaa, Hiiren rulla vaihtaa."
Else
Text 1,30,"Plasma ei vaikuta, Hiiren rulla vaihtaa."
EndIf
Text SW-TextWidth("Paina SPACE muuttaaksesi hiiren tilaa"),1 ,"Paina SPACE muuttaaksesi hiiren tilaa"
Text SW-TextWidth("Paina ENTER muuttaaksesi piirtotyyliä"),15,"Paina ENTER muuttaaksesi piirtotyyliä"
If MouseMode Then
Text SW-TextWidth("Paina hiiren nappia pohjassa muuttaaksesi hiiren voiman päinvastaiseksi"),30,"Paina hiiren nappia pohjassa muuttaaksesi hiiren voiman päinvastaiseksi"
Else
Text SW-TextWidth("Klikkaa ja raahaa luodaksesi voimavirran"),30,"Klikkaa ja raahaa luodaksesi voimavirran"
EndIf
DIF=DIF+KeyHit(cbKeyUp)-KeyHit(cbKeyDown)
MouseMode=(MouseMode+KeyHit(cbKeySpace)) Mod 2
DrawStyle=(Drawstyle+KeyHit(cbKeyReturn)) Mod 2
PlasmaAffect=(PlasmaAffect+MouseMoveZ()) Mod 2
DrawScreen
Forever
Function KeepDistance(x1,y1,x2,y2,dis,mode=0,ret=0)
angle=GetAngle(x1,y1,x2,y2)
If mode=>0 And Distance(x1,y1,x2,y2)<dis Then x1=x2-Cos(angle)*dis:y1=y2+Sin(angle)*dis
If mode=<0 And Distance(x1,y1,x2,y2)>dis Then x1=x2-Cos(angle)*dis:y1=y2+Sin(angle)*dis
If ret=0 Then
Return x1
Else
Return y1
EndIf
EndFunction