Include "type/base.bmx"
Include "type/particlesystem.bmx"
Include "type/emitter.bmx"
Include "type/particle.bmx"
Include "functions/misc.bmx"
Global objects:Tlist=New Tlist
Global GUIobjects:Tlist=New Tlist
Global emitterCounter:Int=0, particleCounter:Int=0
Global lastSelected
Global lastSelectedClass
Global AppWidth=1280, AppHeight=1024
MainWindow:TGadget=CreateWindow("ParticleEditor v0.01",0 ,0,AppWidth,Appheight,Null,window_titlebar|window_status)
MainPanel:TGadget=CreatePanel(0,0,1024,768, MainWindow)
FileMenu:TGadget=CreateMenu("File",0,WindowMenu(MainWindow))
EditMenu:Tgadget=CreateMenu("Edit",0,WindowMenu(MainWindow))
PSMenu:TGadget=CreateMenu("Create",0,WindowMenu(MainWindow))
CreateMenu "Emitter",101,PSmenu
CreateMenu "Particle",102,PSmenu
CreateMenu "Delete Selected",103,EditMenu
CreateMenu "Exit Program",104,FileMenu,KEY_ESCAPE
UpdateWindowMenu MainWindow
OverviewPanel:TGadget=CreatePanel(10,20,210,380, mainPanel,PANEL_GROUP|PANEL_ACTIVE," Particle System Overview ")
Global MyTreeView:TGadget=CreateTreeView(10,10,180,340,overviewPanel)
EditPanel:TGadget=CreatePanel(10,410,210,280,mainPanel,PANEL_GROUP|PANEL_ACTIVE," Component Edit ")
Global iconstrip:Ticonstrip=LoadIconStrip("images/iconstrip.bmp")
SetGadgetIconStrip(mytreeview, iconstrip)
Label:TGadget=CreateLabel("Blank",600,600,200,100, MainWindow)
'CREATING EMITTERS LABELS AND FIELDS
Global EmitterNameLabel:Tgadget=CreateLabel("Emitter Name:",10,10,80,20,EditPanel)
Global EmitterTTLLabel:Tgadget=CreateLabel("Time to live:",10,33,80,20,EditPanel)
Global EmitterAngleLabel:Tgadget=CreateLabel("Angle:",10,56,80,20,EditPanel)
Global EmitterEmissionRateLabel:Tgadget=CreateLabel("Emission rate:",10,79,80,20,EditPanel)
Global EmitterNameField:TGadget=CreateTextField(90,10,100,20,editpanel)
Global EmitterTTLField:TGadget=CreateTextField(90,33,100,20,editpanel)
Global EmitterAngleField:TGadget=CreateTextField(90,56,100,20,editpanel)
Global EmitterEmissionRateField:TGadget=CreateTextField(90,79,100,20,editpanel)
Global particleSystemNameLabel:Tgadget=CreateLabel("Name:",10,10,80,20,EditPanel)
Global particleSystemNameField:TGadget=CreateTextField(90,9,100,20,editpanel)
TParticleSystem.create("ParticleSystem01",MyTreeView)
SelectTreeViewNode (1)
Repeat
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
End
Case EVENT_GADGETSELECT
lastSelected=EventData()
For test:Tbase = EachIn objects
If test.id=EventData() Then lastSelectedClass=test.class
Next
showEditPanel()
Case EVENT_GADGETACTION
'When the user inputs data in a field all the class information is updated
For temp:TBase = EachIn objects
If temp.id=lastSelected Then
Select lastSelectedClass
Case 1 'If a Particle system class has been changed
temp.name=TextFieldText(ParticleSystemNameField)
ModifyTreeViewNode(temp.id,temp.name)
Case 2 'If an emitter class has been changed
temp.name=TextFieldText(EmitterNameField)
temp.ttl=TextFieldText(EmitterTTLField).tofloat()
ModifyTreeViewNode(temp.id,temp.name)
EndSelect
EndIf
Next
Case EVENT_MENUACTION
Select EventData()
Case 103
FreeGadget(lastselected)
For Emitter:TEmitter=EachIn objects
If emitter.id = lastselected Then emitter.remove()
Next
Case 101
If emitterCounter<11 Then
TEmitter.create("Emitter0"+f_getEmitterNo(),lastSelected)
Else
TEmitter.create("Emitter"+f_getEmitterNo(),lastSelected)
EndIf
ActivateGadget(OverviewPanel)
ActivateGadget(MyTreeView)
Case 102
If lastselectedclass<>2 Then
Notify "Particles can only be created when an Emitter is selected."
Else
If emitterCounter<11 Then
TParticle.create("Particle0"+f_getEmitterNo(),lastSelected)
Else
TParticle.create("Particle"+f_getEmitterNo(),lastSelected)
EndIf
ActivateGadget(OverviewPanel)
ActivateGadget(MyTreeView)
EndIf
Case 104
End
EndSelect
Default
SetStatusText (mainwindow, EventData())
EndSelect
SetGadgetText Label, CurrentEvent.ToString()
Forever
Function showEditPanel()
HideGadget (EmitterTTLField)
HideGadget (EmitterTTLLabel)
HideGadget (EmitterNameLabel)
HideGadget (EmitterNameField)
HideGadget (EmitterAngleLabel)
HideGadget (EmitterAngleField)
HideGadget (EmitterEmissionRateLabel)
HideGadget (EmitterEmissionRateField)
HideGadget (particleSystemNameLabel)
HideGadget (particleSystemNameField)
Select lastSelectedClass
Case 1
drawParticleSystemPanel()
Case 2
drawEmitterPanel()
Case 3
'drawParticlePanel()
EndSelect
End Function
Function drawEmitterPanel()
ShowGadget (EmitterTTLField)
ShowGadget (EmitterTTLLabel)
ShowGadget (EmitterNameLabel)
ShowGadget (EmitterNameField)
ShowGadget (EmitterAngleLabel)
ShowGadget (EmitterAngleField)
ShowGadget (EmitterEmissionRateLabel)
ShowGadget (EmitterEmissionRateField)
For Local temp:TEmitter = EachIn objects
If temp.id=lastSelected Then
SetGadgetText(EmitterNameField, temp.name)
SetGadgetText(EmitterTTLField, temp.ttl+" sec")
SetGadgetText(EmitterAngleField, temp.angle+"")
SetGadgetText(EmitterEmissionRateField, temp.Emissionrate+" /sec")
EndIf
Next
EndFunction
Function drawParticleSystemPanel()
ShowGadget particleSystemNameLabel
ShowGadget particleSystemNameField
For Local temp:TBase = EachIn objects
If temp.id=lastSelected Then
SetGadgetText(particleSystemNameField, temp.name)
EndIf
Next
End Function