diff --git a/src/main/java/cactusServer/entities/Bullet.java b/src/main/java/cactusServer/entities/Bullet.java new file mode 100644 index 0000000..c81b447 --- /dev/null +++ b/src/main/java/cactusServer/entities/Bullet.java @@ -0,0 +1,49 @@ +package cactusServer.entities; + +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; + +public class Bullet extends Entity3D { + private String playerID; + private Position3D position; + private Quaternion3D angle; + + private Bullet() { + // JSON�G���R�[�h���̌Ăяo���p + } + + public Bullet(String playerID, Position3D position, Quaternion3D angle) { + this.playerID = playerID; + this.position = position; + this.angle = angle; + } + + public String getPlayerID() { + return playerID; + } + + public Position3D getPosition() { + return position; + } + + public Quaternion3D getAngle() { + return angle; + } + + public void setPlayerID(String playerID) { + this.playerID = playerID; + } + + public void setPosition(Position3D positon) { + this.position = positon; + } + + public void setAngle(Quaternion3D angle) { + this.angle = angle; + } + + public void update(Position3D position, Quaternion3D angle) { + setPosition(position); + setAngle(angle); + } +} diff --git a/src/main/java/cactusServer/entities/Instance.java b/src/main/java/cactusServer/entities/Instance.java index 5874cce..8d850bb 100644 --- a/src/main/java/cactusServer/entities/Instance.java +++ b/src/main/java/cactusServer/entities/Instance.java @@ -36,6 +36,7 @@ private HashMap areaMap = new HashMap<>(); private HashMap objMap = new HashMap<>(); private HashMap characterMap = new HashMap<>(); + private HashMap> bulletMap = new HashMap<>(); @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12; @@ -116,6 +117,10 @@ public Character getCharacter(String characterId) { return characterMap.get(characterId); } + + public HashMap> getBullets() { + return bulletMap; + } public void setName(String name) { this.name = name; @@ -161,6 +166,15 @@ returnedMap.put(id, character); return returnedMap; } + + public HashMapcreateBullet(String playerID, String bulletID, Position3D position, Quaternion3D angle) { + if (!bulletMap.containsKey(playerID)) { + bulletMap.put(playerID, new HashMap()); + } + HashMap map = bulletMap.get(playerID); + map.put(bulletID, new Bullet(playerID, position, angle)); + return map; + } public Instance update(Instance.State state) { setState(state); diff --git a/src/main/java/cactusServer/resources/BulletsRest.java b/src/main/java/cactusServer/resources/BulletsRest.java new file mode 100644 index 0000000..74c9da3 --- /dev/null +++ b/src/main/java/cactusServer/resources/BulletsRest.java @@ -0,0 +1,78 @@ +package cactusServer.resources; + +import java.util.HashMap; + +import javax.ws.rs.DELETE; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; + +import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; +import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D; + +import cactusServer.entities.Bullet; +import cactusServer.entities.Instance; +import cactusServer.models.Instances; +import net.arnx.jsonic.JSON; + +@Path("/instances/{instanceId}/bullets") +public class BulletsRest { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String getBullets(@PathParam("instanceId") String instanceId) { + return JSON.encode(Instances.getInstance().getInstance(instanceId).getBullets()); + } + + @Path("/{playerId}") + @POST + @Produces(MediaType.TEXT_PLAIN) + public String createBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId, + @FormParam("bulletId") String bulletId, @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle) { + Instance instance = Instances.getInstance().getInstance(instanceId); + HashMap idMap = instance.createBullet(playerId, bulletId, position, angle); + HashMap uriMap = new HashMap<>(); + for (String id : idMap.keySet()) { + String uri = (InstancesRest.INSTANCES_URI + "/" + instanceId + "/bullets/") + playerId + "/" + id; + uriMap.put(uri, idMap.get(id)); + } + return JSON.encode(uriMap); + } + + @Path("/{playerId}/{bulletId}") + @PUT + @Produces(MediaType.TEXT_PLAIN) + public String updateBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId, + @PathParam("bulletId") String bulletId, @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle) { + Instance instance = Instances.getInstance().getInstance(instanceId); + HashMap map = instance.getBullets().get(playerId); + if (map != null) { + Bullet bullet = map.get(bulletId); + if (bullet != null) { + bullet.update(position, angle); + } + return JSON.encode(map); + } + throw new WebApplicationException(400); + } + + @Path("/{playerId}/{bulletId}") + @DELETE + @Produces(MediaType.TEXT_PLAIN) + public String destroyBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId, + @PathParam("bulletId") String bulletId) { + Instance instance = Instances.getInstance().getInstance(instanceId); + HashMap map = instance.getBullets().get(playerId); + if (map != null) { + Bullet removedBullet = map.remove(bulletId); + return JSON.encode(removedBullet); + } + throw new WebApplicationException(400); + } +} diff --git a/src/main/java/cactusServer/utils/App.java b/src/main/java/cactusServer/utils/App.java index 2c2aa6c..0eec1bc 100644 --- a/src/main/java/cactusServer/utils/App.java +++ b/src/main/java/cactusServer/utils/App.java @@ -86,6 +86,10 @@ // �_�~�[�I�u�W�F�N�g Instances.getInstance().getInstance("test1").createObject(new Position3D(0, 0, 0), new Velocity3D(), new AngularVelocity3D(), new Quaternion3D(), new Attribute(true, 1), 0); + // �_�~�[�o���b�g + Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId1", new Position3D(), new Quaternion3D()); + Instances.getInstance().getInstance("test1").createBullet("player1", "testBulletId2", new Position3D(), new Quaternion3D()); + // // �m�F�p // String player1Encode = JSON.encode(player1, true); // String player2Encode = JSON.encode(player2, true); diff --git a/src/main/resources/bullet.mtl b/src/main/resources/bullet.mtl new file mode 100644 index 0000000..400983d --- /dev/null +++ b/src/main/resources/bullet.mtl @@ -0,0 +1,8 @@ +# Created by Metasequoia + +newmtl mat1 +Ka 0.70000 0.35980 0.00000 +Kd 0.70000 0.35980 0.00000 +Ks 0.00000 0.00000 0.00000 +Ns 0.00000 + diff --git a/src/main/resources/bullet.obj b/src/main/resources/bullet.obj new file mode 100644 index 0000000..d2df865 --- /dev/null +++ b/src/main/resources/bullet.obj @@ -0,0 +1,434 @@ +# Created by Metasequoia + +mtllib bullet.mtl + +v 0.000000 0.000000 0.000000 +v 0.000000 -0.075890 0.381540 +v 0.269790 -0.075890 0.269790 +v 0.381540 -0.075890 0.000000 +v 0.269790 -0.075890 -0.269790 +v 0.000000 -0.075890 -0.381540 +v -0.269790 -0.075890 -0.269790 +v -0.381540 -0.075890 0.000000 +v -0.269790 -0.075890 0.269790 +v 0.000000 -0.292010 0.704990 +v 0.498500 -0.292010 0.498500 +v 0.704990 -0.292010 0.000000 +v 0.498500 -0.292010 -0.498500 +v 0.000000 -0.292010 -0.704990 +v -0.498500 -0.292010 -0.498500 +v -0.704990 -0.292010 0.000000 +v -0.498500 -0.292010 0.498500 +v 0.000000 -0.615460 0.921110 +v 0.651320 -0.615460 0.651320 +v 0.921110 -0.615460 0.000000 +v 0.651320 -0.615460 -0.651320 +v 0.000000 -0.615460 -0.921110 +v -0.651320 -0.615460 -0.651320 +v -0.921110 -0.615460 0.000000 +v -0.651320 -0.615460 0.651320 +v 0.000000 -0.997000 0.997000 +v 0.704990 -0.997000 0.704990 +v 0.997000 -0.997000 0.000000 +v 0.704990 -0.997000 -0.704990 +v 0.000000 -0.997000 -0.997000 +v -0.704990 -0.997000 -0.704990 +v -0.997000 -0.997000 0.000000 +v -0.704990 -0.997000 0.704990 +v 0.000000 -1.378540 0.921110 +v 0.651320 -1.378540 0.651320 +v 0.921110 -1.378540 0.000000 +v 0.651320 -1.378540 -0.651320 +v 0.000000 -1.378540 -0.921110 +v -0.651320 -1.378540 -0.651320 +v -0.921110 -1.378540 0.000000 +v -0.651320 -1.378540 0.651320 +v 0.000000 -1.701990 0.704990 +v 0.498500 -1.701990 0.498500 +v 0.704990 -1.701990 0.000000 +v 0.498500 -1.701990 -0.498500 +v 0.000000 -1.701990 -0.704990 +v -0.498500 -1.701990 -0.498500 +v -0.704990 -1.701990 0.000000 +v -0.498500 -1.701990 0.498500 +v 0.000000 -1.918110 0.381540 +v 0.269790 -1.918110 0.269790 +v 0.381540 -1.918110 0.000000 +v 0.269790 -1.918110 -0.269790 +v 0.000000 -1.918110 -0.381540 +v -0.269790 -1.918110 -0.269790 +v -0.381540 -1.918110 0.000000 +v -0.269790 -1.918110 0.269790 +v 0.000000 -1.994000 0.000000 +v 0.000000 -0.431180 0.300000 +v 0.212130 -0.431180 0.212130 +v 0.300000 -0.431180 0.000000 +v 0.212130 -0.431180 -0.212130 +v 0.000000 -0.431180 -0.300000 +v -0.212130 -0.431180 -0.212130 +v -0.300000 -0.431180 0.000000 +v -0.212130 -0.431180 0.212130 +v 0.000000 3.482500 0.000000 +v 0.000000 -0.431180 0.000000 +v -0.658870 -0.636650 -0.035970 +v -0.507720 -0.471240 -0.086110 +v -0.376940 -0.420460 -0.267880 +v -0.343150 -0.514060 -0.474810 +v -0.426140 -0.697210 -0.585680 +v -0.577290 -0.862620 -0.535540 +v -0.708060 -0.913400 -0.353770 +v -0.741850 -0.819800 -0.146840 +v -3.431740 1.529130 -1.775940 +v -0.542500 -0.666930 -0.310830 +v 0.179920 -0.941720 -0.416710 +v 0.309890 -0.861670 -0.245190 +v 0.386550 -0.946790 -0.046200 +v 0.364990 -1.147240 0.063700 +v 0.257850 -1.345590 0.020120 +v 0.127880 -1.425650 -0.151410 +v 0.051220 -1.340520 -0.350400 +v 0.072780 -1.140070 -0.460290 +v 3.424260 -2.478380 -2.004110 +v 0.218880 -1.143660 -0.198300 +v 0.266760 -1.273500 -0.052830 +v 0.223180 -1.149770 0.135620 +v 0.050450 -1.139140 0.286520 +v -0.150250 -1.247840 0.311480 +v -0.261360 -1.412190 0.195870 +v -0.217790 -1.535920 0.007420 +v -0.045050 -1.546550 -0.143480 +v 0.155650 -1.437850 -0.168440 +v 1.752530 -4.069880 2.266570 +v 0.002700 -1.342840 0.071520 +v -0.100850 -0.732410 0.209110 +v -0.293310 -0.654430 0.111140 +v -0.491700 -0.749180 0.044940 +v -0.579810 -0.961170 0.049290 +v -0.506030 -1.166200 0.121640 +v -0.313570 -1.244190 0.219620 +v -0.115180 -1.149430 0.285820 +v -0.027060 -0.937440 0.281470 +v -1.820020 -0.246310 3.704120 +v -0.303440 -0.949300 0.165380 +v -0.446350 -1.267160 -0.436180 +v -0.249100 -1.193510 -0.527760 +v -0.031880 -1.267900 -0.526790 +v 0.078070 -1.446760 -0.433820 +v 0.016330 -1.625320 -0.303330 +v -0.180920 -1.698970 -0.211750 +v -0.398140 -1.624570 -0.212730 +v -0.508090 -1.445710 -0.305690 +v -0.922720 -3.554900 -3.589940 +v -0.215010 -1.446240 -0.369750 +v 0.505300 -0.567430 -0.288140 +v 0.435810 -0.375800 -0.182450 +v 0.433330 -0.302090 0.034990 +v 0.499320 -0.389470 0.236810 +v 0.595120 -0.586760 0.304780 +v 0.664610 -0.778390 0.199090 +v 0.667090 -0.852100 -0.018350 +v 0.601090 -0.764720 -0.220170 +v 4.106720 0.981750 -0.479630 +v 0.550200 -0.577100 0.008320 +v -0.158470 -1.033680 0.483780 +v -0.300630 -0.918510 0.345050 +v -0.402890 -0.962850 0.144310 +v -0.405360 -1.140730 -0.000850 +v -0.306580 -1.347960 -0.005400 +v -0.164420 -1.463140 0.133330 +v -0.062160 -1.418800 0.334080 +v -0.059690 -1.240910 0.479230 +v -3.305630 -2.697270 2.137480 +v -0.232520 -1.190820 0.239190 +# 138 vertices + +vt 0.06250 0.00000 +vt 0.12500 0.12500 +vt 0.00000 0.12500 +vt 0.18750 0.00000 +vt 0.25000 0.12500 +vt 0.31250 0.00000 +vt 0.37500 0.12500 +vt 0.43750 0.00000 +vt 0.50000 0.12500 +vt 0.56250 0.00000 +vt 0.62500 0.12500 +vt 0.68750 0.00000 +vt 0.75000 0.12500 +vt 0.81250 0.00000 +vt 0.87500 0.12500 +vt 0.93750 0.00000 +vt 1.00000 0.12500 +vt 0.12500 0.25000 +vt 0.00000 0.25000 +vt 0.25000 0.25000 +vt 0.37500 0.25000 +vt 0.50000 0.25000 +vt 0.62500 0.25000 +vt 0.75000 0.25000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.12500 0.37500 +vt 0.00000 0.37500 +vt 0.25000 0.37500 +vt 0.37500 0.37500 +vt 0.50000 0.37500 +vt 0.62500 0.37500 +vt 0.75000 0.37500 +vt 0.87500 0.37500 +vt 1.00000 0.37500 +vt 0.12500 0.50000 +vt 0.00000 0.50000 +vt 0.25000 0.50000 +vt 0.37500 0.50000 +vt 0.50000 0.50000 +vt 0.62500 0.50000 +vt 0.75000 0.50000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.12500 0.62500 +vt 0.00000 0.62500 +vt 0.25000 0.62500 +vt 0.37500 0.62500 +vt 0.50000 0.62500 +vt 0.62500 0.62500 +vt 0.75000 0.62500 +vt 0.87500 0.62500 +vt 1.00000 0.62500 +vt 0.12500 0.75000 +vt 0.00000 0.75000 +vt 0.25000 0.75000 +vt 0.37500 0.75000 +vt 0.50000 0.75000 +vt 0.62500 0.75000 +vt 0.75000 0.75000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 0.12500 0.87500 +vt 0.00000 0.87500 +vt 0.25000 0.87500 +vt 0.37500 0.87500 +vt 0.50000 0.87500 +vt 0.62500 0.87500 +vt 0.75000 0.87500 +vt 0.87500 0.87500 +vt 1.00000 0.87500 +vt 0.06250 1.00000 +vt 0.18750 1.00000 +vt 0.31250 1.00000 +vt 0.43750 1.00000 +vt 0.56250 1.00000 +vt 0.68750 1.00000 +vt 0.81250 1.00000 +vt 0.93750 1.00000 +vt 0.00000 1.00000 +vt 0.12500 1.00000 +vt 0.12500 0.00000 +vt 0.25000 1.00000 +vt 0.37500 1.00000 +vt 0.25000 0.00000 +vt 0.50000 1.00000 +vt 0.62500 1.00000 +vt 0.37500 0.00000 +vt 0.75000 1.00000 +vt 0.87500 1.00000 +vt 0.50000 0.00000 +vt 1.00000 1.00000 +vt 0.00000 0.00000 +# 93 texture vertices + +usemtl mat1 +f 2/3 3/2 1/1 +f 3/2 4/5 1/4 +f 4/5 5/7 1/6 +f 5/7 6/9 1/8 +f 6/9 7/11 1/10 +f 7/11 8/13 1/12 +f 8/13 9/15 1/14 +f 9/15 2/17 1/16 +f 10/19 11/18 3/2 2/3 +f 11/18 12/20 4/5 3/2 +f 12/20 13/21 5/7 4/5 +f 13/21 14/22 6/9 5/7 +f 14/22 15/23 7/11 6/9 +f 15/23 16/24 8/13 7/11 +f 16/24 17/25 9/15 8/13 +f 17/25 10/26 2/17 9/15 +f 18/28 19/27 11/18 10/19 +f 19/27 20/29 12/20 11/18 +f 20/29 21/30 13/21 12/20 +f 21/30 22/31 14/22 13/21 +f 22/31 23/32 15/23 14/22 +f 23/32 24/33 16/24 15/23 +f 24/33 25/34 17/25 16/24 +f 25/34 18/35 10/26 17/25 +f 26/37 27/36 19/27 18/28 +f 27/36 28/38 20/29 19/27 +f 28/38 29/39 21/30 20/29 +f 29/39 30/40 22/31 21/30 +f 30/40 31/41 23/32 22/31 +f 31/41 32/42 24/33 23/32 +f 32/42 33/43 25/34 24/33 +f 33/43 26/44 18/35 25/34 +f 34/46 35/45 27/36 26/37 +f 35/45 36/47 28/38 27/36 +f 36/47 37/48 29/39 28/38 +f 37/48 38/49 30/40 29/39 +f 38/49 39/50 31/41 30/40 +f 39/50 40/51 32/42 31/41 +f 40/51 41/52 33/43 32/42 +f 41/52 34/53 26/44 33/43 +f 42/55 43/54 35/45 34/46 +f 43/54 44/56 36/47 35/45 +f 44/56 45/57 37/48 36/47 +f 45/57 46/58 38/49 37/48 +f 46/58 47/59 39/50 38/49 +f 47/59 48/60 40/51 39/50 +f 48/60 49/61 41/52 40/51 +f 49/61 42/62 34/53 41/52 +f 50/64 51/63 43/54 42/55 +f 51/63 52/65 44/56 43/54 +f 52/65 53/66 45/57 44/56 +f 53/66 54/67 46/58 45/57 +f 54/67 55/68 47/59 46/58 +f 55/68 56/69 48/60 47/59 +f 56/69 57/70 49/61 48/60 +f 57/70 50/71 42/62 49/61 +f 58/72 51/63 50/64 +f 58/73 52/65 51/63 +f 58/74 53/66 52/65 +f 58/75 54/67 53/66 +f 58/76 55/68 54/67 +f 58/77 56/69 55/68 +f 58/78 57/70 56/69 +f 58/79 50/71 57/70 +f 60/81 67/1 59/80 +f 61/83 67/82 60/81 +f 62/84 67/4 61/83 +f 63/86 67/85 62/84 +f 64/87 67/6 63/86 +f 65/89 67/88 64/87 +f 66/90 67/8 65/89 +f 59/92 67/91 66/90 +f 60/93 59/93 68/93 +f 61/93 60/93 68/93 +f 62/93 61/93 68/93 +f 63/93 62/93 68/93 +f 64/93 63/93 68/93 +f 65/93 64/93 68/93 +f 66/93 65/93 68/93 +f 59/93 66/93 68/93 +f 70/81 77/1 69/80 +f 71/83 77/82 70/81 +f 72/84 77/4 71/83 +f 73/86 77/85 72/84 +f 74/87 77/6 73/86 +f 75/89 77/88 74/87 +f 76/90 77/8 75/89 +f 69/92 77/91 76/90 +f 70/93 69/93 78/93 +f 71/93 70/93 78/93 +f 72/93 71/93 78/93 +f 73/93 72/93 78/93 +f 74/93 73/93 78/93 +f 75/93 74/93 78/93 +f 76/93 75/93 78/93 +f 69/93 76/93 78/93 +f 80/81 87/1 79/80 +f 81/83 87/82 80/81 +f 82/84 87/4 81/83 +f 83/86 87/85 82/84 +f 84/87 87/6 83/86 +f 85/89 87/88 84/87 +f 86/90 87/8 85/89 +f 79/92 87/91 86/90 +f 80/93 79/93 88/93 +f 81/93 80/93 88/93 +f 82/93 81/93 88/93 +f 83/93 82/93 88/93 +f 84/93 83/93 88/93 +f 85/93 84/93 88/93 +f 86/93 85/93 88/93 +f 79/93 86/93 88/93 +f 90/81 97/1 89/80 +f 91/83 97/82 90/81 +f 92/84 97/4 91/83 +f 93/86 97/85 92/84 +f 94/87 97/6 93/86 +f 95/89 97/88 94/87 +f 96/90 97/8 95/89 +f 89/92 97/91 96/90 +f 90/93 89/93 98/93 +f 91/93 90/93 98/93 +f 92/93 91/93 98/93 +f 93/93 92/93 98/93 +f 94/93 93/93 98/93 +f 95/93 94/93 98/93 +f 96/93 95/93 98/93 +f 89/93 96/93 98/93 +f 100/81 107/1 99/80 +f 101/83 107/82 100/81 +f 102/84 107/4 101/83 +f 103/86 107/85 102/84 +f 104/87 107/6 103/86 +f 105/89 107/88 104/87 +f 106/90 107/8 105/89 +f 99/92 107/91 106/90 +f 100/93 99/93 108/93 +f 101/93 100/93 108/93 +f 102/93 101/93 108/93 +f 103/93 102/93 108/93 +f 104/93 103/93 108/93 +f 105/93 104/93 108/93 +f 106/93 105/93 108/93 +f 99/93 106/93 108/93 +f 110/81 117/1 109/80 +f 111/83 117/82 110/81 +f 112/84 117/4 111/83 +f 113/86 117/85 112/84 +f 114/87 117/6 113/86 +f 115/89 117/88 114/87 +f 116/90 117/8 115/89 +f 109/92 117/91 116/90 +f 110/93 109/93 118/93 +f 111/93 110/93 118/93 +f 112/93 111/93 118/93 +f 113/93 112/93 118/93 +f 114/93 113/93 118/93 +f 115/93 114/93 118/93 +f 116/93 115/93 118/93 +f 109/93 116/93 118/93 +f 120/81 127/1 119/80 +f 121/83 127/82 120/81 +f 122/84 127/4 121/83 +f 123/86 127/85 122/84 +f 124/87 127/6 123/86 +f 125/89 127/88 124/87 +f 126/90 127/8 125/89 +f 119/92 127/91 126/90 +f 120/93 119/93 128/93 +f 121/93 120/93 128/93 +f 122/93 121/93 128/93 +f 123/93 122/93 128/93 +f 124/93 123/93 128/93 +f 125/93 124/93 128/93 +f 126/93 125/93 128/93 +f 119/93 126/93 128/93 +f 130/81 137/1 129/80 +f 131/83 137/82 130/81 +f 132/84 137/4 131/83 +f 133/86 137/85 132/84 +f 134/87 137/6 133/86 +f 135/89 137/88 134/87 +f 136/90 137/8 135/89 +f 129/92 137/91 136/90 +f 130/93 129/93 138/93 +f 131/93 130/93 138/93 +f 132/93 131/93 138/93 +f 133/93 132/93 138/93 +f 134/93 133/93 138/93 +f 135/93 134/93 138/93 +f 136/93 135/93 138/93 +f 129/93 136/93 138/93 +# 192 elements +