hier ein Partikel editor zum testen von Particle Animationen leider noch in Beta phase
und ich bin mir noch nicht sicher ob dieser weiter entwickelt wird von mir.
Größere Fehler sollte er keine Mehr haben.
;// Control
;Mouse left klick + Key
;ADD Gravitypoint = G
;ADD Gravityline = L
;ADD Waypoint for particle = cntrl
;Change Background and System Position = shift
Changelog:
Version 0.2 Beta
- Blendvalue Source / Destination
- Speichern , Laden von Settings
- Hintergrundbild einfügen
- Gravitationpunkte
- Externe und Interne SpriteTexturen
partikel eigenschaften:
- lebenszeit
- drehung
- anz partikel
- farbe
- größe
- beschleunigung x / y
- Friction
- Bloom
Anbei compilierte *.exe sowie der quellcode.
editor:
https://www.dropbox.com/s/b27apb1al1bvrse/ped.exe?dl=0
vorlage: ein kleines feuerbeispiel
https://www.dropbox.com/s/h9deek6xf3ajnr0/fire.ped?dl=0
Code: Alles auswählen
;/********************************************************************
;
; PARTIKEL EDITOR V 0.2 Beta
; von Johannes Meyer für die Purebasic Community.
;
;
;/********************************************************************
;wird unterstützt von.
;/********************************************************************
; _________ __ _____
; /\___ ___\ /\_\ /\ __\
; \/__/\ \__/ _ __\/_/_ \ \ \_\\ ____ _____ __
; \ \ \ /\`´__\ /\ \ \ \ __\ /\ __\_ /\ __\ /´__`\
; \ \ \ \ \ \/ \ \ \ \ \ \_\\\ \\_\ \\ \____\ /\ __/
; \ \_\ \ \_\ \ \_\ \ \____\\ \___\ \ \____\\ \____\
; \/_/ \/_/ \/_/ \/____/ \/__/ \/____/ \/____/
;tbParticleSystem.cpp + .h
;Copyright goes to TriBase-Engine.
;Autor:
;David Scherfgen
;
;Portiert von Johannes Meyer 14.9.2013
;PB 5.20 final.
;Controll
;Mouse left klick + Key
;ADD Gravitypoint = G
;ADD Gravityline = L
;ADD Waypoint for particle = cntrl
;Change Background and System Position = shift
UseJPEGImageDecoder() : UsePNGImageDecoder()
UseBriefLZPacker()
EnableExplicit
#window_widh = 800
#window_height = 680
#screen_widh = 800
#screen_height = 600
#LEFT_SPACE = 360
#TOP_SPACE = #window_widh - #screen_widh
#Version = 0.2
#Titel = "PB Particel Editor"
;Grundwerte Editor
#PARTICLELIVETIME_MAX = 5
#PARTICLE_MAX = 500
#VELOCITY_MAX = 200
#ROTATION_MAX = 10
#FRICTION_MAX = 10
#SIZE_MAX = 200
#COLOR_MAX = 255
Enumeration ;Editor modes
#engine_mode_none
#engine_mode_edit
#engine_mode_run
EndEnumeration
Enumeration
#particle_0
#particle_1
#particle_2
#particle_3
#particle_4
#imgparticle_0
#imgparticle_1
#imgparticle_2
#imgparticle_3
#imgparticle_4
#color_Start
#color_End
#extern_sprite
#particle_system_gfx
#background_image
#particle_system_background
#particle_system_waypoint
#particle_system_Gravity
EndEnumeration
Structure Mass
type.i ;0 point, 1 line
Vector3_position.f[2] ;// x,y
Mass_line.f[4] ;// x,y
Mass.f
EndStructure
Structure Vector
X.f
Y.f
EndStructure
Structure Particle
systemid.i
particlesystemid.i
not_fall.i
maxparticle.i
fLifeTime.f
fBloom.f
fRandomLifeTime.f[2]
Particle.f
fParticle.f
RandomParticle.i[2]
DeltaParticle.i
StartParticle.i
EndParticle.i
Vector3_position.f[2]
Vector3_velocity.f[2]
Vector3_gravity_position.f[2]
fRandomVelocity.f[5]
fFriction.f
fRandomFriction.f[2]
fDeltaSize.f
fSize.f
fDifSize.f
fStartSize.f
fRandomStartSize.f[2]
fEndsize.f
fRandomEndSize.f[4]
Color.f[5]
DeltaColor.f[5]
Startcolor.f[5]
RandomStartColor.f[7]
Endcolor.f[5]
RandomEndColor.f[7]
;fRotation.f
fRandomStartRotation.f[2]
fStartRotation.f
fEndRotation.f
fRandomEndRotation.f[2]
fDeltaRotation.f
StartTransparenz.f
EndStructure
Global Partikel, Scrollbar_partikel, lifetime, Scrollbar_lifetime, Scrollbar_velocityx, Velocityy, Scrollbar_velocityy, Scrollbar_startsize, Scrollbar_startsize2, Velocityx, startsize, endsize, Scrollbar_endsize, Scrollbar_endsize2, color, Scrollbar_endcolor_r, Scrollbar_endcolor_g, Scrollbar_endcolor_b, Scrollbar_startcolor_r, Scrollbar_startcolor_g, Scrollbar_startcolor_b, rotation, Scrollbar_startrotation, Scrollbar_endrotation, Friction, Scrollbar_Friction, endcolor, img_startcolor, img_endcolor, Load_Extern_Textur
Global var_0, var_0_Copy1, var_0_Copy5, var_0_Copy6, var_0_Copy7, var_0_Copy8, var_0_Copy9, var_0_Copy9_Copy1, var_0_Copy9_Copy2, var_0_Copy9_Copy3, var_0_Copy9_Copy4, var_0_Copy9_Copy5, var_0_Copy1, var_0_Copy5_Copy1, var_0_Copy1_Copy1, var_0_Copy1, var_0_Copy1_Copy1, var_0_Copy1_Copy1, var_0_Copy1_Copy1_Copy1, var_0_Copy1_Copy1_Copy2, var_0_Copy1_Copy1_Copy2_Copy1, var_0_Copy6_Copy1, var_0_Copy8_Copy1, var_0_Copy8_Copy1_Copy1, var_0_Copy9_Copy1, var_0_Copy9_Copy1_Copy1, var_0_Copy9_Copy1_Copy2, var_0_Copy9_Copy1_Copy3, var_0_Copy9_Copy1_Copy4, var_0_Copy9_Copy1_Copy5,var_0_Copy9_Copy1_Copy6
Global var_0_Copy9_Copy1_Copy7,var_0_Copy9_Copy1_Copy8,Load_Background.f,background_x,background_y.f
Global Choose_Texture, Load_Textur,Checkbox_Lifetime, Checkbox_Partikel,Checkbox_Velocityx,Checkbox_StartSize,Checkbox_EndSize,Checkbox_StartColor_r,Checkbox_StartColor_g,Checkbox_StartColor_b,Checkbox_Friction,Checkbox_EndColor_r,Checkbox_EndColor_g,Checkbox_EndColor_b,Checkbox_StartRotation,Checkbox_EndRotation,Checkbox_Velocityy,Scrollbar_Bloom
Global Button_start,sFilename.s,Button_editormode,enginestate
Global event,ProgrammEnde,x.i,y.i,edit_gfx.i,edit_bg.i,gravitylines.i
Define.f dwtime1,dwTime2,ftime
Global Blend_Source ,Blend_Destination ,Sprite_quality,anzparticle.i
Global newtexture.s,window_height_dif.i,Window_width_dif.i
Global showsystem.Particle
Global NewList Gravity.Mass()
Global NewList Planet.Mass()
Global NewList Path.Particle() ;wegpunkte für systeme
Global NewList Particle.Particle() ;partikel
Procedure CHECK_STATE(value)
If value > 0 Or value > 0.0
ProcedureReturn #PB_Checkbox_Checked
Else
ProcedureReturn #PB_Checkbox_Unchecked
EndIf
EndProcedure
Procedure CHECK_INPUT(value.f,max_value.f)
If value > max_value
MessageRequester("Error","Invalide Value!")
SetGadgetState(EventGadget(),#PB_Checkbox_Unchecked)
ProcedureReturn 0
EndIf
ProcedureReturn value
EndProcedure
Procedure Change_engine_state(enginestate)
If enginestate = #engine_mode_edit
enginestate = #engine_mode_run
SetGadgetText(Button_editormode,"MODE RUN")
Else
enginestate = #engine_mode_edit
SetGadgetText(Button_editormode,"MODE EDIT")
EndIf
ProcedureReturn enginestate
EndProcedure
Procedure SaveStrukt(*showsystem, file.s)
Protected FF = CreateFile(#PB_Any, file)
If FF
If WriteData(FF, *showsystem, SizeOf(Particle)) = 0
MessageRequester("Error","allgemeiner Fehler! Writedata")
EndIf
CloseFile(FF)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure LoadStrukt(*showsystem, file.s)
Protected FF = ReadFile(#PB_Any,file)
Protected length.i
If FF
length = Lof(FF)
If length = SizeOf(Particle)
If ReadData(FF, *showsystem, SizeOf(Particle)) = 0
MessageRequester("Error","Error! ReadData")
EndIf
EndIf
CloseFile(FF)
ProcedureReturn #True
Else
MessageRequester("Error","Error! ReadFile")
EndIf
ProcedureReturn #False
EndProcedure
Procedure IntRandom(iMin.i,iMax.i)
If iMin > iMax
If Not iMax = 0
iMin = iMax
ElseIf imax = 0
iMax = iMin+1
EndIf
EndIf
ProcedureReturn Random(iMax,iMin)
EndProcedure
Procedure.f FloatRandom(fMin.f, fMax.f)
If fMin > fMax
If Not fMax = 0
fMin = fMax
ElseIf fMax <= 0
fMax = fMin+1
EndIf
EndIf
ProcedureReturn fMin + (fMax - fMin) * (Random(10001) / 10000.0)
EndProcedure
Procedure.f FPS()
Static time.i = -1
Protected currentTime.i = ElapsedMilliseconds()
Protected timeDiff.i = currentTime - time
time = currentTime
If timeDiff > 0
ProcedureReturn 1000/timeDiff
EndIf
EndProcedure
Procedure.i VECTOR_Rotate(*Vector.Vector, Angle.f)
Protected X.f = *Vector\X, Y.f = *Vector\Y
Protected Sin.f = Sin(Angle), Cos.f = Cos(Angle)
*Vector\X = Cos*X - Sin*Y
*Vector\Y = Sin*X + Cos*Y
ProcedureReturn *Vector
EndProcedure
Procedure.f ADD_PARTICLE(*showsystem.Particle,waypoint_x.f = #PB_Ignore,waypoint_y.f = #PB_Ignore)
;// Falls lebenszeit = 0 verlassen
If(*showsystem\fLifeTime <= 0.0) : ProcedureReturn #False : EndIf
;// Maximale Partitel zufallswert addieren falls grenze überschritten verlassen
*showsystem\maxparticle = *showsystem\maxparticle + intRandom(*showsystem\RandomParticle[0],*showsystem\RandomParticle[1])
If(anzparticle >= *showsystem\maxparticle) : ProcedureReturn #False : EndIf
;// Lebenszeit umkehren
Protected.f fInvLifeTime = 1.0 / (*showsystem\fLifeTime + FloatRandom(*showsystem\fRandomLifeTime[0],*showsystem\fRandomLifeTime[1]))
Protected x.i
AddElement(Particle())
With Particle()
If *showsystem\maxparticle > 100
\fDifSize = *showsystem\maxparticle/100
EndIf
\fLifeTime = *showsystem\fLifeTime + FloatRandom(*showsystem\fRandomLifeTime[0],*showsystem\fRandomLifeTime[1])
;// Start und Endsprite bestimmen
\Particle = *showsystem\StartParticle
\DeltaParticle = (*showsystem\EndParticle - *showsystem\StartParticle) * fInvLifeTime
;// Positionsvectoren
If waypoint_x.f = #PB_Ignore And waypoint_y.f = #PB_Ignore
\Vector3_position[0] = *showsystem\Vector3_position[0]
\Vector3_position[1] = *showsystem\Vector3_position[1]
Else
\Vector3_position[0] = waypoint_x.f
\Vector3_position[1] = waypoint_y.f
EndIf
;// Beschlvectoren
\Vector3_velocity[0] = *showsystem\Vector3_velocity[0] + FloatRandom(*showsystem\fRandomVelocity[0],*showsystem\fRandomVelocity[1])
\Vector3_velocity[1] = *showsystem\Vector3_velocity[1] + FloatRandom(*showsystem\fRandomVelocity[2],*showsystem\fRandomVelocity[3])
;// Bremsvector
\fFriction = *showsystem\fFriction + FloatRandom(*showsystem\fRandomFriction[0],*showsystem\fRandomFriction[1])
;// Größe
\fsize = *showsystem\fStartsize + FloatRandom(*showsystem\fRandomStartSize[0],*showsystem\fRandomStartSize[1])
\fDeltaSize = ((*showsystem\fEndSize+FloatRandom(*showsystem\fRandomEndSize[0],*showsystem\fRandomEndSize[1])) - *showsystem\fStartSize) * fInvLifeTime
;// Color R(0),G(1),B(2) ;RandomStartColor 0 min,1 man
;Kanal Rot
\color[0] = *showsystem\Startcolor[0] + IntRandom(*showsystem\RandomStartColor[0],*showsystem\RandomStartColor[1])
\DeltaColor[0] = ((*showsystem\EndColor[0] + IntRandom(*showsystem\RandomEndColor[0],*showsystem\RandomEndColor[1])) - *showsystem\StartColor[0]) * fInvLifeTime
;Kanal gelb
\color[1] = *showsystem\Startcolor[1] + IntRandom(*showsystem\RandomStartColor[2],*showsystem\RandomStartColor[3])
\DeltaColor[1] = ((*showsystem\EndColor[1] + IntRandom(*showsystem\RandomEndColor[2],*showsystem\RandomEndColor[3])) - *showsystem\StartColor[1]) * fInvLifeTime
;Kanal blau
\color[2] = *showsystem\Startcolor[2] + IntRandom(*showsystem\RandomStartColor[4],*showsystem\RandomStartColor[5])
\DeltaColor[2] = ((*showsystem\EndColor[2] + IntRandom(*showsystem\RandomEndColor[4],*showsystem\RandomEndColor[5])) - *showsystem\StartColor[2]) * fInvLifeTime
;\fRotation = *showsystem\fStartRotation + FloatRandom(*showsystem\fRandomStartRotation[0],*showsystem\fRandomStartRotation[1])
VECTOR_Rotate(@\Vector3_velocity, *showsystem\fStartRotation + FloatRandom(*showsystem\fRandomStartRotation[0],*showsystem\fRandomStartRotation[1]) )
\fDeltaRotation = ((*showsystem\fEndRotation + FloatRandom(*showsystem\fRandomEndRotation[0],*showsystem\fRandomEndRotation[1])) - *showsystem\fStartRotation) * fInvLifeTime
\StartTransparenz = *showsystem\StartTransparenz
anzparticle + 1
EndWith
ProcedureReturn #True
EndProcedure
;// Bewegt alle Partikel
Procedure MOVE_PARTICLE(fTime.f)
Protected distance.f, Value.f
Protected AccelerationX.f
Protected AccelerationY.f
Protected DifferenceX.f
Protected DifferenceY.f
Protected Delete.i
;//Alle Partikel druchgehen
ForEach Particle()
With Particle()
\not_fall = #True
;// Lebenszeit verringern
\fLifeTime - (fTime.f)
;// Ist der Partikel verschwunden?
If \fLifeTime <= 0.0
If anzparticle > 0
anzparticle - 1
EndIf
DeleteElement(Particle())
Continue
EndIf
;// Gravitation abstandsfector
Delete = #False
ForEach Gravity()
DifferenceX = Particle()\Vector3_position[0] - Gravity()\Vector3_position[0]
DifferenceY = Particle()\Vector3_position[1] - Gravity()\Vector3_position[1]
Distance = Sqr(DifferenceX*DifferenceX+DifferenceY*DifferenceY)
If Distance < Particle()\fSize
Delete = #True
EndIf
Value = Gravity()\Mass / (Distance*Distance*Distance) * fTime * 100
Particle()\Vector3_velocity[0] - DifferenceX*Value
Particle()\Vector3_velocity[1] - DifferenceY*Value
Next
If Delete
DeleteElement(Particle())
Continue
EndIf
;// Abbremsen
If Not \fFriction = 1.0
\Vector3_velocity[0] * Pow(\fFriction,(fTime.f))
\Vector3_velocity[1] * Pow(\fFriction,(fTime.f))
EndIf
;// Partikel animieren
\Particle + \DeltaParticle * fTime.f
\fSize + \fDeltaSize * fTime.f
\Color[0] + \DeltaColor[0] * fTime.f
\Color[1] + \DeltaColor[1] * fTime.f
\Color[2] + \DeltaColor[2] * fTime.f
;\fRotation + \fDeltaRotation * fTime.f
VECTOR_Rotate(@\Vector3_velocity, \fDeltaRotation * fTime)
\Vector3_position[0] + \Vector3_velocity[0] * fTime ;X
\Vector3_position[1] + \Vector3_velocity[1] * fTime ;Y
EndWith
Next
ProcedureReturn #True
EndProcedure
Procedure RENDER_PARTICLE(fTime.f)
Protected x.i
ForEach Particle()
With Particle()
SpriteBlendingMode(Blend_Source,Blend_Destination)
SpriteQuality(Sprite_quality)
ZoomSprite(\Particle,\fSize,\fSize)
DisplayTransparentSprite(\Particle,\Vector3_position[0],\Vector3_position[1],\StartTransparenz,RGB(\color[0],\color[1],\color[2]))
If showsystem\fBloom > 0.0
For x=-10 To 2*showsystem\fBloom Step 5
DisplayTransparentSprite(\Particle,x+\Vector3_position[0],x+\Vector3_position[1],40,RGB(\color[0],\color[1],\color[2]))
Next x
EndIf
EndWith
Next
ProcedureReturn #True
EndProcedure
Procedure DRAW_SCREEN()
StartDrawing(ScreenOutput())
DrawText(0,0,"Partikel: "+Str(anzparticle))
DrawText(0,20,"FPS: " + Str(FPS()))
StopDrawing()
EndProcedure
Procedure INIT_SPRITE()
Protected x.i
;// Lade Textur
If Not CatchSprite(#particle_0,?particle1,#PB_Sprite_AlphaBlending) Or Not CatchImage(#imgparticle_0,?particle1)
Debug "error CatchImage"
End
EndIf
If Not CatchSprite(#particle_1,?particle2,#PB_Sprite_AlphaBlending) Or Not CatchImage(#imgparticle_1,?particle2)
Debug "error CatchImage"
End
EndIf
If Not CatchSprite(#particle_2,?particle3,#PB_Sprite_AlphaBlending) Or Not CatchImage(#imgparticle_2,?particle3)
Debug "error CatchImage"
End
EndIf
If Not CatchSprite(#particle_3,?particle4,#PB_Sprite_AlphaBlending) Or Not CatchImage(#imgparticle_3,?particle4)
Debug "error CatchImage"
End
EndIf
If Not CatchSprite(#particle_4,?particle5,#PB_Sprite_AlphaBlending) Or Not CatchImage(#imgparticle_4,?particle5)
Debug "error CatchImage"
End
EndIf
;Create images für color vorschau
CreateImage(#color_Start,100, 80,24,RGB(showsystem\color[0],showsystem\color[1],showsystem\color[2]))
CreateImage(#color_End,100, 80,24,RGB(showsystem\color[0],showsystem\color[1],showsystem\color[2]))
CreateSprite(#particle_system_gfx,10,10)
StartDrawing(SpriteOutput(#particle_system_gfx))
LineXY(5, 5, 5+Cos(Radian(90))*5, 5+Sin(Radian(90))*5,#Red)
LineXY(5, 5, 5+Cos(Radian(180))*5, 5+Sin(Radian(180))*5,#Red)
LineXY(5, 5, 5+Cos(Radian(270))*5, 5+Sin(Radian(90))*5,#Red)
LineXY(5, 5, 5+Cos(Radian(360))*5, 5+Sin(Radian(180))*5,#Red)
StopDrawing()
CreateSprite(#particle_system_background,30,30,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#particle_system_background))
Circle(15,15,10,#Red)
StopDrawing()
CreateSprite(#particle_system_waypoint,30,30,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#particle_system_waypoint))
Circle(15,15,5,#Green)
StopDrawing()
CreateSprite(#particle_system_Gravity,30,30,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(#particle_system_Gravity))
Circle(15,15,5,#Blue)
StopDrawing()
;image Gadget
img_startcolor = ImageGadget(#PB_Any, 190, 450, 100, 80, ImageID(#color_Start))
img_endcolor = ImageGadget(#PB_Any, 190, 540, 100, 80, ImageID(#color_End))
;combo
For x = #imgparticle_0 To 9
AddGadgetItem(Choose_Texture, -1, "Textur: "+x ,ImageID(x))
Next x
EndProcedure
Procedure INIT_MENU()
;Create Menu
If CreateMenu(0, WindowID(0))
MenuTitle("Settings")
MenuItem(10, "Load Settings")
MenuItem(11, "Save Settings")
MenuItem(12, "Quit")
MenuTitle("Options")
OpenSubMenu("Blendvalue Source")
MenuItem(0,"Zero")
MenuItem(1,"One")
MenuItem(2,"SourceColor")
MenuItem(3,"InvertSourceColor")
MenuItem(4,"DestinationColor")
MenuItem(5,"InvertDestinationColor")
MenuItem(6,"SourceAlpha")
MenuItem(7,"InvertSourceAlpha")
MenuItem(8,"DestinationAlpha")
MenuItem(9,"InvertDestinationAlpha")
CloseSubMenu()
OpenSubMenu("Blendvalue Destination")
MenuItem(20,"Zero")
MenuItem(21,"One")
MenuItem(22,"SourceColor")
MenuItem(23,"InvertSourceColor")
MenuItem(24,"DestinationColor")
MenuItem(25,"InvertDestinationColor")
MenuItem(26,"SourceAlpha")
MenuItem(27,"InvertSourceAlpha")
MenuItem(28,"DestinationAlpha")
MenuItem(29,"InvertDestinationAlpha")
CloseSubMenu()
MenuItem(13,"Bilinear Filter Rendering")
MenuTitle("About")
MenuItem(30, "Info")
ProcedureReturn #True
EndIf
EndProcedure
Procedure UPDATE_CONTROL()
;Setgadgetstate
SetGadgetState(Scrollbar_partikel,showsystem\maxparticle)
SetGadgetState(Scrollbar_lifetime,showsystem\fLifetime)
SetGadgetState(Scrollbar_velocityx,(showsystem\Vector3_velocity.f[0] + #Velocity_Max/2)*10)
SetGadgetState(Scrollbar_velocityy,(showsystem\Vector3_velocity.f[1] + #Velocity_Max/2)*10)
SetGadgetState(Scrollbar_startsize,showsystem\fStartsize)
SetGadgetState(Scrollbar_endsize,showsystem\fEndsize)
SetGadgetState(Scrollbar_endcolor_r,showsystem\Endcolor[0])
SetGadgetState(Scrollbar_endcolor_g,showsystem\EndColor[1])
SetGadgetState(Scrollbar_endcolor_b,showsystem\EndColor[2])
SetGadgetState(Scrollbar_startcolor_r,showsystem\Startcolor[0])
SetGadgetState(Scrollbar_startcolor_g,showsystem\Startcolor[1])
SetGadgetState(Scrollbar_startcolor_b,showsystem\Startcolor[2])
SetGadgetState(Scrollbar_Friction,showsystem\fFriction*10)
SetGadgetState(Scrollbar_startrotation,showsystem\fStartRotation*10)
SetGadgetState(Scrollbar_endrotation,showsystem\fEndRotation*10)
SetGadgetState(Scrollbar_Bloom,showsystem\fBloom*10)
;Tooltips
GadgetToolTip(Scrollbar_partikel, Str(showsystem\maxparticle))
GadgetToolTip(Scrollbar_lifetime, StrF(showsystem\fLifetime,1))
GadgetToolTip(Scrollbar_velocityx, StrF(showsystem\Vector3_velocity.f[0],1))
GadgetToolTip(Scrollbar_velocityy, StrF(showsystem\Vector3_velocity.f[1],1))
GadgetToolTip(Scrollbar_startsize, StrF(showsystem\fStartsize,1))
GadgetToolTip(Scrollbar_endsize, StrF(showsystem\fEndsize,1))
GadgetToolTip(Scrollbar_Friction, StrF(showsystem\fFriction,1))
GadgetToolTip(Scrollbar_startrotation, StrF(showsystem\fStartRotation,1))
GadgetToolTip(Scrollbar_endrotation, StrF(showsystem\fEndRotation,1))
GadgetToolTip(Scrollbar_endcolor_r, Str(showsystem\Endcolor[0]))
GadgetToolTip(Scrollbar_endcolor_g, Str(showsystem\Endcolor[1]))
GadgetToolTip(Scrollbar_endcolor_b, Str(showsystem\Endcolor[2]))
GadgetToolTip(Scrollbar_startcolor_r, Str(showsystem\Startcolor[0]))
GadgetToolTip(Scrollbar_startcolor_g, Str(showsystem\Startcolor[1]))
GadgetToolTip(Scrollbar_startcolor_b, Str(showsystem\Startcolor[2]))
GadgetToolTip(Scrollbar_Bloom, Str(showsystem\fBloom))
;Choosegadget
SetGadgetState(Choose_Texture,showsystem\StartParticle)
;Checkbox setzen
SetGadgetState(Checkbox_Lifetime,CHECK_STATE(showsystem\fRandomLifeTime[0]))
SetGadgetState(Checkbox_Partikel,CHECK_STATE(showsystem\RandomParticle[0]))
SetGadgetState(Checkbox_Velocityx,CHECK_STATE(showsystem\fRandomVelocity[0]))
SetGadgetState(Checkbox_Velocityy,CHECK_STATE(showsystem\fRandomVelocity[2]))
SetGadgetState(Checkbox_StartSize,CHECK_STATE(showsystem\fRandomStartSize[0]))
SetGadgetState(Checkbox_EndSize,CHECK_STATE(showsystem\fRandomEndSize[0]))
SetGadgetState(Checkbox_Friction,CHECK_STATE(showsystem\fRandomFriction[0]))
SetGadgetState(Checkbox_StartColor_r,CHECK_STATE(showsystem\RandomStartcolor[0]))
SetGadgetState(Checkbox_StartColor_g,CHECK_STATE(showsystem\RandomStartcolor[2]))
SetGadgetState(Checkbox_StartColor_b,CHECK_STATE(showsystem\RandomStartcolor[4]))
SetGadgetState(Checkbox_EndColor_r,CHECK_STATE(showsystem\RandomEndcolor[0]))
SetGadgetState(Checkbox_EndColor_g,CHECK_STATE(showsystem\RandomEndcolor[2]))
SetGadgetState(Checkbox_EndColor_b,CHECK_STATE(showsystem\RandomEndcolor[4]))
SetGadgetState(Checkbox_StartRotation,CHECK_STATE(showsystem\fRandomStartRotation[0]))
SetGadgetState(Checkbox_EndRotation,CHECK_STATE(showsystem\fRandomEndRotation[0]))
SetGadgetState(img_startcolor,CreateImage(#color_Start,100, 80,24,RGB(showsystem\startcolor[0],showsystem\startcolor[1],showsystem\startcolor[2])))
SetGadgetState(img_endcolor,CreateImage(#color_End,100, 80,24,RGB(showsystem\endcolor[0],showsystem\endcolor[1],showsystem\endcolor[2])))
EndProcedure
Procedure CONTROL_INIT()
;Trackbars
Scrollbar_partikel = TrackBarGadget(#PB_Any, 20, 60, 100, 10, 1, #PARTICLE_MAX, #PB_TrackBar_Ticks)
Scrollbar_lifetime = TrackBarGadget(#PB_Any, 190, 60, 100, 10, 1, #PARTICLELIVETIME_MAX*20, #PB_TrackBar_Ticks)
Scrollbar_velocityx = TrackBarGadget(#PB_Any, 20, 100, 270, 10, 0, #VELOCITY_MAX*10, #PB_TrackBar_Ticks)
Scrollbar_velocityy = TrackBarGadget(#PB_Any, 20, 150, 270, 10, 0, #VELOCITY_MAX*10, #PB_TrackBar_Ticks)
Scrollbar_startsize = TrackBarGadget(#PB_Any, 20, 190, 270, 10, 0, #SIZE_MAX, #PB_TrackBar_Ticks)
Scrollbar_endsize = TrackBarGadget(#PB_Any, 20, 230, 270, 10, 0, #SIZE_MAX, #PB_TrackBar_Ticks)
Scrollbar_endcolor_r = TrackBarGadget(#PB_Any, 20, 560, 100, 10, 0, #COLOR_MAX, #PB_TrackBar_Ticks)
Scrollbar_endcolor_g = TrackBarGadget(#PB_Any, 20, 580, 100, 10, 0, #COLOR_MAX, #PB_TrackBar_Ticks)
Scrollbar_endcolor_b = TrackBarGadget(#PB_Any, 20, 600, 100, 10, 0, #COLOR_MAX, #PB_TrackBar_Ticks)
Scrollbar_startcolor_r = TrackBarGadget(#PB_Any, 20, 470, 100, 10, 0, #COLOR_MAX, #PB_TrackBar_Ticks)
Scrollbar_startcolor_g = TrackBarGadget(#PB_Any, 20, 490, 100, 10, 0, #COLOR_MAX, #PB_TrackBar_Ticks)
Scrollbar_startcolor_b = TrackBarGadget(#PB_Any, 20, 510, 100, 10, 0, #COLOR_MAX, #PB_TrackBar_Ticks)
Scrollbar_Friction = TrackBarGadget(#PB_Any, 190, 280, 100, 10, 0, 100, #PB_TrackBar_Ticks)
Scrollbar_startrotation = TrackBarGadget(#PB_Any, 20, 410, 100, 10, 0, #ROTATION_MAX*100, #PB_TrackBar_Ticks)
Scrollbar_endrotation = TrackBarGadget(#PB_Any, 200, 410, 100, 10, 0, #ROTATION_MAX*100, #PB_TrackBar_Ticks)
Scrollbar_Bloom = TrackBarGadget(#PB_Any, 10, 640, 100, 10, 0, 100, #PB_TrackBar_Ticks)
;Textgadget
Partikel = TextGadget(#PB_Any, 50, 40, 50, 20, "Partikel")
Velocityy = TextGadget(#PB_Any, 100, 120, 150, 20, " - Velocity Y +")
lifetime = TextGadget(#PB_Any, 220, 40, 50, 20, "Lifetime")
Velocityx = TextGadget(#PB_Any, 100, 80, 130, 20, " - Velocity X +")
startsize = TextGadget(#PB_Any, 50, 170, 220, 20, " Startsize ")
endsize = TextGadget(#PB_Any, 50, 210, 210, 20, " Endsize ")
color = TextGadget(#PB_Any, 40, 440, 80, 20, "Startcolor")
rotation = TextGadget(#PB_Any, 20, 380, 280, 20, " startrotation - endrotation")
Friction = TextGadget(#PB_Any, 220, 260, 50, 20, "Friction")
endcolor = TextGadget(#PB_Any, 40, 530, 80, 20, "Endcolor")
;Buttongadget
Load_Background = ButtonGadget(#PB_Any, 20, 270, 110, 30, "Load Background")
Button_editormode = ButtonGadget(#PB_Any, 250, 0, 110, 30, "MODE EDIT")
Load_Extern_Textur = ButtonGadget(#PB_Any, 200, 310, 100, 30, "Load Extern Textur")
Load_Textur = ButtonGadget(#PB_Any, 20, 350, 110, 30, "Load Textur")
Choose_Texture = ComboBoxGadget(#PB_Any, 20, 310, 110, 30, #PB_ComboBox_Image)
Checkbox_Lifetime = CheckBoxGadget(#PB_Any, 330, 50, 20, 25, "")
Checkbox_Partikel = CheckBoxGadget(#PB_Any, 150, 50, 20, 25, "")
Checkbox_Velocityx = CheckBoxGadget(#PB_Any, 330, 90, 20, 25, "")
Checkbox_Velocityy = CheckBoxGadget(#PB_Any, 330, 140, 20, 25, "")
Checkbox_StartSize = CheckBoxGadget(#PB_Any, 330, 180, 20, 25, "")
Checkbox_EndSize = CheckBoxGadget(#PB_Any, 330, 220, 20, 25, "")
Checkbox_Friction = CheckBoxGadget(#PB_Any, 330, 270, 20, 25, "")
Checkbox_StartRotation = CheckBoxGadget(#PB_Any, 160, 390, 20, 25, "")
Checkbox_EndRotation = CheckBoxGadget(#PB_Any, 330, 400, 20, 25, "")
Checkbox_StartColor_r = CheckBoxGadget(#PB_Any, 150, 460, 20, 25, "")
Checkbox_StartColor_g = CheckBoxGadget(#PB_Any, 150, 480, 20, 25, "")
Checkbox_StartColor_b = CheckBoxGadget(#PB_Any, 150, 500, 20, 25, "")
Checkbox_EndColor_r = CheckBoxGadget(#PB_Any, 150, 550, 20, 25, "")
Checkbox_EndColor_g = CheckBoxGadget(#PB_Any, 150, 570, 20, 25, "")
Checkbox_EndColor_b = CheckBoxGadget(#PB_Any, 150, 590, 20, 25, "")
GadgetToolTip(Checkbox_Lifetime, "Add a Random Value")
GadgetToolTip(Checkbox_Partikel, "Add a Random Value")
GadgetToolTip(Checkbox_Velocityx, "Add a Random Value")
GadgetToolTip(Checkbox_Velocityy, "Add a Random Value")
GadgetToolTip(Checkbox_StartSize, "Add a Random Value")
GadgetToolTip(Checkbox_EndSize, "Add a Random Value")
GadgetToolTip(Checkbox_Friction, "Add a Random Value")
GadgetToolTip(Checkbox_StartColor_r, "Add a Random Value")
GadgetToolTip(Checkbox_StartColor_g, "Add a Random Value")
GadgetToolTip(Checkbox_StartColor_b, "Add a Random Value")
GadgetToolTip(Checkbox_EndColor_r, "Add a Random Value")
GadgetToolTip(Checkbox_EndColor_g, "Add a Random Value")
GadgetToolTip(Checkbox_EndColor_b, "Add a Random Value")
GadgetToolTip(Checkbox_StartRotation, "Add a Random Value")
GadgetToolTip(Checkbox_EndRotation, "Add a Random Value")
var_0 = TextGadget(#PB_Any, 10, 50, 10, 20, "0")
var_0_Copy1 = TextGadget(#PB_Any, 10, 80, 30, 20, "-100")
var_0_Copy5 = TextGadget(#PB_Any, 180, 50, 10, 20, "0")
var_0_Copy6 = TextGadget(#PB_Any, 180, 270, 10, 20, "0")
var_0_Copy7 = TextGadget(#PB_Any, 190, 400, 10, 20, "0")
var_0_Copy8 = TextGadget(#PB_Any, 10, 400, 10, 20, "0")
var_0_Copy9 = TextGadget(#PB_Any, 10, 460, 10, 20, "0")
var_0_Copy9_Copy1 = TextGadget(#PB_Any, 10, 480, 10, 20, "0")
var_0_Copy9_Copy2 = TextGadget(#PB_Any, 10, 500, 10, 20, "0")
var_0_Copy9_Copy3 = TextGadget(#PB_Any, 10, 550, 10, 20, "0")
var_0_Copy9_Copy4 = TextGadget(#PB_Any, 10, 570, 10, 20, "0")
var_0_Copy9_Copy5 = TextGadget(#PB_Any, 10, 590, 10, 20, "0")
var_0_Copy1 = TextGadget(#PB_Any, 120, 50, 20, 20, "500")
var_0_Copy5_Copy1 = TextGadget(#PB_Any, 290, 50, 20, 20, "10")
var_0_Copy1_Copy1 = TextGadget(#PB_Any, 10, 130, 30, 20, "-100")
var_0_Copy1 = TextGadget(#PB_Any, 20, 180, 10, 20, "0")
var_0_Copy1_Copy1 = TextGadget(#PB_Any, 20, 220, 10, 20, "0")
var_0_Copy1_Copy1 = TextGadget(#PB_Any, 290, 80, 30, 20, "100")
var_0_Copy1_Copy1_Copy1 = TextGadget(#PB_Any, 290, 130, 30, 20, "100")
var_0_Copy1_Copy1_Copy2 = TextGadget(#PB_Any, 290, 180, 30, 20, "200")
var_0_Copy1_Copy1_Copy2_Copy1 = TextGadget(#PB_Any, 290, 220, 30, 20, "200")
var_0_Copy6_Copy1 = TextGadget(#PB_Any, 290, 270, 20, 20, "10")
var_0_Copy8_Copy1 = TextGadget(#PB_Any, 120, 400, 20, 20, "100")
var_0_Copy8_Copy1_Copy1 = TextGadget(#PB_Any, 300, 400, 20, 20, "100")
var_0_Copy9_Copy1 = TextGadget(#PB_Any, 120, 460, 20, 20, "255")
var_0_Copy9_Copy1_Copy1 = TextGadget(#PB_Any, 120, 480, 20, 20, "255")
var_0_Copy9_Copy1_Copy2 = TextGadget(#PB_Any, 120, 500, 20, 20, "255")
var_0_Copy9_Copy1_Copy3 = TextGadget(#PB_Any, 120, 550, 20, 20, "255")
var_0_Copy9_Copy1_Copy4 = TextGadget(#PB_Any, 120, 570, 20, 20, "255")
var_0_Copy9_Copy1_Copy5 = TextGadget(#PB_Any, 120, 590, 20, 20, "255")
var_0_Copy9_Copy1_Copy6 = TextGadget(#PB_Any, 20, 620, 100, 20, "Bloom effect")
var_0_Copy9_Copy1_Copy7 = TextGadget(#PB_Any, 0, 640, 10, 20, "0")
var_0_Copy9_Copy1_Copy8 = TextGadget(#PB_Any, 110, 640, 20, 20, "10")
EndProcedure
Procedure INIT_WINDOW()
If InitMouse() = 0 Or InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester(#Titel, "Error while init Mouse and Sprites", 0)
End
EndIf
If OpenWindow(0, 0, 0,#window_widh+#LEFT_SPACE,#window_height,#Titel +" v"+ StrF(#Version,1),#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_Invisible) = 0
MessageRequester(#Titel, "Can't open Window!", 0)
End
EndIf
EndProcedure
Procedure INIT_SCREEN()
If OpenWindowedScreen(WindowID(0),#LEFT_SPACE,0,#screen_widh,#screen_height) = 0
MessageRequester(#Titel, "Can't open Game Screen directx / opengl Missing!", 0)
End
EndIf
EndProcedure
Procedure SET_Uservalue()
Blend_Source = 6
Blend_Destination = 1
Sprite_quality = #True
anzparticle.i = 0
showsystem\maxparticle.i = 100
showsystem\fLifetime = 1.9;Lebenszeit
showsystem\Vector3_velocity.f[0] = -15 ; x Beschleunigung
showsystem\Vector3_velocity.f[1] = -15 ; y Beschleunigung
showsystem\Vector3_position.f[0] = (#window_widh+#LEFT_SPACE)*0.3 ; x pos
showsystem\Vector3_position.f[1] = #window_height*0.3 ; x pos
showsystem\fStartsize = 32.0 ;startGröße
showsystem\fEndsize = 32.0 ;endgrö0e
showsystem\Startcolor[0] = 255 ;r
showsystem\Startcolor[1] = 0 ;g
showsystem\Startcolor[2] = 0 ;b
showsystem\Startcolor[3] = 0 ;a
showsystem\Endcolor[0] = 255
showsystem\Endcolor[1] = 0
showsystem\Endcolor[2] = 0
showsystem\Endcolor[3] = 0
showsystem\StartTransparenz = 250.0 ;Trransparenz der Partikel
showsystem\fStartRotation = 0.0
showsystem\fEndRotation = 0.0
showsystem\fFriction = 3 ;Reibung
showsystem\StartParticle = #particle_0
showsystem\EndParticle = #particle_0
showsystem\fRandomStartRotation.f[0] = 5 ;min
showsystem\fRandomStartRotation.f[1] = 9;max
EndProcedure
Procedure Handel_events()
Select Event
Case #PB_Event_CloseWindow
ProgrammEnde = #True
Case #PB_Event_Menu
Select EventMenu()
Case 10 ;// LOAD OF SETTINGS
sFilename = OpenFileRequester("Choose Settings File","default.Ped","Ped (*.Ped)|*.Ped",0)
If FileSize(sFilename) > 0
If Not LoadStrukt(showsystem,sFilename) = 0
UPDATE_CONTROL()
MessageRequester("Info","Load of settings was sucesfull!")
Else
MessageRequester("Error","Error while Load the Settings!")
EndIf
Else
MessageRequester("Error","error while load Settings!")
EndIf
Case 11 ;// SAVE OF SETTINGS
sFilename = SaveFileRequester("Choose a Save File","default.ped","ped (*.ped)|*.ped",0)
MessageRequester("Information", "You have selected following file:"+Chr(10)+sFilename,0)
If Not SaveStrukt(showsystem,sFilename) = 0
MessageRequester("Info","Save of settings was sucesfull!")
Else
MessageRequester("Error","Error while Save the Settings!")
EndIf
Case 12 ;// Close APP
ProgrammEnde = #True
Case 13 ;// Filtering
If GetMenuItemState(0,13)
SetMenuItemState(0,13,#False)
Sprite_quality = #False
Else
SetMenuItemState(0,13,#True)
Sprite_quality = #True
EndIf
Case 0 To 9
SetMenuItemState(0,Blend_Source,#False)
SetMenuItemState(0,EventMenu(), #True)
Blend_Source = EventMenu()
Case 20 To 29
SetMenuItemState(0,Blend_Destination +20,#False)
SetMenuItemState(0,EventMenu(), #True)
Blend_Destination = EventMenu() -20
Case 30
MessageRequester("About",#Titel +" v"+ StrF(#Version,1) +" - von Johannes Meyer", 0)
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Scrollbar_partikel
showsystem\maxparticle = GetGadgetState(Scrollbar_partikel)
GadgetToolTip(Scrollbar_partikel,Str(showsystem\maxparticle))
SetGadgetState(Checkbox_Partikel,#False)
Case Scrollbar_lifetime
showsystem\fLifetime = GetGadgetState(Scrollbar_lifetime)/10
GadgetToolTip(Scrollbar_lifetime,StrF((showsystem\fLifetime),1))
SetGadgetState(Checkbox_Lifetime,#False)
Case Scrollbar_velocityx
showsystem\Vector3_velocity.f[0] = (GetGadgetState(Scrollbar_velocityx)/10)-#Velocity_Max/2
GadgetToolTip(Scrollbar_velocityx,StrF(showsystem\Vector3_velocity.f[0],1))
SetGadgetState(Checkbox_Velocityx,#False)
Case Scrollbar_velocityy
showsystem\Vector3_velocity.f[1] = (GetGadgetState(Scrollbar_velocityy)/10)-#Velocity_Max/2
GadgetToolTip(Scrollbar_velocityy,StrF(showsystem\Vector3_velocity.f[1],1))
SetGadgetState(Checkbox_Velocityy,#False)
Case Scrollbar_startsize
showsystem\fStartsize = GetGadgetState(Scrollbar_startsize)
GadgetToolTip(Scrollbar_startsize, StrF(showsystem\fStartsize,1))
SetGadgetState(Checkbox_StartSize,#False)
Case Scrollbar_endsize
showsystem\fEndsize = GetGadgetState(Scrollbar_endsize)
GadgetToolTip(Scrollbar_endsize, StrF(showsystem\fEndsize,1))
SetGadgetState(Checkbox_EndSize,#False)
Case Scrollbar_endcolor_r,Scrollbar_endcolor_g,Scrollbar_endcolor_b
showsystem\Endcolor[0] = GetGadgetState(Scrollbar_endcolor_r)
showsystem\Endcolor[1] = GetGadgetState(Scrollbar_endcolor_g)
showsystem\Endcolor[2] = GetGadgetState(Scrollbar_endcolor_b)
GadgetToolTip(Scrollbar_endcolor_r, Str(showsystem\Endcolor[0]))
GadgetToolTip(Scrollbar_endcolor_g, Str(showsystem\Endcolor[1]))
GadgetToolTip(Scrollbar_endcolor_b, Str(showsystem\Endcolor[2]))
SetGadgetState(img_endcolor,CreateImage(#color_End,100, 80,24,RGB(showsystem\Endcolor[0],showsystem\Endcolor[1],showsystem\Endcolor[2])))
SetGadgetState(Checkbox_EndColor_r,#False)
SetGadgetState(Checkbox_EndColor_g,#False)
SetGadgetState(Checkbox_EndColor_b,#False)
Case Scrollbar_startcolor_r,Scrollbar_startcolor_g,Scrollbar_startcolor_b
showsystem\Startcolor[0] = GetGadgetState(Scrollbar_Startcolor_r)
showsystem\Startcolor[1] = GetGadgetState(Scrollbar_Startcolor_g)
showsystem\Startcolor[2] = GetGadgetState(Scrollbar_Startcolor_b)
GadgetToolTip(Scrollbar_Startcolor_r, Str(showsystem\Startcolor[0]))
GadgetToolTip(Scrollbar_Startcolor_g, Str(showsystem\Startcolor[1]))
GadgetToolTip(Scrollbar_Startcolor_b, Str(showsystem\Startcolor[2]))
SetGadgetState(img_startcolor,CreateImage(#color_Start,100, 80,24,RGB(showsystem\Startcolor[0],showsystem\Startcolor[1],showsystem\Startcolor[2])))
SetGadgetState(Checkbox_StartColor_r,#False)
SetGadgetState(Checkbox_StartColor_g,#False)
SetGadgetState(Checkbox_StartColor_b,#False)
Case Scrollbar_Friction
showsystem\fFriction = GetGadgetState(Scrollbar_Friction)/10
GadgetToolTip(Scrollbar_Friction, StrF(showsystem\fFriction,1))
SetGadgetState(Checkbox_Friction,#False)
Case Scrollbar_startrotation
showsystem\fStartRotation = GetGadgetState(Scrollbar_startrotation)/10
GadgetToolTip(Scrollbar_startrotation, StrF(showsystem\fStartRotation,1))
SetGadgetState(Checkbox_StartRotation,#False)
Case Scrollbar_endrotation
showsystem\fEndRotation = GetGadgetState(Scrollbar_endrotation)/10
GadgetToolTip(Scrollbar_endrotation, StrF(showsystem\fEndRotation,1))
SetGadgetState(Checkbox_EndRotation,#False)
Case Scrollbar_Bloom
showsystem\fBloom = GetGadgetState(Scrollbar_Bloom)/10
GadgetToolTip(Scrollbar_Bloom,StrF(showsystem\fBloom,1))
Case Checkbox_Lifetime
If GetGadgetState(Checkbox_Lifetime)
showsystem\fRandomLifeTime[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1")) + showsystem\fLifeTime,#PARTICLELIVETIME_MAX) ;min
showsystem\fRandomLifeTime[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20")) + showsystem\fLifeTime,#PARTICLELIVETIME_MAX) ;max
Else
showsystem\fRandomLifeTime[0] = 0.0
showsystem\fRandomLifeTime[1] = 0.0
EndIf
Case Checkbox_Partikel
If GetGadgetState(Checkbox_Partikel)
showsystem\RandomParticle[0] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","1")) + showsystem\maxparticle,#PARTICLE_MAX);min
showsystem\RandomParticle[1] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\maxparticle,#PARTICLE_MAX) ;max
Else
showsystem\RandomParticle[0] = 0.0
showsystem\RandomParticle[1] = 0.0
EndIf
Case Checkbox_Velocityx
If GetGadgetState(Checkbox_Velocityx)
showsystem\fRandomVelocity[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1"))+ showsystem\Vector3_velocity[0],#VELOCITY_MAX/2) ;min
showsystem\fRandomVelocity[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\Vector3_velocity[0],#VELOCITY_MAX/2) ;max
Else
showsystem\fRandomVelocity[0] = 0.0
showsystem\fRandomVelocity[1] = 0.0
EndIf
Case Checkbox_Velocityy
If GetGadgetState(Checkbox_Velocityy)
showsystem\fRandomVelocity[2] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1")) + showsystem\Vector3_velocity[1],#VELOCITY_MAX/2) ;min
showsystem\fRandomVelocity[3] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20")) + showsystem\Vector3_velocity[1],#VELOCITY_MAX/2) ;max
Else
showsystem\fRandomVelocity[2] = 0.0
showsystem\fRandomVelocity[3] = 0.0
EndIf
Case Checkbox_StartSize
If GetGadgetState(Checkbox_StartSize)
showsystem\fRandomStartSize[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1"))+ showsystem\fStartSize,#SIZE_MAX) ;min
showsystem\fRandomStartSize[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\fStartSize,#SIZE_MAX) ;max
Else
showsystem\fRandomStartSize[0] = 0.0
showsystem\fRandomStartSize[1] = 0.0
EndIf
Case Checkbox_EndSize
If GetGadgetState(Checkbox_EndSize)
showsystem\fRandomEndSize[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1"))+ showsystem\fEndSize,#SIZE_MAX) ;min
showsystem\fRandomEndSize[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\fEndSize,#SIZE_MAX) ;max
Else
showsystem\fRandomEndSize[0] =0.0
showsystem\fRandomEndSize[1] = 0.0
EndIf
Case Checkbox_Friction
If GetGadgetState(Checkbox_Friction)
showsystem\fRandomFriction[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1"))+ showsystem\fFriction,#FRICTION_MAX) ;min
showsystem\fRandomFriction[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\fFriction,#FRICTION_MAX) ;max
Else
showsystem\fRandomFriction[0] = 0.0
showsystem\fRandomFriction[1] = 0.0
EndIf
Case Checkbox_StartColor_r
If GetGadgetState(Checkbox_StartColor_r)
showsystem\RandomStartColor[0] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","0"))+ showsystem\StartColor[0],#COLOR_MAX) ;min
showsystem\RandomStartColor[1] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\StartColor[0],#COLOR_MAX) ;max
Else
showsystem\RandomStartColor[0] = 0
showsystem\RandomStartColor[1] = 0
EndIf
Case Checkbox_StartColor_g
If GetGadgetState(Checkbox_StartColor_g)
showsystem\RandomStartColor[2] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","0"))+ showsystem\StartColor[1],#COLOR_MAX) ;min
showsystem\RandomStartColor[3] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\StartColor[1],#COLOR_MAX) ;max
Else
showsystem\RandomStartColor[2] = 0
showsystem\RandomStartColor[3] = 0
EndIf
Case Checkbox_StartColor_b
If GetGadgetState(Checkbox_StartColor_b)
showsystem\RandomStartColor[4] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","0"))+ showsystem\StartColor[2],#COLOR_MAX) ;min
showsystem\RandomStartColor[5] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\StartColor[2],#COLOR_MAX) ;max
Else
showsystem\RandomStartColor[4] = 0
showsystem\RandomStartColor[5] = 0
EndIf
Case Checkbox_EndColor_r
If GetGadgetState(Checkbox_EndColor_r)
showsystem\RandomEndColor[0] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","0"))+ showsystem\EndColor[0],#COLOR_MAX) ;min
showsystem\RandomEndColor[1] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\EndColor[0],#COLOR_MAX) ;max
Else
showsystem\RandomEndColor[0] = 0
showsystem\RandomEndColor[1] =0
EndIf
Case Checkbox_EndColor_g
If GetGadgetState(Checkbox_EndColor_g)
showsystem\RandomEndColor[2] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","0"))+ showsystem\EndColor[1],#COLOR_MAX) ;min
showsystem\RandomEndColor[3] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\EndColor[1],#COLOR_MAX) ;max
Else
showsystem\RandomEndColor[2] = 0
showsystem\RandomEndColor[3] = 0
EndIf
Case Checkbox_EndColor_b
If GetGadgetState(Checkbox_EndColor_b)
showsystem\RandomEndColor[4] = CHECK_INPUT(Val(InputRequester("Random value","Enter a min Random Value","0"))+ showsystem\EndColor[2],#COLOR_MAX) ;min
showsystem\RandomEndColor[5] = CHECK_INPUT(Val(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\EndColor[2],#COLOR_MAX) ;max
Else
showsystem\RandomEndColor[4] = 0
showsystem\RandomEndColor[5] = 0
EndIf
Case Checkbox_StartRotation
If GetGadgetState(Checkbox_StartRotation)
showsystem\fRandomStartRotation[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1"))+ showsystem\fStartRotation,#ROTATION_MAX) ;min
showsystem\fRandomStartRotation[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\fStartRotation,#ROTATION_MAX) ;max
Else
showsystem\fRandomStartRotation[0] = 0.0
showsystem\fRandomStartRotation[1] = 0.0
EndIf
Case Checkbox_EndRotation
If GetGadgetState(Checkbox_EndRotation)
showsystem\fRandomEndRotation[0] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a min Random Value","0.1"))+ showsystem\fEndRotation,#ROTATION_MAX) ;min
showsystem\fRandomEndRotation[1] = CHECK_INPUT(ValF(InputRequester("Random value","Enter a max Random Value","20"))+ showsystem\fEndRotation,#ROTATION_MAX) ;max
Else
showsystem\fRandomEndRotation[0] = 0.0
showsystem\fRandomEndRotation[1] = 0.0
EndIf
Case Load_Background
Define newbrackground.s = OpenFileRequester("Choose a bacground","","png (*.png)|*.png",0)
If FileSize(newbrackground.s) > 0
If LoadSprite(#background_image,newbrackground,#PB_Sprite_AlphaBlending)
MessageRequester("Info","background_image load sucesfull!")
Else
MessageRequester("Error","could not load Sprite!")
EndIf
Else
MessageRequester("Error","error while Load Background!")
EndIf
Case Load_Textur
showsystem\StartParticle = GetGadgetState(Choose_Texture)
showsystem\EndParticle = GetGadgetState(Choose_Texture)
MessageRequester("Info","textur load sucesfull!")
Case Load_Extern_Textur
newtexture.s = OpenFileRequester("Choose a Textur size 32px","","png (*.png)|*.png",0)
If FileSize(newtexture.s) > 0
If LoadSprite(#extern_sprite,newtexture,#PB_Sprite_AlphaBlending)
If SpriteWidth(#extern_sprite) = 32 And SpriteHeight(#extern_sprite)
showsystem\StartParticle = #extern_sprite
showsystem\EndParticle = #extern_sprite
MessageRequester("Info","textur load sucesfull!")
Else
MessageRequester("Error","wrong pixel size!")
EndIf
Else
MessageRequester("Error","could not load Sprite!")
EndIf
Else
MessageRequester("Error","error while Load extern Textur!")
EndIf
Case Button_editormode
enginestate = change_engine_state(enginestate)
EndSelect
EndSelect
EndProcedure
;// INIT EDITOR
INIT_WINDOW()
CONTROL_INIT()
SET_Uservalue()
HideWindow(0,#False)
INIT_MENU()
INIT_SCREEN()
INIT_SPRITE()
UPDATE_CONTROL()
SetMenuItemState(0,6,#True)
SetMenuItemState(0,21,#True)
SetMenuItemState(0,13,#True)
enginestate = #engine_mode_edit
ProgrammEnde = #False
Repeat ;// Mainloop
event = WindowEvent()
dwtime1 = ElapsedMilliseconds()
If enginestate = #engine_mode_run
ClearScreen(0)
If ListSize(path()) > 0
ForEach path()
ADD_PARTICLE(@showsystem,path()\Vector3_position[0],path()\Vector3_position[1])
Next
Else
ADD_PARTICLE(@showsystem)
EndIf
MOVE_PARTICLE(fTime.f)
If IsSprite(#background_image)
DisplayTransparentSprite(#background_image,background_x,background_y)
EndIf
RENDER_PARTICLE(fTime.f)
DRAW_SCREEN()
FlipBuffers()
ElseIf enginestate = #engine_mode_edit
ClearScreen(0)
ExamineKeyboard()
;// Screen eingrenzen
If WindowMouseX(0) > #LEFT_SPACE And WindowMouseX(0) < #window_widh+#LEFT_SPACE
If WindowMouseY(0) < #screen_height And WindowMouseY(0) > #TOP_SPACE
If event = #PB_Event_LeftClick
;// ADD NEW MASS
If KeyboardPushed(#PB_Key_L)
If gravitylines = 0
AddElement(Gravity())
Gravity()\type = 1
Gravity()\Mass_line[0] = WindowMouseX(0) - #LEFT_SPACE
Gravity()\Mass_line[1] = WindowMouseY(0) - #TOP_SPACE
Gravity()\Mass = ValF(InputRequester("Value","Enter Mass Value for the Line","1000.0"))
MessageRequester("Info","Set New Start for line")
gravitylines + 1
ElseIf gravitylines = 1
gravitylines = 2
Gravity()\Mass_line[2] = WindowMouseX(0) - #LEFT_SPACE
Gravity()\Mass_line[3] = WindowMouseY(0) - #TOP_SPACE
MessageRequester("Info","Set New Gravity line Complete")
ElseIf gravitylines = 2
ClearList(Gravity())
EndIf
EndIf
If KeyboardPushed(#PB_Key_G)
AddElement(Gravity())
Gravity()\Vector3_position[0] = WindowMouseX(0) - #LEFT_SPACE
Gravity()\Vector3_position[1] = WindowMouseY(0) - #TOP_SPACE
Gravity()\Mass = ValF(InputRequester("Value","Enter Mass Value","10000.0"))
MessageRequester("Info","Set New Gravity")
EndIf
;// Add waypoint
If KeyboardPushed(#PB_Key_LeftControl)
AddElement(path())
path()\Vector3_position[0] = WindowMouseX(0) - #LEFT_SPACE
path()\Vector3_position[1] = WindowMouseY(0) - #TOP_SPACE
MessageRequester("Info","Set New Waypoints")
EndIf
;//Change positon
If KeyboardPushed(#PB_Key_LeftShift)
If edit_bg = #True
edit_bg = #False
background_x = WindowMouseX(0) - #LEFT_SPACE
background_y = WindowMouseY(0) - #TOP_SPACE
MessageRequester("Info","New background Position set")
EndIf
If edit_gfx = #True
edit_gfx = #False
showsystem\Vector3_position[0] = WindowMouseX(0) - #LEFT_SPACE
showsystem\Vector3_position[1] = WindowMouseY(0) - #TOP_SPACE
MessageRequester("Info","New gfx Position set")
EndIf
;//set Position for backgroudn / system
x = 0 : y = 0
For y=0 To 20
For x=0 To 20
If background_x+x = WindowMouseX(0) - #LEFT_SPACE
If background_y+y = WindowMouseY(0) - #TOP_SPACE
edit_bg = #True
MessageRequester("Info","Choose new Position!")
Break
EndIf
EndIf
If showsystem\Vector3_position[0]+x = WindowMouseX(0) - #LEFT_SPACE
If showsystem\Vector3_position[1]+y = WindowMouseY(0) - #TOP_SPACE
edit_gfx = #True
MessageRequester("Info","Choose new Position!")
Break
EndIf
EndIf
Next X
Next Y
EndIf
EndIf
EndIf
EndIf
ForEach Gravity()
If Gravity()\type = 0
DisplayTransparentSprite(#particle_system_Gravity,Gravity()\Vector3_position[0],Gravity()\Vector3_position[1])
ElseIf Gravity()\type = 1
If gravitylines = 2
StartDrawing(ScreenOutput())
LineXY(Gravity()\Mass_line[0],Gravity()\Mass_line[1],Gravity()\Mass_line[2],Gravity()\Mass_line[3],#Blue)
StopDrawing()
ElseIf gravitylines = 1
DisplayTransparentSprite(#particle_system_Gravity,Gravity()\Mass_line[0],Gravity()\Mass_line[1])
EndIf
EndIf
Next
ForEach path()
DisplaySprite(#particle_system_waypoint,path()\Vector3_position[0],path()\Vector3_position[1])
Next
DisplaySprite(#particle_system_gfx,showsystem\Vector3_position[0],showsystem\Vector3_position[1])
DisplaySprite(#particle_system_background,background_x,background_y)
If event = #PB_Event_LeftClick
FlipBuffers()
EndIf
EndIf
dwTime2 = ElapsedMilliseconds()
ftime = (dwtime2 - dwtime1) / 1000.0
Handel_events()
Until ProgrammEnde = #True
ClearList(particle())
End
DataSection
IncludePath "partikel\"
particle1:
IncludeBinary "particle_fire.png"
particle2:
IncludeBinary "particle_flare.png"
particle3:
IncludeBinary "particle_yellow.png"
particle4:
IncludeBinary "particle_fire1.png"
particle5:
IncludeBinary "particle_fire2.png"
EndDataSection