package com.badlogic.gdx.tools.flame; import java.awt.GridBagConstraints; import java.awt.Insets; import com.badlogic.gdx.graphics.g3d.particles.ParticleController; import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect; import com.badlogic.gdx.graphics.g3d.particles.influencers.ParticleControllerInfluencer; import com.badlogic.gdx.utils.Array; /** @author Inferno */ public class ParticleControllerInfluencerPanel extends InfluencerPanel<ParticleControllerInfluencer> implements TemplatePickerPanel.Listener<ParticleController>, LoaderButton.Listener<ParticleEffect>, EventManager.Listener{ TemplatePickerPanel<ParticleController> controllerPicker; public ParticleControllerInfluencerPanel (FlameMain editor, ParticleControllerInfluencer influencer, boolean single, String name, String desc) { super(editor, influencer, name, desc, true, false); controllerPicker.setMultipleSelectionAllowed(!single); EventManager.get().attach(FlameMain.EVT_ASSET_RELOADED, this); } @Override public void setValue (ParticleControllerInfluencer value) { super.setValue(value); if(value == null) return; controllerPicker.setValue(value.templates); } protected void initializeComponents () { super.initializeComponents(); controllerPicker = new TemplatePickerPanel<ParticleController>(editor, null, this, ParticleController.class){ @Override protected String getTemplateName (ParticleController template, int index) { return template.name; } }; reloadControllers (); controllerPicker.setIsAlwayShown(true); contentPanel.add(new LoaderButton.ParticleEffectLoaderButton(editor, this), new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 6), 0, 0)); contentPanel.add(controllerPicker, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 6), 0, 0)); } @Override public void onTemplateChecked (ParticleController model, boolean isChecked) { editor.restart(); } @Override public void onResourceLoaded (ParticleEffect resource) { reloadControllers(); } private void reloadControllers () { Array<ParticleEffect> effects = new Array<ParticleEffect>(); Array<ParticleController> controllers = new Array<ParticleController>(); editor.assetManager.getAll(ParticleEffect.class, effects); for(ParticleEffect effect : effects){ controllers.addAll(effect.getControllers()); } controllerPicker.setLoadedTemplates(controllers); } @Override public void handle (int aEventType, Object aEventData) { if(aEventType == FlameMain.EVT_ASSET_RELOADED){ Object[] data = (Object[])aEventData; if(data[0] instanceof ParticleEffect){ ParticleEffect oldEffect = (ParticleEffect) data[0]; int currentCount = value.templates.size; value.templates.removeAll(oldEffect.getControllers(), true); if(value.templates.size != currentCount){ int diff = currentCount - value.templates.size; if(diff > 0){ ParticleEffect newEffect = (ParticleEffect) data[1]; Array<ParticleController> newControllers = newEffect.getControllers(); if(newControllers.size > 0){ for(int i=0, c=Math.min(diff, newControllers.size); i<c; ++i) value.templates.add(newControllers.get(i)); } } else { value.templates.addAll( ((ParticleEffect)editor.assetManager.get(FlameMain.DEFAULT_BILLBOARD_PARTICLE)).getControllers()); } controllerPicker.reloadTemplates(); controllerPicker.setValue(value.templates); editor.restart(); } } } } }