abstractboxbot.java

来自「一个JAVA程序员的游戏」· Java 代码 · 共 97 行

JAVA
97
字号
/*
 * AbstractBoxBot.java
 *
 * Created on 28. Januar 2007, 17:37
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package kanjitori.graphics.bot;

import com.jme.bounding.BoundingBox;
import com.jme.image.Texture;
import com.jme.math.Vector3f;
import com.jme.renderer.ColorRGBA;
import com.jme.scene.Controller;
import com.jme.scene.Node;
import com.jme.scene.shape.Box;
import com.jme.scene.state.CullState;
import com.jme.scene.state.MaterialState;
import com.jme.scene.state.TextureState;
import com.jme.util.TextureManager;
import java.awt.Color;
import java.awt.Image;
import javax.swing.ImageIcon;
import kanjitori.graphics.shape.RoundedBox;

/**
 *
 * @author Pirx
 */
public abstract class AbstractBoxBot extends AbstractBot {

    //protected static Image CORPUS_IMAGE = new ImageIcon("data/corpus.png").getImage();
    
    //private final static Color DARK_COLOR = new Color(0.2f, 0.2f, 0.2f);
    private final static ColorRGBA MAT_COLOR = new ColorRGBA(1, 1, 1, 0);
    
    private MaterialState ms;
    
    /** Creates a new instance of AbstractBoxBot */
    public AbstractBoxBot(String value) {
        super(value);
        node = new Node("bot");
        initBot();
    }
    
    private void initBot() {
        Image img = getImage(value);
        
        TextureState ts = display().getRenderer().createTextureState();
        Texture t = TextureManager.loadTexture(img, Texture.MM_LINEAR, Texture.MM_LINEAR, ts.getMaxAnisotropic(), true);
        ts.setTexture(t);
        
        RoundedBox box = new RoundedBox("bot",
                new Vector3f(0.5f, 0.5f, 0.5f),
                new Vector3f(0.05f, 0.05f, 0.05f),
                new Vector3f(0.02f, 0.02f, 0.02f));
        ms = getMaterialState(MAT_COLOR);
        box.setRenderState(ms);
        box.setRenderState(ts);
        CullState cs = display().getRenderer().createCullState();
        cs.setEnabled(true);
        cs.setCullMode(CullState.CS_BACK);
        box.setRenderState(cs);
        box.updateRenderState();
        box.setModelBound(new BoundingBox());
        box.updateModelBound();
        node.attachChild(box);
    }    

    public void die() {
        Vector3f position = node.getLocalTranslation();
        Node rootNode = node.getParent();
        
        node.getChild(0).setRenderState(getTransparence());  
        node.setRenderQueueMode(display().getRenderer().QUEUE_TRANSPARENT);
        node.updateRenderState();
                
        node.addController(new Controller() {
            private float time = 0;
            public void update(float f) {
                time += f;
                ms.getDiffuse().a = (2 - time) / 2;
                if (time > 2) {
                    node.removeController(this);
                    remove();
                    cleanTexture(node);
                }
            }
        });
    }    
    
    abstract Image getImage(String value);
    
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?