fantomobjectlayer.java

来自「Java mulitplayer strategy game. Adaptati」· Java 代码 · 共 100 行

JAVA
100
字号
/*
 * Created on 2005-10-10
 * $Id: FantomObjectLayer.java,v 1.1 2006/01/07 15:53:39 macx2k Exp $ 
 */
package net.sf.jawp.j3d.object;

import java.util.HashMap;
import java.util.Map;

import javax.media.j3d.BranchGroup;

/**
 * @author Maciej Malecki
 * @param <RENDERABLE>
 *            type to be managed with this pool
 */
public abstract class FantomObjectLayer<RENDERABLE> implements TemporaryObjectLayer<RENDERABLE>
{
	private final Map<RENDERABLE, SceneObject<RENDERABLE>> usedObjects;

	private BranchGroup branch = null;
	
	private boolean inited = false;
	
	/**
	 */
	public FantomObjectLayer()
	{
		usedObjects = new HashMap<RENDERABLE, SceneObject<RENDERABLE>>();
	}

	/**
	 * {@inheritDoc}
	 */
	public void show(final RENDERABLE renderedObject)
	{
		final SceneObject<RENDERABLE> renderer = createSceneObject(renderedObject);
		usedObjects.put(renderedObject, renderer);
		branch.addChild(renderer.getSceneObject());
	}

	/**
	 * {@inheritDoc}
	 */
	public void update(final RENDERABLE renderedObject)
	{
		final SceneObject<RENDERABLE> renderer = usedObjects
				.get(renderedObject);
		if (renderer != null)
		{
			renderer.update();
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public void hide(final RENDERABLE renderedObject)
	{
		final SceneObject<RENDERABLE> renderer = usedObjects.get(renderedObject);
		if (renderer != null)
		{
			renderer.getSceneObject().detach();
			usedObjects.remove(renderedObject);
		}
	}

	/**
	 * {@inheritDoc}
	 */
	public BranchGroup getSceneObjects()
	{
		if (!inited)
		{
			init();
		}
		return branch;
	}

	/**
	 * Factory method which creates TemporaryObjectSceneNodes. This method must
	 * be overriden and proper scene node object must be provided.
	 * 
	 * @return
	 */
	protected abstract SceneObject<RENDERABLE> createSceneObject(RENDERABLE object);

	private void init()
	{
		if (inited)
		{
			throw new IllegalStateException("Pool is already inited");
		}
		inited = true;
		
		branch = new BranchGroup();
		branch.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
	}
}

⌨️ 快捷键说明

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