diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/preview/SimulatorPreview.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/preview/SimulatorPreview.java new file mode 100644 index 00000000..43ac2ff6 --- /dev/null +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/preview/SimulatorPreview.java @@ -0,0 +1,23 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bausystem.features.simulator.preview; + +public class SimulatorPreview { +} diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/preview/SimulatorPreviewTNT.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/preview/SimulatorPreviewTNT.java new file mode 100644 index 00000000..e647b46d --- /dev/null +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/preview/SimulatorPreviewTNT.java @@ -0,0 +1,123 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bausystem.features.simulator.preview; + +import org.bukkit.util.Vector; + +import java.util.Random; + +public class SimulatorPreviewTNT { + + private static final Random random = new Random(); + + private boolean gravity = false; + private int fuse = 80; + private double x; + private double y; + private double z; + private double vx; + private double vy; + private double vz; + + private boolean onGround; + + public SimulatorPreviewTNT(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + + double d = random.nextDouble() * Math.PI * 2; + this.vx = -Math.sin(d) * 0.02; + this.vy = 0.2; + this.vz = -Math.cos(d) * 0.02; + } + + public void tick() { + // Gravity + if (!gravity) { + vy -= 0.04; + } + + // Movement + move(); + + // TODO: EffectsFromOtherBlocks + + // Velocity * 0.98 + vx *= 0.98; + vy *= 0.98; + vz *= 0.98; + + // OnGround Velocity * 0.7 -0.5 0.7 + if (false) { + vx *= 0.7; + vy *= -0.5; + vz *= 0.7; + } + + // Decrease Fuse + fuse--; + if (fuse <= 0) { + // Explode on zero Fuse + explode(); + } else { + // TODO: or do water Movement! + } + } + + public void move() { + Vector vec = collide(); + double d = vec.lengthSquared(); + if (d > 1.0E-7 || new Vector(vx, vy, vz).lengthSquared() - d < 1.0E-7) { + x += vx; + y += vy; + z += vz; + } + + boolean flag = !equal(vx, vec.getX()); + boolean flag1 = !equal(vz, vec.getZ()); + boolean horizontalCollision = flag || flag1; + if (Math.abs(vy) > 0.0F) { + boolean verticalCollision = vy != vec.getY(); + onGround = verticalCollision && vy < (double) 0.0F; + } + + if (horizontalCollision) { + if (flag) vx = 0; + if (flag1) vz = 0; + } + // TODO: Get Block -> updateEntityMovementAfterFallOn! + // TODO: Get BlockSpeedFactor multiply + } + + public static boolean equal(double x, double y) { + return Math.abs(y - x) < (double) 1.0E-5F; + } + + public Vector collide() { + if (x == 0 && y == 0 && z == 0) return new Vector(0, 0, 0); + // TODO: Implement rest! + return null; + } + + public void explode() { + // TODO: Implement + } +}