• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.badlogic.gdx.tools.flame;
2 
3 import java.awt.GridBagConstraints;
4 import java.awt.Insets;
5 
6 import com.badlogic.gdx.graphics.g3d.particles.ParticleController;
7 import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect;
8 import com.badlogic.gdx.graphics.g3d.particles.influencers.ParticleControllerInfluencer;
9 import com.badlogic.gdx.utils.Array;
10 
11 /** @author Inferno */
12 public class ParticleControllerInfluencerPanel extends InfluencerPanel<ParticleControllerInfluencer> implements TemplatePickerPanel.Listener<ParticleController>,
13 																																									LoaderButton.Listener<ParticleEffect>,
14 																																									EventManager.Listener{
15 	TemplatePickerPanel<ParticleController> controllerPicker;
16 
ParticleControllerInfluencerPanel(FlameMain editor, ParticleControllerInfluencer influencer, boolean single, String name, String desc)17 	public ParticleControllerInfluencerPanel (FlameMain editor, ParticleControllerInfluencer influencer, boolean single, String name, String desc) {
18 		super(editor, influencer, name, desc, true, false);
19 		controllerPicker.setMultipleSelectionAllowed(!single);
20 		EventManager.get().attach(FlameMain.EVT_ASSET_RELOADED, this);
21 	}
22 
23 	@Override
setValue(ParticleControllerInfluencer value)24 	public void setValue (ParticleControllerInfluencer value) {
25 		super.setValue(value);
26 		if(value == null) return;
27 		controllerPicker.setValue(value.templates);
28 	}
29 
initializeComponents()30 	protected void initializeComponents () {
31 		super.initializeComponents();
32 		controllerPicker = new TemplatePickerPanel<ParticleController>(editor, null, this, ParticleController.class){
33 			@Override
34 			protected String getTemplateName (ParticleController template, int index) {
35 				return template.name;
36 			}
37 		};
38 		reloadControllers ();
39 		controllerPicker.setIsAlwayShown(true);
40 
41 
42 		contentPanel.add(new LoaderButton.ParticleEffectLoaderButton(editor, this), new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,
43 			0, 0, 6), 0, 0));
44 		contentPanel.add(controllerPicker, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,
45 			0, 0, 6), 0, 0));
46 	}
47 
48 	@Override
onTemplateChecked(ParticleController model, boolean isChecked)49 	public void onTemplateChecked (ParticleController model, boolean isChecked) {
50 		editor.restart();
51 	}
52 
53 	@Override
onResourceLoaded(ParticleEffect resource)54 	public void onResourceLoaded (ParticleEffect resource) {
55 		reloadControllers();
56 	}
57 
reloadControllers()58 	private void reloadControllers () {
59 		Array<ParticleEffect> effects = new Array<ParticleEffect>();
60 		Array<ParticleController> controllers = new Array<ParticleController>();
61 		editor.assetManager.getAll(ParticleEffect.class, effects);
62 		for(ParticleEffect effect : effects){
63 			controllers.addAll(effect.getControllers());
64 		}
65 		controllerPicker.setLoadedTemplates(controllers);
66 	}
67 
68 	@Override
handle(int aEventType, Object aEventData)69 	public void handle (int aEventType, Object aEventData) {
70 		if(aEventType == FlameMain.EVT_ASSET_RELOADED){
71 			Object[] data = (Object[])aEventData;
72 			if(data[0] instanceof ParticleEffect){
73 				ParticleEffect oldEffect = (ParticleEffect) data[0];
74 				int currentCount = value.templates.size;
75 				value.templates.removeAll(oldEffect.getControllers(), true);
76 				if(value.templates.size != currentCount){
77 					int diff = currentCount - value.templates.size;
78 					if(diff > 0){
79 						ParticleEffect newEffect = (ParticleEffect) data[1];
80 						Array<ParticleController> newControllers = newEffect.getControllers();
81 						if(newControllers.size > 0){
82 							for(int i=0, c=Math.min(diff, newControllers.size); i<c; ++i)
83 								value.templates.add(newControllers.get(i));
84 						}
85 					}
86 					else {
87 						value.templates.addAll( ((ParticleEffect)editor.assetManager.get(FlameMain.DEFAULT_BILLBOARD_PARTICLE)).getControllers());
88 					}
89 
90 					controllerPicker.reloadTemplates();
91 					controllerPicker.setValue(value.templates);
92 					editor.restart();
93 				}
94 			}
95 		}
96 	}
97 
98 
99 }
100