1package com.jme3.scene.plugins.blender.modifiers;
2
3import com.jme3.scene.Node;
4import com.jme3.scene.plugins.blender.BlenderContext;
5import com.jme3.scene.plugins.blender.file.Pointer;
6import com.jme3.scene.plugins.blender.file.Structure;
7
8/**
9 * This class represents an object's modifier. The modifier object can be varied
10 * and the user needs to know what is the type of it for the specified type
11 * name. For example "ArmatureModifierData" type specified in blender is
12 * represented by AnimData object from jMonkeyEngine.
13 *
14 * @author Marcin Roguski (Kaelthas)
15 */
16public abstract class Modifier {
17
18	public static final String ARRAY_MODIFIER_DATA = "ArrayModifierData";
19	public static final String ARMATURE_MODIFIER_DATA = "ArmatureModifierData";
20	public static final String PARTICLE_MODIFIER_DATA = "ParticleSystemModifierData";
21	public static final String MIRROR_MODIFIER_DATA = "MirrorModifierData";
22	public static final String SUBSURF_MODIFIER_DATA = "SubsurfModifierData";
23	public static final String OBJECT_ANIMATION_MODIFIER_DATA = "ObjectAnimationModifierData";
24
25	/** This variable indicates if the modifier is invalid (<b>true</b>) or not (<b>false</b>). */
26	protected boolean invalid;
27
28	/**
29	 * This method applies the modifier to the given node.
30	 *
31	 * @param node
32	 *            the node that will have modifier applied
33	 * @param blenderContext
34	 *            the blender context
35	 * @return the node with applied modifier
36	 */
37	public abstract Node apply(Node node, BlenderContext blenderContext);
38
39	/**
40	 * This method returns blender's type of modifier.
41	 *
42	 * @return blender's type of modifier
43	 */
44	public abstract String getType();
45
46	protected boolean validate(Structure modifierStructure, BlenderContext blenderContext) {
47		Structure modifierData = (Structure)modifierStructure.getFieldValue("modifier");
48		Pointer pError = (Pointer) modifierData.getFieldValue("error");
49		invalid = pError.isNotNull();
50		return !invalid;
51	}
52}
53