Newer
Older
CactusServer / src / main / java / cactusServer / utils / App.java
package cactusServer.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Timer;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import org.glassfish.jersey.server.ResourceConfig;
import org.ntlab.radishforandroidstudio.framework.model3D.BaseObject3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Model3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D;
import org.ntlab.radishforandroidstudio.framework.physics.AngularVelocity3D;
import org.ntlab.radishforandroidstudio.framework.physics.Ground;
import org.ntlab.radishforandroidstudio.framework.physics.PhysicsUtility;
import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D;
import org.ntlab.radishforandroidstudio.java3d.Appearance;
import org.ntlab.radishforandroidstudio.java3d.IndexedTriangleArray;
import org.ntlab.radishforandroidstudio.java3d.Material;
import org.ntlab.radishforandroidstudio.java3d.Point3d;
import org.ntlab.radishforandroidstudio.java3d.Vector3f;

import cactusServer.entities.*;
import cactusServer.entities.Character;
import cactusServer.entities.EmoteState.EmoteType;
import cactusServer.entities.MovableObject.*;
import cactusServer.models.Accounts;
import cactusServer.models.BulletModelManager;
import cactusServer.models.CharacterModelManager;
import cactusServer.models.CollisionManager;
import cactusServer.models.Instances;
import cactusServer.models.ObjectModelManager;
import cactusServer.models.StageModelManager;
import cactusServer.resources.InstancesRest;
import net.arnx.jsonic.JSON;

@SuppressWarnings("unused")
@ApplicationPath("/rest")
public class App extends ResourceConfig implements Runnable {
	private ScheduledThreadPoolExecutor task = new ScheduledThreadPoolExecutor(1000);
	private long lasttime = System.currentTimeMillis();
	private boolean debugflag = false;

	public App() {
		int interval = (debugflag) ? 1000 : 50;
		ObjectModelManager.getInstance();
		StageModelManager.getInstance();
		CharacterModelManager.getInstance();
		BulletModelManager.getInstance();
		Instances.getInstance();
		Accounts.getInstance();
		CollisionManager.getInstance();
		initDummy();
		start(interval);
		System.out.println("pass");
	}

	@Override
	public void run() {
		CollisionManager.getInstance().collisionRun(System.currentTimeMillis() - lasttime);
		Instances.getInstance().removeInactivePlayers();
		Instances.getInstance().removeDeadBullets();
		lasttime = System.currentTimeMillis();
	}

	public void start(int interval) {
		task.scheduleAtFixedRate(this, interval, interval, TimeUnit.MILLISECONDS);
	}

	private void initDummy() {
		// ダミーアカウント2つ
		Accounts.getInstance().createAcount("test", "test", "test");
		Accounts.getInstance().createAcount("test2", "test2", "test2");
		// ダミーインスタンス2つ
		Instances.getInstance().getInstances().put("test1", new Instance("test1", 0));
		Instances.getInstance().getInstances().put("test2", new Instance("test2", 1));
		// ダミーキャラクター4つ
		String accountUri = "/CactusServer/rest/accounts/"+ Accounts.getInstance().getAccountByID("test").getUniqueID();
		Character chara1 = new Character("test1", accountUri, "chara1", new Position3D(300, 400, 500),new Quaternion3D(), 0);
		Character chara2 = new Character("test2", accountUri, "chara2", new Position3D(300, 400, 500),new Quaternion3D(), 0);
		Instances.getInstance().getInstance("test1").getCharacters().put("chara1", chara1);
		Instances.getInstance().getInstance("test1").getCharacters().put("chara2", chara2);
		Instances.getInstance().getInstance("test2").getCharacters().put("chara1", chara1);
		Instances.getInstance().getInstance("test2").getCharacters().put("chara2", chara2);
		accountUri = "/CactusServer/rest/accounts/" + Accounts.getInstance().getAccountByID("test2").getUniqueID();
		chara1 = new Character("test2", accountUri, "chara3", new Position3D(), new Quaternion3D(), 0);
		Instances.getInstance().getInstance("test2").getCharacters().put("chara3", chara1);
		
//		// ダミープレイヤー3つ
//		chara1.setPosition(new Position3D(34.5, 23.4, 19));
//		CameraState cameraState = new CameraState(1.24, new Quaternion3D(), 2.38, 3);
//		Player player1 = new Player("test1", "chara1", null, null);
//		Instances.getInstance().getPlayers().put("player1", player1);
//		Player player2 = new Player("test2", "chara2", cameraState, EmoteType.DUMMY);
//		Instances.getInstance().getPlayers().put("player2", player2);
//		Player player3 = new Player("test1","chara1",null,null);
//		Instances.getInstance().getPlayers().put("player3", player3);
		
		// ダミーオブジェクト
		Instances.getInstance().getInstance("test1").createObject(new Position3D(0, 0, 0), new Velocity3D(),
				new AngularVelocity3D(), new Quaternion3D(), new Attribute(true, 1), 0);
		
//		// ダミーバレット
//		Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId1",
//				new Position3D(50, 50, 50), new Quaternion3D());
//		Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId2",
//				new Position3D(300, 400, 500), new Quaternion3D());
//		Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId3",
//				new Position3D(110, 110, 110), new Quaternion3D());
//		Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId4", 
//				new Position3D(0, 0, 0), new Quaternion3D());
//		Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId5",
//				new Position3D(300, 400, 500), new Quaternion3D());
//		Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId6",
//				new Position3D(300, 400, 500), new Quaternion3D());
		System.out.println("obj");
	}
}