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