diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java new file mode 100644 index 0000000..f72b651 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/BulletFactory.java @@ -0,0 +1,33 @@ +package org.ntlab.radishforandroidstudio.cactusClient.factory; + +import android.content.res.Resources; + +import org.ntlab.radishforandroidstudio.cactusClient.models.Bullet; +import org.ntlab.radishforandroidstudio.framework.model3D.ModelFactory; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.physics.Velocity3D; +import org.ntlab.radishforandroidstudio.java3d.Appearance; +import org.ntlab.radishforandroidstudio.java3d.Material; +import org.ntlab.radishforandroidstudio.java3d.Vector3d; + +public abstract class BulletFactory { + public final Bullet create(Resources resources) { + + Appearance ap1 = createAppearance(); + ap1.setMaterial(createMaterial()); + + Object3D pochaBody = null; + try { + pochaBody = ModelFactory.loadModel(resources, getModelName(), ap1).createObject(); + } catch (Exception e) { + e.printStackTrace(); + } + + Bullet b = new Bullet(pochaBody, null); + return b; + } + + protected abstract Material createMaterial(); + protected Appearance createAppearance() { return new Appearance(); } + protected abstract String getModelName(); +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java new file mode 100644 index 0000000..a315c50 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/factory/NormalBulletFactory.java @@ -0,0 +1,21 @@ +package org.ntlab.radishforandroidstudio.cactusClient.factory; + +import org.ntlab.radishforandroidstudio.java3d.Material; + +public class NormalBulletFactory extends BulletFactory { + @Override + protected Material createMaterial() { + 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); + return mat; + } + + @Override + protected String getModelName() { + return "pocha.stl"; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java index fde346a..6da721d 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/Bullet.java @@ -11,9 +11,13 @@ 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.network.CallBack; 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; @@ -96,8 +100,9 @@ @Override - public void update(double interval) { -// // サーバに弾を作成 + final public void update(double interval) { + progress(interval); + // // サーバに弾を作成 // if (!isCreatedOnServer && !instanceId.equals("") && !playerId.equals("")) { // BulletCreateConnection con = new BulletCreateConnection(instanceId, playerId); // // set parameter @@ -116,6 +121,18 @@ // } } + public void progress(double interval) { + + } + + public void init(Position3D pos, Quaternion3D angle) { + setPosition(pos); + Vector3d v = new Vector3d(1.f, 0, 0); + v = v.rotate(angle); + setVelocity(new Velocity3D(v)); + } + + @Override public void setInstanceId(String id) { instanceId = id; 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 index 0a13873..8b913e7 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/BulletsManager.java @@ -12,8 +12,10 @@ 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.framework.physics.Velocity3D; import org.ntlab.radishforandroidstudio.java3d.Appearance; import org.ntlab.radishforandroidstudio.java3d.Material; +import org.ntlab.radishforandroidstudio.java3d.Vector3d; import java.util.ArrayList; import java.util.HashMap; @@ -25,7 +27,7 @@ private Resources resources; private BulletGetConnection con; private int nextConnectRenaimdTime = 0; - private int connectInterval = 100; + static final private int CONNECT_INTERVAL = 100; private Map visibleBullets = new HashMap<>(); private Map playerVisibleBullets = new HashMap<>(); private String instanceId; @@ -33,6 +35,10 @@ private Set bulletsSet; + public enum BulletType { + Normal + } + public BulletsManager(Resources fragment, Universe universe) { this.universe = universe; this.resources = fragment; @@ -56,7 +62,7 @@ public void update(double interval) { nextConnectRenaimdTime -= interval; if (nextConnectRenaimdTime <= 0) { -// nextConnectRenaimdTime = connectInterval; +// nextConnectRenaimdTime = CONNECT_INTERVAL; // con = new BulletGetConnection(instanceId); // con.setCallBack(this); // con.doGet(); diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/NormalBullet.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/NormalBullet.java new file mode 100644 index 0000000..5cbcc23 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/NormalBullet.java @@ -0,0 +1,16 @@ +package org.ntlab.radishforandroidstudio.cactusClient.models; + +import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Object3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.physics.Solid3D; + +public class NormalBullet extends Bullet { + public NormalBullet(Object3D body, Animation3D animation) { + super(body, animation); + } + + public NormalBullet(Solid3D body, Animation3D animation) { + super(body, animation); + } +} 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 index f007dbb..52bb272 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnBullets.java @@ -3,14 +3,17 @@ import android.content.res.Resources; import org.ntlab.radishforandroidstudio.framework.animation.Animation3D; +import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel; import org.ntlab.radishforandroidstudio.framework.gameMain.OvergroundActor; +import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener; 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.physics.Velocity3D; +import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; import org.ntlab.radishforandroidstudio.java3d.Appearance; import org.ntlab.radishforandroidstudio.java3d.Material; import org.ntlab.radishforandroidstudio.java3d.Vector3d; @@ -18,13 +21,15 @@ import java.util.ArrayList; import java.util.Iterator; -public class OwnBullets implements GameBaseModel { - ArrayList bullets = new ArrayList<>(); - String playerId; - String instanceId; - Resources resources; - Universe universe; - CactusModels cactusModels; +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; @@ -33,34 +38,16 @@ setInstanceId(instanceId); setPlayerId(playerId); + + BulletShotSubject.getInstance().addListener(this); } - public void createBullet(Position3D pos, Quaternion3D angle) { - 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); + public void setPosition(Position3D pos) { + playerPos = pos; + } - Object3D pochaBody = null; - try { - pochaBody = ModelFactory.loadModel(resources, "pocha.stl", ap1).createObject(); - pochaBody.scale(0.5); - } catch (Exception e) { - e.printStackTrace(); - } - Bullet b = new Bullet(pochaBody, null); - b.setPosition(pos); - - Vector3d v = new Vector3d(1.f, 0, 0); - v = v.rotate(angle); - b.setVelocity(new Velocity3D(v)); - bullets.add(b); - universe.place(b); - cactusModels.addModel(b); + public void setAngle(Quaternion3D angle) { + playerAngle = angle; } public void sendDeleteBulletForServer(Bullet bullet) { @@ -105,4 +92,23 @@ public void setPlayerId(String id) { playerId = id; } + + /** + * 弾作成のイベント受け + * + * @param event イベントの情報 + * @return + */ + @Override + public boolean onEvent(BulletShotEvent event) { + if (playerPos == null || playerAngle == null) { + return false; + } + Bullet b = event.getBullet(); + 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/OwnPlayer.java b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java index 89a2ae5..ef0bc3f 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/cactusClient/models/OwnPlayer.java @@ -39,6 +39,7 @@ private int connectInterval = 300; private String playerId; private OwnBullets bullets; + boolean b = false; public OwnPlayer(Player player, Resources resources, Universe universe, Camera3D camera, String playerId, String instanceId) { this.player = player; @@ -112,6 +113,8 @@ @Override public void update(double interval) { updateCamera(); + bullets.setPosition(actor.getPosition()); + bullets.setAngle(((Solid3D)(actor.getBody())).getQuaternion()); if (isTouched) { Velocity3D vel = actor.getVelocity(); @@ -121,11 +124,6 @@ } nextConnectRenaimdTime -= interval; - - // とりあえず一定時間ごとに打つ - if (nextConnectRenaimdTime <= 0) { - bullets.createBullet(player.getPosition(), player.getAngle()); - } if (nextConnectRenaimdTime <= 0) { nextConnectRenaimdTime = connectInterval; sendPlayerInfo(); diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTButton.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTButton.java new file mode 100644 index 0000000..1a3089d --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTButton.java @@ -0,0 +1,19 @@ +package org.ntlab.radishforandroidstudio.framework.RWT; + +import android.content.Context; +import android.support.v7.widget.AppCompatButton; +import android.util.AttributeSet; + +public class RWTButton extends AppCompatButton { + public RWTButton(Context context) { + super(context); + } + + public RWTButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public RWTButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } +} 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 new file mode 100644 index 0000000..866dee8 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTShotButton.java @@ -0,0 +1,37 @@ +package org.ntlab.radishforandroidstudio.framework.RWT; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import org.ntlab.radishforandroidstudio.cactusClient.factory.NormalBulletFactory; +import org.ntlab.radishforandroidstudio.cactusClient.models.NormalBullet; +import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; +import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject; + +public class RWTShotButton extends RWTButton { + public RWTShotButton(Context context) { + super(context); + } + + public RWTShotButton(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public RWTShotButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + // 弾の種類を取得 + // 今は無し + + // 弾のモデルを作成 + NormalBulletFactory f = new NormalBulletFactory(); + BulletShotEvent e = new BulletShotEvent(event, f.create(getResources())); + BulletShotSubject.getInstance().notifyListeners(e); + return true; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java new file mode 100644 index 0000000..d3f4b1c --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/BulletShotEvent.java @@ -0,0 +1,18 @@ +package org.ntlab.radishforandroidstudio.framework.event; + +import android.view.MotionEvent; + +import org.ntlab.radishforandroidstudio.cactusClient.models.Bullet; + +public class BulletShotEvent extends MyEvent { + private Bullet b; + + public BulletShotEvent(MotionEvent e, Bullet b) { + super(e); + this.b = b; + } + + public Bullet getBullet() { + return b; + } +} diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java index 3b81015..a28f041 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java @@ -3,8 +3,6 @@ import android.view.MotionEvent; public class PadEvent extends MyEvent{ - private MotionEvent e; - /** * パッドを倒した距離 * 範囲は 0<=length<=1 diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java index c9b2b14..c9d94e9 100644 --- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/gameMain/GameBaseModelManager.java @@ -6,6 +6,7 @@ public abstract class GameBaseModelManager implements GameBaseModel { protected ArrayList models = new ArrayList<>(); + protected ArrayList nextAddModels = new ArrayList<>(); public void setFragment(RealTime3DFragment fragment) { this.fragment = fragment; @@ -28,7 +29,7 @@ * @param model 追加したいGameBaseModel */ public void addModel(GameBaseModel model) { - models.add(model); + nextAddModels.add(model); } /** @@ -42,5 +43,9 @@ for (GameBaseModel model: models) { model.update(interval); } + + for (GameBaseModel model : nextAddModels) { + models.add(model); + } } } diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/BulletShotListener.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/BulletShotListener.java new file mode 100644 index 0000000..965d578 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/BulletShotListener.java @@ -0,0 +1,5 @@ +package org.ntlab.radishforandroidstudio.framework.listener; + +import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent; + +public interface BulletShotListener extends MyListener {} 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 new file mode 100644 index 0000000..be4ec95 --- /dev/null +++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/subject/BulletShotSubject.java @@ -0,0 +1,12 @@ +package org.ntlab.radishforandroidstudio.framework.subject; + +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; } +} diff --git a/app/src/main/res/layout/ui_fragment.xml b/app/src/main/res/layout/ui_fragment.xml index 6a89e34..22f656a 100644 --- a/app/src/main/res/layout/ui_fragment.xml +++ b/app/src/main/res/layout/ui_fragment.xml @@ -13,4 +13,15 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" /> + + \ No newline at end of file