diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java deleted file mode 100644 index 77a7adf..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import android.content.res.Resources; - -import net.arnx.jsonic.JSON; -import net.arnx.jsonic.TypeReference; - -import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletGetConnection; -import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; -import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Property3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Universe; -import org.ntlab.radishforandroidstudio.framework.network.CallBack; -import org.ntlab.radishforandroidstudio.java3d.Appearance; -import org.ntlab.radishforandroidstudio.java3d.Material; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -public class -BulletsManager implements GameBaseModel, CallBack { - private Universe universe; - private Resources resources; - private BulletGetConnection con; - private int nextConnectRenaimdTime = 0; - static final private int CONNECT_INTERVAL = 100; - private Map visibleBullets = new HashMap<>(); - private Map playerVisibleBullets = new HashMap<>(); - private String instanceId; - private String playerId; - - private Set bulletsSet; - - public enum BulletType { - Normal - } - - public BulletsManager(Resources fragment, Universe universe) { - this.universe = universe; - this.resources = fragment; - } - - @Override - public void setInstanceId(String id) { - this.instanceId = id; - } - - public void setPlayerId(String id) { - playerId = id; - } - - /** - * 玉の状態を更新する - * - * @author s.iwatani - * @param interval 前回の更新からの時間差 - */ - @Override - public void update(double interval) { - nextConnectRenaimdTime -= interval; - if (nextConnectRenaimdTime <= 0 && instanceId != null) { - nextConnectRenaimdTime = CONNECT_INTERVAL; - con = new BulletGetConnection(instanceId); - con.setCallBack(this); - con.doGet(); - } - } - - @Override - public void onResponse(String response) { - Map lastVisibleBullets = new HashMap<>(visibleBullets); - Map lastPlayerVisibleBullets = new HashMap<>(playerVisibleBullets); - visibleBullets.clear(); - JSON json = new JSON(); - if (!response.equals("{}")) { - ArrayList> m = json.decode(response, new TypeReference>>() {}); - for (Map eachPlayerBullets : m) { - for (Map.Entry entry : eachPlayerBullets.entrySet()) { - visibleBullets.put(entry.getKey(), 1); - ArrayList properties = new ArrayList<>(); - - Bullet b = entry.getValue(); - - // 自分自身は無視する - if (b.getPlayerID().equals(playerId)) { - playerVisibleBullets.put(entry.getKey(), 1); - continue; - } - - - // 情報の取得 - properties.add(b.getPosition()); - properties.add(b.getAngle()); - - if (!universe.doHaveObj(entry.getKey())) { - Appearance ap1 = new Appearance(); - Material mat = new Material(); - mat.setDiffuseColor(0.0f, 0.3f, 1.0f); - mat.setAmbientColor(0.0f, 0.0f, 0.0f); - mat.setEmissiveColor(0.0f, 0.0f, 0.0f); - mat.setSpecularColor(0.0f, 0.0f, 0.0f); - mat.setShininess(5.0f); - ap1.setMaterial(mat); - - Object3D pochaBody = null; - try { - pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); - pochaBody.scale(0.5); - } catch (Exception e) { - e.printStackTrace(); - } - OtherPlayerBullet bullet = new OtherPlayerBullet(pochaBody); - universe.place(entry.getKey(), bullet); - universe.place(bullet); - } - universe.apply(entry.getKey(), properties); - } - } - } - // 見えなくなったキャラクターの削除 - for (String key : lastVisibleBullets.keySet()) { - if (visibleBullets.get(key) == null) { - universe.displace(key); - } - } - - // 消えた弾の削除(プレイヤーのみ) - for(String key: lastPlayerVisibleBullets.keySet()) { - bulletsSet.add(key); - } - } - - /** - * 消えた弾のうち,セットしたプレイヤーに該当する弾を取得する - * - * @return ArrayList - */ - public ArrayList getDeletedPlayerBullets() { - ArrayList bullets = new ArrayList<>(); - - for(String key : bulletsSet) { - bullets.add(key); - } - bulletsSet.clear(); - return bullets; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java new file mode 100644 index 0000000..1aca284 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsModel.java @@ -0,0 +1,151 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.content.res.Resources; + +import net.arnx.jsonic.JSON; +import net.arnx.jsonic.TypeReference; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.BulletGetConnection; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Property3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; +import org.ntlab.radishforandroidstudio.framework.network.CallBack; +import org.ntlab.radishforandroidstudio.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Material; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class +BulletsModel implements GameBaseModel, CallBack { + private Universe universe; + private Resources resources; + private BulletGetConnection con; + private int nextConnectRenaimdTime = 0; + static final private int CONNECT_INTERVAL = 100; + private Map visibleBullets = new HashMap<>(); + private Map playerVisibleBullets = new HashMap<>(); + private String instanceId; + private String playerId; + + private Set bulletsSet; + + public enum BulletType { + Normal + } + + public BulletsModel(Resources fragment, Universe universe) { + this.universe = universe; + this.resources = fragment; + } + + @Override + public void setInstanceId(String id) { + this.instanceId = id; + } + + public void setPlayerId(String id) { + playerId = id; + } + + /** + * 玉の状態を更新する + * + * @author s.iwatani + * @param interval 前回の更新からの時間差 + */ + @Override + public void update(double interval) { + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0 && instanceId != null) { + nextConnectRenaimdTime = CONNECT_INTERVAL; + con = new BulletGetConnection(instanceId); + con.setCallBack(this); + con.doGet(); + } + } + + @Override + public void onResponse(String response) { + Map lastVisibleBullets = new HashMap<>(visibleBullets); + Map lastPlayerVisibleBullets = new HashMap<>(playerVisibleBullets); + visibleBullets.clear(); + JSON json = new JSON(); + if (!response.equals("{}")) { + ArrayList> m = json.decode(response, new TypeReference>>() {}); + for (Map eachPlayerBullets : m) { + for (Map.Entry entry : eachPlayerBullets.entrySet()) { + visibleBullets.put(entry.getKey(), 1); + ArrayList properties = new ArrayList<>(); + + Bullet b = entry.getValue(); + + // 自分自身は無視する + if (b.getPlayerID().equals(playerId)) { + playerVisibleBullets.put(entry.getKey(), 1); + continue; + } + + + // 情報の取得 + properties.add(b.getPosition()); + properties.add(b.getAngle()); + + if (!universe.doHaveObj(entry.getKey())) { + Appearance ap1 = new Appearance(); + Material mat = new Material(); + mat.setDiffuseColor(0.0f, 0.3f, 1.0f); + mat.setAmbientColor(0.0f, 0.0f, 0.0f); + mat.setEmissiveColor(0.0f, 0.0f, 0.0f); + mat.setSpecularColor(0.0f, 0.0f, 0.0f); + mat.setShininess(5.0f); + ap1.setMaterial(mat); + + Object3D pochaBody = null; + try { + pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); + pochaBody.scale(0.5); + } catch (Exception e) { + e.printStackTrace(); + } + OtherPlayerBullet bullet = new OtherPlayerBullet(pochaBody); + universe.place(entry.getKey(), bullet); + } + universe.apply(entry.getKey(), properties); + } + } + } + // 見えなくなったキャラクターの削除 + for (String key : lastVisibleBullets.keySet()) { + if (visibleBullets.get(key) == null) { + universe.displace(key); + } + } + + // 消えた弾の削除(プレイヤーのみ) + for(String key: lastPlayerVisibleBullets.keySet()) { + bulletsSet.add(key); + } + } + + /** + * 消えた弾のうち,セットしたプレイヤーに該当する弾を取得する + * + * @return ArrayList + */ + public ArrayList getDeletedPlayerBullets() { + ArrayList bullets = new ArrayList<>(); + + for(String key : bulletsSet) { + bullets.add(key); + } + bulletsSet.clear(); + return bullets; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java index d81cfb6..f4fb261 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OtherPlayerCharactersModel.java @@ -105,7 +105,6 @@ } OtherPlayerCharacter chara = new OtherPlayerCharacter(pochaBody); universe.place(entry.getKey(), chara); - universe.place(chara); } universe.apply(entry.getKey(), properties); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java deleted file mode 100644 index 27d1125..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import android.content.res.Resources; - -import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; -import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; -import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Universe; -import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; - -import java.util.ArrayList; -import java.util.Iterator; - -public class OwnBullets implements GameBaseModel, BulletShotListener { - private ArrayList bullets = new ArrayList<>(); - private String playerId; - private String instanceId; - private Resources resources; - private Universe universe; - private CactusModels cactusModels; - private Position3D playerPos; - private Quaternion3D playerAngle; - - public OwnBullets(Resources resources, Universe universe, String instanceId, String playerId) { - this.resources = resources; - this.universe = universe; - cactusModels = CactusModels.getInstance(); - - setInstanceId(instanceId); - setPlayerId(playerId); - - BulletShotSubject.getInstance().addListener(this); - } - - public void setPosition(Position3D pos) { - playerPos = pos; - } - - public void setAngle(Quaternion3D angle) { - playerAngle = angle; - } - - public void sendDeleteBulletForServer(MyBullet myBullet) { - // TODO: 弾消し情報を送信 - } - - @Override - public void update(double interval) { - for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { - MyBullet bullet = bulletIterator.next(); - // 弾削除 - if (bullet.isDelete()) { - sendDeleteBulletForServer(bullet); - bulletIterator.remove(); - } - } - } - - public void deleteBullets(ArrayList deletedBullets) { - for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { - MyBullet bullet = bulletIterator.next(); - - for(String deleteBullet : deletedBullets) { // 弾削除 - if (bullet.getUuid().equals(bullets)) { - universe.displace(bullet); - sendDeleteBulletForServer(bullet); - bulletIterator.remove(); - break; - } - } - } - } - - @Override - public void setInstanceId(String id) { - instanceId = id; - } - - public void setPlayerId(String id) { - playerId = id; - } - - /** - * 弾作成のイベント受け - * - * @param event イベントの情報 - * @return - */ - @Override - public boolean onEvent(BulletShotEvent event) { - if (playerPos == null || playerAngle == null || playerId == null || instanceId == null) { - return false; - } - MyBullet b = event.getBullet(); - b.setPlayerid(playerId); - b.setInstanceId(instanceId); - b.init(playerPos, playerAngle); - bullets.add(b); - universe.place(b); - cactusModels.addModel(b); - return true; - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java new file mode 100644 index 0000000..a176ca3 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBulletsModel.java @@ -0,0 +1,103 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.content.res.Resources; + +import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; +import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; + +import java.util.ArrayList; +import java.util.Iterator; + +public class OwnBulletsModel implements GameBaseModel, BulletShotListener { + private ArrayList bullets = new ArrayList<>(); + private String playerId; + private String instanceId; + private Resources resources; + private Universe universe; + private CactusModels cactusModels; + private Position3D playerPos; + private Quaternion3D playerAngle; + + public OwnBulletsModel(Resources resources, Universe universe, String instanceId, String playerId) { + this.resources = resources; + this.universe = universe; + cactusModels = CactusModels.getInstance(); + + setInstanceId(instanceId); + setPlayerId(playerId); + } + + public void setPosition(Position3D pos) { + playerPos = pos; + } + + public void setAngle(Quaternion3D angle) { + playerAngle = angle; + } + + public void sendDeleteBulletForServer(MyBullet myBullet) { + // TODO: 弾消し情報を送信 + } + + @Override + public void update(double interval) { + for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { + MyBullet bullet = bulletIterator.next(); + bullet.update(interval); + // 弾削除 + if (bullet.isDelete()) { + sendDeleteBulletForServer(bullet); + bulletIterator.remove(); + } + } + } + + public void deleteBullets(ArrayList deletedBullets) { + for (Iterator bulletIterator = bullets.iterator(); bulletIterator.hasNext();) { + MyBullet bullet = bulletIterator.next(); + + for(String deleteBullet : deletedBullets) { // 弾削除 + if (bullet.getUuid().equals(bullets)) { + universe.displace(bullet); + sendDeleteBulletForServer(bullet); + bulletIterator.remove(); + break; + } + } + } + } + + @Override + public void setInstanceId(String id) { + instanceId = id; + } + + public void setPlayerId(String id) { + playerId = id; + } + + /** + * 弾作成のイベント受け + * + * @param event イベントの情報 + * @return + */ + @Override + public boolean onEvent(BulletShotEvent event) { + if (playerPos == null || playerAngle == null || playerId == null || instanceId == null) { + return false; + } + MyBullet b = event.getBullet(); + b.setPlayerid(playerId); + b.setInstanceId(instanceId); + b.init(playerPos, playerAngle); + bullets.add(b); + universe.place(b); + return true; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java deleted file mode 100644 index a4780cc..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java +++ /dev/null @@ -1,222 +0,0 @@ -package org.ntlab.radishforandroidstudio.cactusClient.models; - -import android.content.res.Resources; -import android.view.MotionEvent; -import android.view.View; - -import net.arnx.jsonic.JSON; - -import org.ntlab.radishforandroidstudio.cactusClient.connections.CharacterConnection; -import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; -import org.ntlab.radishforandroidstudio.framework.event.PadEvent; -import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; -import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; -import org.ntlab.radishforandroidstudio.framework.listener.PadListener; -import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; -import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; -import org.ntlab.radishforandroidstudio.framework.model3D.Universe; -import org.ntlab.radishforandroidstudio.framework.network.CallBack; -import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; -import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; -import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D; -import org.ntlab.radishforandroidstudio.java3d.Appearance; -import org.ntlab.radishforandroidstudio.java3d.Material; -import org.ntlab.radishforandroidstudio.java3d.Vector3d; - -import java.util.ArrayList; - -public class OwnPlayer implements PadListener, GameBaseModel, CallBack { - private boolean isPadTouched = false; //Padのタッチ判定 - private float touchPadX = 0.0f; - private float touchPadY = 0.0f; - double n = 1.0; - - private OvergroundActor actor; - private Camera3D camera; - private Player player; - private CharacterConnection con; - private int nextConnectRenaimdTime = 0; - private int connectInterval = 300; - private String playerId; - private OwnBullets bullets; - - public OwnPlayer(Player player, Resources resources, Universe universe, Camera3D camera, String playerId, String instanceId) { - this.player = player; - setPlayerId(playerId); - setInstanceId(instanceId); - bullets = new OwnBullets(resources, universe, instanceId, playerId); - CactusModels.getInstance().addModel(bullets); - - // キャラクタの作成 - Appearance ap1 = new Appearance(); - Material m = new Material(); - m.setDiffuseColor(0.0f, 0.3f, 1.0f); - m.setAmbientColor(0.0f, 0.0f, 0.0f); - m.setEmissiveColor(0.0f, 0.0f, 0.0f); - m.setSpecularColor(0.0f, 0.0f, 0.0f); - m.setShininess(5.0f); - ap1.setMaterial(m); - Object3D pochaBody = null; - try { - pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); - Animation3D pochaAnimation = null; //AnimationFactory.loadAnimation("data\\pocha\\walk.wrl"); - actor = new OvergroundActor(pochaBody, pochaAnimation); - actor.setPosition(new Position3D(0.0, 1.0, 0.0)); - universe.place(actor); - } catch (Exception e) { - e.printStackTrace(); - } - - this.camera = camera; - camera.setViewPoint(actor.getPosition().add(0.0, 1.5, 0.0)); - camera.setViewLine(actor.getDirection()); - camera.setFieldOfView(1.5); - camera.setBackClipDistance(10000.0); - updateCamera(n); - } - - public void setPlayerId(String id) { - playerId = id; - } - - public void updateCamera(double n) { - Vector3d charaVector3d = actor.getDirection(); - charaVector3d.normalize();//キャラの向きを単位ベクトルに - camera.setViewPoint(actor.getPosition().add(5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.5 - n, 5.0 * charaVector3d.getZ()));//視点 - camera.setViewLine(new Vector3d(-5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5 + n, -5.0 * charaVector3d.getZ()));//視線 - } - - /** - * パッドを動かしたときのイベント処理 - * - * @param event イベントの情報 - * @return - */ - @Override - public boolean onEvent(PadEvent event) { - Vector3d charaVector3d = actor.getDirection(); - charaVector3d.normalize();//キャラの向きを単位ベクトルに - MotionEvent motionEvent = event.getMotionEvent(); - - if (motionEvent.getAction() == MotionEvent.ACTION_DOWN || motionEvent.getAction() == MotionEvent.ACTION_MOVE) { - isPadTouched = true; - touchPadX = (float) (Math.cos(event.getAngle()) * event.getLength()); - touchPadY = (float) (Math.sin(event.getAngle()) * event.getLength()); - } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { - Velocity3D vel = actor.getVelocity(); - vel.setX(0); - vel.setY(0); - actor.setVelocity(vel); - isPadTouched = false; - } - return false; - } - - @Override - public void update(double interval) { - updateCamera(n); - Velocity3D vel = actor.getVelocity(); - Vector3d actorVec = actor.getDirection(); - bullets.setPosition(actor.getPosition()); - bullets.setAngle(((Solid3D) (actor.getBody())).getQuaternion()); - - if (isPadTouched) { - Vector3d up = new Vector3d(0, 1, 0); - Vector3d total = new Vector3d(); - Vector3d right = new Vector3d(); - - right.cross(actorVec, up); - - Vector3d touchXVec = right.clone(); - Vector3d touchYVec = actorVec.clone(); - - touchXVec.scale(touchPadX * -5); - touchYVec.scale(touchPadY * 5); - - total.add(touchXVec); - total.add(touchYVec); - total.y = vel.getY(); - - vel.setVector3d(total); - actor.setVelocity(vel); - - } else { - vel.setX(0.0); - vel.setZ(0.0); - actor.setVelocity(vel); - } - - nextConnectRenaimdTime -= interval; - if (nextConnectRenaimdTime <= 0) { - nextConnectRenaimdTime = connectInterval; - sendPlayerInfo(); - } - } - - public void sendPlayerInfo() { - con = new CharacterConnection(playerId); - con.setCallBack(this); - - Quaternion3D q = ((Solid3D) (actor.getBody())).getQuaternion(); - player.setPosition(actor.getPosition()); - player.setAngle(q); - - JSON json = new JSON(); - con.addFormParam("characterID", player.getCharacterID()); - con.addFormParam("cameraState", json.encode(player.getCameraState())); - con.addFormParam("position", json.encode(player.getPosition())); - con.addFormParam("animationClassToStart", json.encode(player.getEmoteState())); - con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); - con.doPut(); - } - - @Override - public void setInstanceId(String id) { - player.setInstanceID(id); - } - - @Override - public void onResponse(String response) { - - } - - public void jump() { - if (actor.isOnGround()) { - Velocity3D vel = actor.getVelocity(); - vel.setY(vel.getY() + 5); - actor.setVelocity(vel); - System.out.print("Jumpしました。"); - } else { - System.out.print("地に足がついてない。"); - } - System.out.print("onClick押されましたよ。"); - } - - public void changeViewpoint(float eyeX, float eyeY) { - actor.rotY(0.1 * (0.5f - eyeX)); - if (n <= 5 && n >= 0) { - n += (0.5f - eyeY); - } else if (n > 5) { - n = 5; - } else if (n < 0) { - n = 0; - } - } - - public boolean onTouch(View v, MotionEvent event) { - System.out.println("RWTUIFragment touch"); - return false; - } - - public void logout() { - con = new CharacterConnection(playerId); - con.setCallBack(this); - con.doDelete(); - } - - public void deleteBullets(ArrayList bullets) { - this.bullets.deleteBullets(bullets); - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java new file mode 100644 index 0000000..bac3a11 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayerModel.java @@ -0,0 +1,225 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import android.content.res.Resources; +import android.view.MotionEvent; +import android.view.View; + +import net.arnx.jsonic.JSON; + +import org.ntlab.radishforandroidstudio.cactusClient.connections.CharacterConnection; +import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.event.PadEvent; +import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; +import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; +import org.ntlab.radishforandroidstudio.framework.listener.PadListener; +import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Universe; +import org.ntlab.radishforandroidstudio.framework.network.CallBack; +import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; +import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; +import org.ntlab.radishforandroidstudio.framework.view3D.Camera3D; +import org.ntlab.radishforandroidstudio.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Material; +import org.ntlab.radishforandroidstudio.java3d.Vector3d; + +import java.util.ArrayList; + +public class OwnPlayerModel implements PadListener, GameBaseModel, CallBack { + private boolean isPadTouched = false; //Padのタッチ判定 + private float touchPadX = 0.0f; + private float touchPadY = 0.0f; + double n = 1.0; + + private OvergroundActor actor; + private Camera3D camera; + private Player player; + private CharacterConnection con; + private int nextConnectRenaimdTime = 0; + private int connectInterval = 300; + private String playerId; + private OwnBulletsModel bullets; + + public OwnPlayerModel(Player player, Resources resources, Universe universe, Camera3D camera, String playerId, String instanceId) { + this.player = player; + setPlayerId(playerId); + setInstanceId(instanceId); + bullets = new OwnBulletsModel(resources, universe, instanceId, playerId); + + // キャラクタの作成 + Appearance ap1 = new Appearance(); + Material m = new Material(); + m.setDiffuseColor(0.0f, 0.3f, 1.0f); + m.setAmbientColor(0.0f, 0.0f, 0.0f); + m.setEmissiveColor(0.0f, 0.0f, 0.0f); + m.setSpecularColor(0.0f, 0.0f, 0.0f); + m.setShininess(5.0f); + ap1.setMaterial(m); + Object3D pochaBody = null; + try { + pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); + Animation3D pochaAnimation = null; //AnimationFactory.loadAnimation("data\\pocha\\walk.wrl"); + actor = new OvergroundActor(pochaBody, pochaAnimation); + actor.setPosition(new Position3D(0.0, 1.0, 0.0)); + universe.place(actor); + } catch (Exception e) { + e.printStackTrace(); + } + + this.camera = camera; + camera.setViewPoint(actor.getPosition().add(0.0, 1.5, 0.0)); + camera.setViewLine(actor.getDirection()); + camera.setFieldOfView(1.5); + camera.setBackClipDistance(10000.0); + updateCamera(n); + } + + public void setPlayerId(String id) { + playerId = id; + } + + public void updateCamera(double n) { + Vector3d charaVector3d = actor.getDirection(); + charaVector3d.normalize();//キャラの向きを単位ベクトルに + camera.setViewPoint(actor.getPosition().add(5.0 * charaVector3d.getX(), charaVector3d.getY() + 5.5 - n, 5.0 * charaVector3d.getZ()));//視点 + camera.setViewLine(new Vector3d(-5.0 * charaVector3d.getX(), charaVector3d.getY() - 2.5 + n, -5.0 * charaVector3d.getZ()));//視線 + } + + /** + * パッドを動かしたときのイベント処理 + * + * @param event イベントの情報 + * @return + */ + @Override + public boolean onEvent(PadEvent event) { + Vector3d charaVector3d = actor.getDirection(); + charaVector3d.normalize();//キャラの向きを単位ベクトルに + MotionEvent motionEvent = event.getMotionEvent(); + + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN || motionEvent.getAction() == MotionEvent.ACTION_MOVE) { + isPadTouched = true; + touchPadX = (float) (Math.cos(event.getAngle()) * event.getLength()); + touchPadY = (float) (Math.sin(event.getAngle()) * event.getLength()); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { + Velocity3D vel = actor.getVelocity(); + vel.setX(0); + vel.setY(0); + actor.setVelocity(vel); + isPadTouched = false; + } + return false; + } + + @Override + public void update(double interval) { + updateCamera(n); + Velocity3D vel = actor.getVelocity(); + Vector3d actorVec = actor.getDirection(); + bullets.setPosition(actor.getPosition()); + bullets.setAngle(((Solid3D) (actor.getBody())).getQuaternion()); + + if (isPadTouched) { + Vector3d up = new Vector3d(0, 1, 0); + Vector3d total = new Vector3d(); + Vector3d right = new Vector3d(); + + right.cross(actorVec, up); + + Vector3d touchXVec = right.clone(); + Vector3d touchYVec = actorVec.clone(); + + touchXVec.scale(touchPadX * -5); + touchYVec.scale(touchPadY * 5); + + total.add(touchXVec); + total.add(touchYVec); + total.y = vel.getY(); + + vel.setVector3d(total); + actor.setVelocity(vel); + + } else { + vel.setX(0.0); + vel.setZ(0.0); + actor.setVelocity(vel); + } + + nextConnectRenaimdTime -= interval; + if (nextConnectRenaimdTime <= 0) { + nextConnectRenaimdTime = connectInterval; + sendPlayerInfo(); + } + } + + public void sendPlayerInfo() { + con = new CharacterConnection(playerId); + con.setCallBack(this); + + Quaternion3D q = ((Solid3D) (actor.getBody())).getQuaternion(); + player.setPosition(actor.getPosition()); + player.setAngle(q); + + JSON json = new JSON(); + con.addFormParam("characterID", player.getCharacterID()); + con.addFormParam("cameraState", json.encode(player.getCameraState())); + con.addFormParam("position", json.encode(player.getPosition())); + con.addFormParam("animationClassToStart", json.encode(player.getEmoteState())); + con.addFormParam("angle", "{ \"x\":" + q.getX() + ", \"y\":" + q.getY() + ", \"z\":" + q.getZ() + ", \"w\":" + q.getW() + "}"); + con.doPut(); + } + + @Override + public void setInstanceId(String id) { + player.setInstanceID(id); + } + + @Override + public void onResponse(String response) { + + } + + public void jump() { + if (actor.isOnGround()) { + Velocity3D vel = actor.getVelocity(); + vel.setY(vel.getY() + 5); + actor.setVelocity(vel); + System.out.print("Jumpしました。"); + } else { + System.out.print("地に足がついてない。"); + } + System.out.print("onClick押されましたよ。"); + } + + public void changeViewpoint(float eyeX, float eyeY) { + actor.rotY(0.1 * (0.5f - eyeX)); + if (n <= 5 && n >= 0) { + n += (0.5f - eyeY); + } else if (n > 5) { + n = 5; + } else if (n < 0) { + n = 0; + } + } + + public OwnBulletsModel getBulletsModel() { + return bullets; + } + + public boolean onTouch(View v, MotionEvent event) { + System.out.println("RWTUIFragment touch"); + return false; + } + + public void logout() { + con = new CharacterConnection(playerId); + con.setCallBack(this); + con.doDelete(); + } + + public void deleteBullets(ArrayList bullets) { + this.bullets.deleteBullets(bullets); + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java index 9f3baca..74b2bb6 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/views/PlayerFragment.java @@ -12,17 +12,16 @@ import android.widget.Button; import org.ntlab.radishforandroidstudio.R; -import org.ntlab.radishforandroidstudio.cactusClient.connections.ObjectsConnection; -import org.ntlab.radishforandroidstudio.cactusClient.models.BulletsManager; +import org.ntlab.radishforandroidstudio.cactusClient.models.BulletsModel; import org.ntlab.radishforandroidstudio.cactusClient.models.CactusModels; import org.ntlab.radishforandroidstudio.cactusClient.models.MovableObjectModel; -import org.ntlab.radishforandroidstudio.cactusClient.models.Object; import org.ntlab.radishforandroidstudio.cactusClient.models.OtherPlayerCharactersModel; -import org.ntlab.radishforandroidstudio.cactusClient.models.OwnPlayer; +import org.ntlab.radishforandroidstudio.cactusClient.models.OwnBulletsModel; +import org.ntlab.radishforandroidstudio.cactusClient.models.OwnPlayerModel; import org.ntlab.radishforandroidstudio.cactusClient.models.Player; import org.ntlab.radishforandroidstudio.framework.RWT.RWTPad; +import org.ntlab.radishforandroidstudio.framework.RWT.RWTShotButton; import org.ntlab.radishforandroidstudio.framework.RWT.RWTUIFragment; -import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; import org.ntlab.radishforandroidstudio.framework.gameMain.RealTime3DFragment; import org.ntlab.radishforandroidstudio.framework.model3D.BaseObject3D; import org.ntlab.radishforandroidstudio.framework.physics.Ground; @@ -36,10 +35,8 @@ import org.ntlab.radishforandroidstudio.java3d.Vector3f; public class PlayerFragment extends RealTime3DFragment { - RWTPad pad = null; - private OwnPlayer player; - private OtherPlayerCharactersModel otherPlayerCharactersModel; - private BulletsManager bulletsManager; + private OwnPlayerModel player; + private OwnBulletsModel ownBulletsModel; private MovableObjectModel movableObjectModel; RWTUIFragment f = null; @@ -98,16 +95,18 @@ // プレイヤーの作成とインスタンスIDのセット String playerId = bundle.getString("playerId"); String instanceId = bundle.getString("instanceId"); - player = new OwnPlayer((Player) bundle.getSerializable("player"), getResources(), universe, camera, playerId, instanceId); + player = new OwnPlayerModel((Player) bundle.getSerializable("player"), getResources(), universe, camera, playerId, instanceId); + ownBulletsModel = player.getBulletsModel(); modelManager.addModel(player); + modelManager.addModel(ownBulletsModel); - otherPlayerCharactersModel = new OtherPlayerCharactersModel(this, universe); + OtherPlayerCharactersModel otherPlayerCharactersModel = new OtherPlayerCharactersModel(this, universe); otherPlayerCharactersModel.setPlayerId(playerId); modelManager.addModel(otherPlayerCharactersModel); - bulletsManager = new BulletsManager(this.getResources(), universe); - bulletsManager.setPlayerId(playerId); - modelManager.addModel(bulletsManager); + BulletsModel bulletsModel = new BulletsModel(this.getResources(), universe); + bulletsModel.setPlayerId(playerId); + modelManager.addModel(bulletsModel); //object movableObjectModel = new MovableObjectModel(this, universe, instanceId); @@ -143,12 +142,6 @@ protected void progress(long interval) { super.progress(interval); - Button jumpButton = (Button) getActivity().findViewById(R.id.Button); - jumpButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - player.jump(); - } - }); if (isTouched) { player.changeViewpoint(touchX, touchY); isTouched = false; @@ -168,8 +161,18 @@ } public void onCreateFragmentEvent(RWTUIFragment f) { - pad = (RWTPad) f.findViewById(org.ntlab.radishforandroidstudio.R.id.pad); + RWTPad pad = (RWTPad) f.findViewById(org.ntlab.radishforandroidstudio.R.id.pad); pad.addListener(player); + + RWTShotButton shotButton = (RWTShotButton) f.findViewById(org.ntlab.radishforandroidstudio.R.id.bulletShot); + shotButton.addListener(ownBulletsModel); + + Button jumpButton = (Button) f.findViewById(org.ntlab.radishforandroidstudio.R.id.Button); + jumpButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + player.jump(); + } + }); } public void logout() { diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java index cbf951e..6882e30 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTCameraController.java @@ -27,8 +27,4 @@ return true; } - - public void addListener(PadListener listener) { - PadSubject.getInstance().addListener(listener); - } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java index d232c13..52a1b63 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java @@ -21,8 +21,8 @@ */ public class RWTPad extends RWTView { - private MotionEvent touchInfo = null; - private Point circlePos = null; + private Point circlePos; + private PadSubject subject = new PadSubject(); public RWTPad(Context context) { super(context); @@ -42,8 +42,6 @@ @Override public void init() { super.init(); - // Listenerサンプル - addListener(new SamplePadListener()); } /** @@ -101,9 +99,9 @@ circlePos.y = (int)(fixLen * Math.sin(angle) * maxLen + maxLen); } - touchInfo = event; + MotionEvent touchInfo = event; PadEvent padEvent = new PadEvent(event, fixLen, angle); - PadSubject.getInstance().notifyListeners(padEvent); + subject.notifyListeners(padEvent); if (event.getAction() == MotionEvent.ACTION_UP) { circlePos.x = getSize().x / 2; @@ -119,6 +117,6 @@ * @param listener */ public void addListener(PadListener listener) { - PadSubject.getInstance().addListener(listener); + subject.addListener(listener); } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTShotButton.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTShotButton.java index 0b1181e..e1ccd01 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTShotButton.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTShotButton.java @@ -7,9 +7,13 @@ import org.ntlab.radishforandroidstudio.cactusClient.factory.NormalBulletFactory; import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; +import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; +import org.ntlab.radishforandroidstudio.framework.listener.PadListener; import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; public class RWTShotButton extends RWTButton { + private BulletShotSubject subject = new BulletShotSubject(); + public RWTShotButton(Context context) { super(context); } @@ -31,10 +35,18 @@ if (event.getAction() == MotionEvent.ACTION_DOWN) { NormalBulletFactory f = new NormalBulletFactory(); BulletShotEvent e = new BulletShotEvent(event, f.create(getResources())); - BulletShotSubject.getInstance().notifyListeners(e); + subject.notifyListeners(e); System.out.println("shot!"); } invalidate(); return true; } + + /** + * 弾発射ボタン操作時に発生するイベントのリスナを追加する + * @param listener + */ + public void addListener(BulletShotListener listener) { + subject.addListener(listener); + } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java index dead85d..2347dca 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTUIFragment.java @@ -7,20 +7,16 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import org.ntlab.radishforandroidstudio.R; -import org.ntlab.radishforandroidstudio.cactusClient.models.OwnPlayer; import org.ntlab.radishforandroidstudio.cactusClient.views.PlayerFragment; import org.ntlab.radishforandroidstudio.framework.event.PadEvent; import org.ntlab.radishforandroidstudio.framework.listener.PadListener; -import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; import static android.view.View.*; -import static org.ntlab.radishforandroidstudio.framework.subject.PadSubject.own; -public class RWTUIFragment extends Fragment implements OnTouchListener,PadListener { +public class RWTUIFragment extends Fragment implements OnTouchListener { PlayerFragment listener = null; View v = null; @@ -36,14 +32,12 @@ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - v = inflater.inflate(R.layout.ui_fragment, container, false); - RWTPad pad = v.findViewById(R.id.pad); - pad.addListener(this); + v = inflater.inflate(R.layout.ui_fragment, null); if (listener != null) { listener.onCreateFragmentEvent(this); } - return inflater.inflate(R.layout.ui_fragment, null); + return v; } @Override @@ -52,11 +46,6 @@ return false; } - @Override - public boolean onEvent(PadEvent event) { - return false; - } - public View findViewById(int id) { return v.findViewById(id); } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java index 04a1215..28eb470 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/model3D/Universe.java @@ -121,6 +121,7 @@ public void place(Object id, Object3D obj) { objMap.put(id, obj); + place(obj); } /** diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/AbstractMySubject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/AbstractMySubject.java new file mode 100644 index 0000000..dfe411e --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/AbstractMySubject.java @@ -0,0 +1,59 @@ +package org.ntlab.radishforandroidstudio.framework.subject; + +import android.view.InputEvent; + +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; + +import org.ntlab.radishforandroidstudio.framework.event.MyEvent; +import org.ntlab.radishforandroidstudio.framework.listener.MyListener; + +/** + * Listenerへイベントを通知するクラス + * + * @author s.iwatani + * @param リスナの型 + * @param イベントを保存する型 + */ +public abstract class AbstractMySubject { + protected Set listenerSet = new CopyOnWriteArraySet<>(); + + public AbstractMySubject() {} + + /** + * リスナを追加する + * + * @author s.iwatani + * @param listener + */ + public void addListener(ListenerType listener) { + listenerSet.add(listener); + } + + /** + * 指定したリスナを削除する + * + * @author s.iwatani + * @param listener + */ + public void removeListener(ListenerType listener) { listenerSet.remove(listener); }; + + /** + * リスナをすべて削除する + * + * @author s.iwatani + */ + public void clearListener() { listenerSet.clear(); }; + + /** + * イベントを通知する + * + * @author s.iwatani + * @param event イベントの情報を保存したもの + */ + public void notifyListeners(EventType event) { + for (ListenerType listener : listenerSet) { + listener.onEvent(event); + } + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/BulletShotSubject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/BulletShotSubject.java index be4ec95..4784a83 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/BulletShotSubject.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/BulletShotSubject.java @@ -3,10 +3,4 @@ import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; -public class BulletShotSubject extends MySubject { - public final static BulletShotSubject own = new BulletShotSubject(); - - private BulletShotSubject() { super(); } - - public static BulletShotSubject getInstance() { return own; } -} +public class BulletShotSubject extends AbstractMySubject {} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java deleted file mode 100644 index 2ec1f31..0000000 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/MySubject.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ntlab.radishforandroidstudio.framework.subject; - -import android.view.InputEvent; - -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; - -import org.ntlab.radishforandroidstudio.framework.event.MyEvent; -import org.ntlab.radishforandroidstudio.framework.listener.MyListener; - -/** - * Listenerへイベントを通知するクラス - * - * @author s.iwatani - * @param リスナの型 - * @param イベントを保存する型 - */ -public abstract class MySubject { - protected Set listenerSet = new CopyOnWriteArraySet<>(); - - public MySubject() {} - - /** - * リスナを追加する - * - * @author s.iwatani - * @param listener - */ - public void addListener(ListenerType listener) { - listenerSet.add(listener); - } - - /** - * 指定したリスナを削除する - * - * @author s.iwatani - * @param listener - */ - public void removeListener(ListenerType listener) { listenerSet.remove(listener); }; - - /** - * リスナをすべて削除する - * - * @author s.iwatani - */ - public void clearListener() { listenerSet.clear(); }; - - /** - * イベントを通知する - * - * @author s.iwatani - * @param event イベントの情報を保存したもの - */ - public void notifyListeners(EventType event) { - for (ListenerType listener : listenerSet) { - listener.onEvent(event); - } - } -} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java index 441dad9..6b6706f 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/PadSubject.java @@ -3,14 +3,4 @@ import org.ntlab.radishforandroidstudio.framework.event.PadEvent; import org.ntlab.radishforandroidstudio.framework.listener.PadListener; -// 実装いらない説 -// Listener側と同じようにC++のテンプレート特殊化的なことだけして中身なしにするかも -public class PadSubject extends MySubject { - public final static PadSubject own = new PadSubject(); - - private PadSubject() { super(); } - - public static PadSubject getInstance() { - return own; - } -} +public class PadSubject extends AbstractMySubject {}