package fr.lyrgard.hexScape.model; import com.jme3.asset.AssetManager; import com.jme3.material.Material; import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; import com.jme3.scene.Spatial; import com.jme3.scene.VertexBuffer.Type; import com.jme3.texture.Texture; import com.jme3.util.BufferUtils; import fr.lyrgard.hexScape.HexScapeCore; import fr.lyrgard.hexScape.model.model3d.TileMesh; import fr.lyrgard.hexScape.model.player.ColorEnum; public class SelectMarker implements Displayable { private static Material redMaterial; private static Material blueMaterial; private static Material greenMaterial; private static Mesh mesh; private Geometry geometry; static { AssetManager assetManager = HexScapeCore.getInstance().getHexScapeJme3Application().getAssetManager(); Texture tileTexture = assetManager.loadTexture("model/texture/select_cross_white.png"); redMaterial = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); redMaterial.setBoolean("UseMaterialColors",true); redMaterial.setTexture("DiffuseMap", tileTexture); redMaterial.setColor("Ambient", ColorRGBA.Red); redMaterial.setColor("Diffuse",ColorRGBA.White); // minimum material color redMaterial.setColor("Specular",ColorRGBA.White); // for shininess redMaterial.setFloat("Shininess", 50f); redMaterial.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); blueMaterial = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); blueMaterial.setBoolean("UseMaterialColors",true); blueMaterial.setTexture("DiffuseMap", tileTexture); blueMaterial.setColor("Ambient", ColorRGBA.Blue); blueMaterial.setColor("Diffuse",ColorRGBA.White); // minimum material color blueMaterial.setColor("Specular",ColorRGBA.White); // for shininess blueMaterial.setFloat("Shininess", 50f); blueMaterial.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); greenMaterial = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); greenMaterial.setBoolean("UseMaterialColors",true); greenMaterial.setTexture("DiffuseMap", tileTexture); greenMaterial.setColor("Ambient", ColorRGBA.Green); greenMaterial.setColor("Diffuse",ColorRGBA.White); // minimum material color greenMaterial.setColor("Specular",ColorRGBA.White); // for shininess greenMaterial.setFloat("Shininess", 50f); greenMaterial.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); mesh = new Mesh(); float value = TileMesh.HEX_SIZE_Z / 2; mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(new Vector3f[] {new Vector3f(-value, 0, value), new Vector3f(value, 0, value), new Vector3f(value, 0, -value), new Vector3f(-value, 0, -value)})); mesh.setBuffer(Type.TexCoord, 2, BufferUtils.createFloatBuffer(new Vector2f[] {new Vector2f(0, 0), new Vector2f(1, 0), new Vector2f(1, 1), new Vector2f(0, 1)})); mesh.setBuffer(Type.Index, 3, BufferUtils.createIntBuffer(new int[]{0, 1, 2, 0, 2, 3})); mesh.updateBound(); } public SelectMarker(ColorEnum color) { geometry = new Geometry("selectCross", mesh); geometry.setQueueBucket(Bucket.Translucent); geometry.setShadowMode(ShadowMode.Off); switch (color) { case BLUE: geometry.setMaterial(blueMaterial); break; case RED: geometry.setMaterial(redMaterial); break; case GREEN: geometry.setMaterial(greenMaterial); break; default: geometry.setMaterial(redMaterial); break; } } @Override public Spatial getSpatial() { return geometry; } }