abstractthing.java.svn-base

来自「一个JAVA程序员的游戏」· SVN-BASE 代码 · 共 100 行

SVN-BASE
100
字号
/*
 * AbstractThing.java
 *
 * Created on 26. Dezember 2006, 15:01
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package kanjitori.graphics;

import com.jme.image.Image;
import com.jme.image.Texture;
import com.jme.renderer.ColorRGBA;
import com.jme.scene.Node;
import com.jme.scene.Spatial;
import com.jme.scene.state.AlphaState;
import com.jme.scene.state.MaterialState;
import com.jme.scene.state.RenderState;
import com.jme.scene.state.TextureState;
import com.jme.system.DisplaySystem;
import com.jme.util.TextureManager;
import java.util.ArrayList;
import kanjitori.*;

/**
 *
 * @author Pirx
 */
public abstract class AbstractThing implements Thing {
    
    protected Node node;
    private static AlphaState asTransparent;
    
    public Node getNode() {
        return node;
    }
    
    protected DisplaySystem display() {
        return  DisplaySystem.getDisplaySystem();
    }
    
    protected TextureState loadTexture(String texture) {
        TextureState ts = display().getRenderer().createTextureState();
        Texture t = TextureManager.loadTexture(texture, Texture.MM_LINEAR, Texture.FM_LINEAR,
                ts.getMaxAnisotropic(), true);
        ts.setTexture(t);
        return ts;
    }
    
    protected TextureState loadTextureUncompressed(String texture) {
        TextureState ts = display().getRenderer().createTextureState();
        Texture t = TextureManager.loadTexture(texture, Texture.MM_LINEAR, Texture.FM_LINEAR,
                Image.GUESS_FORMAT_NO_S3TC, ts.getMaxAnisotropic(), true);
        ts.setTexture(t);
        return ts;
    }
    
    protected MaterialState getMaterialState(ColorRGBA color) {
        MaterialState mat = display().getRenderer().createMaterialState();
        mat.setEmissive(color == null ? new ColorRGBA(0.5f, 0.5f, 0.5f, 1) : color);
        return mat;
    }
    
    public boolean checkPlayerCollision() {
        Node player = Player.getPlayer().getCollisionNode();
        if (player == null || player.getWorldBound() == null || node == null || node.getWorldBound() == null) {
            return false;
        }
        return node.getWorldBound().intersects(player.getWorldBound());
    }
    
    protected AlphaState getTransparence() {
        if (asTransparent == null) {
            asTransparent = display().getRenderer().createAlphaState();
            asTransparent.setBlendEnabled(true);
            asTransparent.setSrcFunction(AlphaState.SB_SRC_ALPHA);
            asTransparent.setDstFunction(AlphaState.DB_ONE_MINUS_SRC_ALPHA);
            asTransparent.setEnabled(true);
        }
        return asTransparent;
    }
    
    public static void cleanTexture(Spatial s) {
        TextureState ts = (TextureState)s.getRenderState(RenderState.RS_TEXTURE);
        if(ts != null) {
            ts.deleteAll(true);
        }
        if(s instanceof Node) {
            ArrayList<Spatial> children = ((Node)s).getChildren();
            if(children != null) {
                for(Spatial child : children) {
                    cleanTexture(child);
                }
            }
        }
    }
    
}

⌨️ 快捷键说明

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