[PB 5.30] Partikel Editor

Anwendungen, Tools, Userlibs und anderes nützliches.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

[PB 5.30] Partikel Editor

Beitrag von True29 »

Hallo ,
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.

Bild

;// 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
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: [PB 5.30] Partikel Editor

Beitrag von Chimorin »

Coole Sache! Kann ich auf jeden Fall gebrauchen, danke fürs Teilen.
Bild

- formerly known as Bananenfreak -
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: [PB 5.30] Partikel Editor

Beitrag von True29 »

danke ;) freut mich.
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten