Package net.cis.client.game.common.model.co

Source Code of net.cis.client.game.common.model.co.AbstractControlledObject

package net.cis.client.game.common.model.co;

import net.cis.client.game.common.ctrl.IDispatcher;
import net.cis.client.game.common.ctrl.IGameApplication;
import net.cis.client.game.common.model.ai.AINode;
import net.cis.client.game.common.model.event.ObjectEvent;
import net.cis.client.game.common.model.event.types.ObjectAwareEventType;
import net.cis.client.game.common.util.GlobalObjectStore;
import net.cis.common.model.base.AbstractNamedEntity;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.jme3.scene.Node;

public abstract class AbstractControlledObject<DO extends AbstractNamedEntity, SO>
  {
  protected final Log log;
 
  public final DO dataObject;
  protected SO sceneObject = null;
  protected boolean addedToScene = false;
 
  protected String debugDisplay = null;
 
  protected AINode ai;
  protected Node sceneNode;
 
  public AbstractControlledObject(DO dataObject) {
    this.dataObject = dataObject;
   
    log = LogFactory.getLog(getClass());
  }

  public final void loadSceneObject()
    {
    if(isLoaded())
      return;

    log.trace("Loading scene object for " + this);
    internalLoadSceneObject();
    }
  public final void unloadSceneObject()
    {
    if(!isLoaded())
      return;
   
    log.trace("Unloading scene object for " + this);
    internalUnLoadSceneObject();
   
    sceneObject = null;
    }
  public final void addToScene(IGameApplication simpleApp)
    {
    if(addedToScene)
      return;
   
    log.trace("Adding object to scene " + this);
    addedToScene = internalAddToScene(simpleApp);
   
    if(!addedToScene)
      return;
   
    if(this.dataObject == null)
      log.error("DataObject is null for " + this);
    else
      GlobalObjectStore.<IDispatcher>getObject(IDispatcher.class).publish(new ObjectEvent(new ObjectAwareEventType("ObjectAddedToScene", this.dataObject.getId()), this));
   
    }
  public final void removeFromScene(IGameApplication simpleApp)
    {
    if(!addedToScene)
      return;
   
    log.trace("Removing object from scene " + this);
    addedToScene = !internalRemoveFromScene(simpleApp);
   
    if(addedToScene)
      return;
   
    if(this.dataObject == null)
      log.error("DataObject is null for " + this);
    else
      GlobalObjectStore.<IDispatcher>getObject(IDispatcher.class).publish(new ObjectEvent(new ObjectAwareEventType("ObjectRemovedFromScene", this.dataObject.getId()), this));
    }
  public final void destroy()
    {
    if(addedToScene)
      log.error("Object about to be destroyed, still in scene: " + this);
   
    log.trace("Destroying object " + this);
    if(this.dataObject == null)
      log.error("DataObject is null for " + this);
    else
      GlobalObjectStore.<IDispatcher>getObject(IDispatcher.class).publish(new ObjectEvent(new ObjectAwareEventType("ObjectDestroyed", this.dataObject.getId()), this));
    internalDestroy();
    }
 
  protected abstract void internalLoadSceneObject();
  protected void internalUnLoadSceneObject(){};
  protected abstract boolean internalAddToScene(IGameApplication simpleApp);
  protected abstract boolean internalRemoveFromScene(IGameApplication simpleApp);
  protected void internalDestroy(){};

  public boolean isAddedToScene()
    {
    return addedToScene;
    }


  public SO getSceneObject() {
    if (!isLoaded())
      loadSceneObject();
    return sceneObject;
  }

  public boolean isLoaded() {
    return sceneObject != null;
  }
 
  @Override
  public String toString()
    {
    String s = "";
   
    if(dataObject == null)
      s += "noData";
    else
      {
      s += dataObject.getClass().getSimpleName();
     
      if(dataObject instanceof AbstractNamedEntity)
        s += ((AbstractNamedEntity)dataObject).getName();
      }
   
    s += "(ID:" + (dataObject == null ? "?" : dataObject.getId()) + ", AI:"+(ai!=null)+", L:"+isLoaded()+", InScene:"+isAddedToScene()+"): ";
   
    s += sceneObject;
   
    return s;
    }

  public String getDebugDisplay()
    {
    if(debugDisplay != null)
      return debugDisplay;
    else
      return this.toString();
    }
  public void setDebugDisplay(String s)
    {
    debugDisplay =s;
    }
 
  public Node getSceneNode()
    {
    return this.sceneNode;
    }
  public void setSceneNode(Node sceneNode)
    {
    this.sceneNode = sceneNode;
    }
  public AINode getAINode()
    {
    return this.ai;
    }
  public void setAINode(AINode ai)
    {
    this.ai = ai;
    }

}
TOP

Related Classes of net.cis.client.game.common.model.co.AbstractControlledObject

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.