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"); } }