package org.ntlab.radishforandroidstudio.cactusClient.models; import android.telecom.Call; import net.arnx.jsonic.JSON; import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletCreateConnection; import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletUpdateConnection; import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; import org.ntlab.radishforandroidstudio.framework.gameMain.Actor; import org.ntlab.radishforandroidstudio.framework.gameMain.OnlineModel; import org.ntlab.radishforandroidstudio.framework.model3D.CollisionResult; import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; import org.ntlab.radishforandroidstudio.framework.model3D.Placeable; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; import org.ntlab.radishforandroidstudio.framework.physics.Force3D; import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; import org.ntlab.radishforandroidstudio.java3d.Vector3d; import java.util.ArrayList; import java.util.UUID; public class MyBullet extends Actor implements OnlineModel { private String instanceId; private String playerId; private String uuid; final private int INIT_UPDATE_INTERVAL = 100; private int updateInterval = INIT_UPDATE_INTERVAL; private boolean isCreatedOnServer = false; private boolean isWaitCreatingOnServer = false; private boolean isDelete = false; public MyBullet(Object3D body, Animation3D animation) { super(body, animation); initUuid(); } public MyBullet(Solid3D body, Animation3D animation) { super(body, animation); initUuid(); } public void initUuid() { if (getUuid() == null || getUuid().equals("")) { uuid = UUID.randomUUID().toString(); } } public String getUuid() { return uuid; } public boolean isDelete() { return isDelete; } @Override public void onEndFall() { } @Override public void onIntersect(CollisionResult normal, long interval) { } @Override public void onEndAnimation() { } @Override public void addCollidable(ArrayList<Placeable> pList) { } @Override public void onCollisionEnter(Placeable p) { } @Override public void onCollisionStay(Placeable p) { } @Override public void onCollisionExit(Placeable p) { } @Override public Force3D getGravity() { return Force3D.ZERO; } @Override final public void update(double interval) { progress(interval); // サーバに弾を作成 if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("") && !isWaitCreatingOnServer) { JSON json = new JSON(); Quaternion3D q = ((Solid3D)(getBody())).getQuaternion(); BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); con.setCallBack(this); con.addFormParam("bulletID", getUuid()); con.addFormParam("position", json.encode(getPosition())); con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); con.doPost(); isWaitCreatingOnServer = true; System.out.println("create shot uuid:" + getUuid()); } else if (isCreatedOnServer && !isWaitCreatingOnServer) { // サーバの弾の情報を更新 updateInterval -= interval; if (updateInterval <= 0 && isCreatedOnServer) { JSON json = new JSON(); Quaternion3D q = ((Solid3D)(getBody())).getQuaternion(); updateInterval = INIT_UPDATE_INTERVAL; BulletUpdateConnection con = new BulletUpdateConnection(instanceId, playerId, getUuid()); con.setCallBack(this); con.addFormParam("position", json.encode(getPosition())); con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); con.doPut(); } } } public void progress(double interval) { } public void init(Position3D pos, Quaternion3D angle) { setPosition(pos); Vector3d v = new Vector3d(-1.0f, 0, 0); v = v.rotate(angle); setVelocity(new Velocity3D(v)); } @Override public void setInstanceId(String id) { instanceId = id; } public void setPlayerid(String id) { playerId = id; } @Override public void onResponse(String response) { isWaitCreatingOnServer = false; isCreatedOnServer = true; } }