Package net.cis.client.game.ctrl

Source Code of net.cis.client.game.ctrl.GameController

package net.cis.client.game.ctrl;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import net.cis.client.game.common.ctrl.IDispatcher;
import net.cis.client.game.common.ctrl.IObjectController;
import net.cis.client.game.common.threading.IGameDestroyCallback;
import net.cis.client.game.common.util.GlobalObjectStore;
import net.cis.client.game.ctrl.ai.AIController;
import net.cis.client.game.ctrl.scene.ObjectController;
import net.cis.client.game.model.DebugGuiNode;
import net.cis.client.game.scenery.ctrl.flight.AttitudeFlightAssistent;
import net.cis.client.game.scenery.ctrl.flight.RotationFlightAssistent;
import net.cis.client.game.scenery.factory.PlayerFactory;
import net.cis.client.game.scenery.factory.SectorFactory;
import net.cis.client.game.scenery.model.PlayerVehicleUpdates;
import net.cis.client.game.ui.hud.ctrl.OnBoardUIController;
import net.cis.client.game.ui.util.ResourceConstants;
import net.cis.common.model.sector.Sector;
import net.cis.common.model.spaceobject.SpaceObject;
import net.cis.common.model.system.UserData;

import com.jme3.app.Application;
import com.jme3.app.state.AbstractAppState;
import com.jme3.app.state.AppStateManager;
import com.jme3.asset.AssetManager;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.math.Vector3f;
import com.jme3.niftygui.NiftyJmeDisplay;
import com.jme3.system.Timer;

import de.lessvoid.nifty.Nifty;

/**
* Globale Gamelogik ist hier !
*/
public class GameController extends AbstractAppState {

  private GameApplication gameApp;

  private IObjectController objectController;

  private Dispatcher dispatcher;

  private LogicThreadCtrl logicCallbacksCtrl;

  private AIController aiCtrl;

  private ExecutorService threadPool;

  private UserData userData;

  private InputCtrl inputCtrl;

  private NiftyJmeDisplay niftyDisplay;

  public GameController(UserData userData, NiftyJmeDisplay niftyDisplay) {
    this.userData = userData;
    this.niftyDisplay = niftyDisplay;
  }

  @Override
  public void initialize(AppStateManager stateManager, Application app) {
    gameApp = (GameApplication) app;
    gameApp.addGameDestroyCallback(createDestroyCallback());
    gameApp.getInputManager().setCursorVisible(false);

    BulletAppState state = new BulletAppState();
    gameApp.getStateManager().attach(state);
    state.getPhysicsSpace().setGravity(Vector3f.ZERO);

    // The glorious one and only Object store
    GlobalObjectStore.setAccessLog(false);
    GlobalObjectStore.registerObject(gameApp.getAssetManager(), AssetManager.class);

    // /////////////////
    GlobalObjectStore.registerObject(dispatcher = new Dispatcher(GlobalObjectStore.<Timer>getObject(Timer.class)), IDispatcher.class, Dispatcher.class);
    GlobalObjectStore.registerObject(objectController = new ObjectController(gameApp), IObjectController.class, ObjectController.class);
    aiCtrl = new AIController(gameApp);
    logicCallbacksCtrl = new LogicThreadCtrl(gameApp, GlobalObjectStore.<Timer>getObject(Timer.class));

    // Nifty: Hud, Usermenu, etc...
    Nifty nifty = niftyDisplay.getNifty();
    nifty.setGlobalProperties(ResourceConstants.getUserProperties());
    nifty.fromXml("hud/onBoardUI.xml", "onBoard");
    ((OnBoardUIController) nifty.getScreen("onBoard").getScreenController()).initialize();

    // datamodel laden
    // int sectorID = userData.getSectorId();
    Sector sector = null;

    // co erzeugen
    SectorFactory sf = new SectorFactory();
    sf.addControlledObject(sector);

    PlayerFactory pf = new PlayerFactory();
    pf.addControlledObject((SpaceObject) null, true);

    // Inputs laden
    RigidBodyControl playerVehicle = objectController.getPlayer().getRigidBodyControl();
    PlayerVehicleUpdates pvu = new PlayerVehicleUpdates();
    initializeInput(pvu);

    // Flugsteuerung laden
    RotationFlightAssistent rfa = new RotationFlightAssistent(playerVehicle, pvu);
    AttitudeFlightAssistent afa = new AttitudeFlightAssistent(playerVehicle, pvu);
    logicCallbacksCtrl.addCallee(rfa, afa);

    // Camera
    CameraCtrl cc = new CameraCtrl(gameApp);
    inputCtrl.initCameraControlKeyListener(cc);

    // debug stuff
    gameApp.getGuiNode().attachChild(new DebugGuiNode(gameApp.getCamera()));

    // start thread pool
    threadPool = Executors.newFixedThreadPool(3);
    threadPool.execute(logicCallbacksCtrl);
    threadPool.execute(aiCtrl);
    threadPool.execute(dispatcher);
   
    // initialized = true
    super.initialize(stateManager, app);
  }

  private void initializeInput(PlayerVehicleUpdates pvu) {
    inputCtrl = new InputCtrl(gameApp.getInputManager(), pvu);
  }

  private IGameDestroyCallback createDestroyCallback() {
    return new IGameDestroyCallback() {
      @Override
      public void destroy() {
     
        //graceful threadpool shutdown
        aiCtrl.stopWait(1000);
        logicCallbacksCtrl.stopWait(1000);
        dispatcher.stopWait(1000);
     
        //hardcore threadpool shutdown
        threadPool.shutdownNow();
      }
    };
  }
}
TOP

Related Classes of net.cis.client.game.ctrl.GameController

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.