diff --git a/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadiationDetector.java b/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadiationDetector.java index 9f40251..1dc57e1 100644 --- a/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadiationDetector.java +++ b/Plugin Radioactive Cloud/src/main/java/net/simon987/pluginradioactivecloud/RadiationDetector.java @@ -2,10 +2,14 @@ package net.simon987.pluginradioactivecloud; import java.util.ArrayList; +import javax.lang.model.type.UnionType; + import org.bson.Document; import net.simon987.server.assembly.HardwareModule; import net.simon987.server.assembly.Status; import net.simon987.server.game.objects.ControllableUnit; +import net.simon987.server.game.objects.GameObject; +import net.simon987.server.game.objects.Radioactive; public class RadiationDetector extends HardwareModule { @@ -130,7 +134,30 @@ public class RadiationDetector extends HardwareModule { @Override public void handleInterrupt(Status status) { - // Fill in + // Find all game entities in world + ArrayList entities = new ArrayList<>(unit.getWorld().getGameObjects()); + + // Check for alpha particles by finding Radioactive entities + int alphaParticles = 0; + for (GameObject entity : entities) { + if (entity instanceof Radioactive) { + // Calculate distance between object and cubot + double pathLength = getDistanceOfCoords(unit.getX(), unit.getY(), entity.getX(), entity.getY()); + alphaParticles += ((Radioactive) entity).getAlphaCounts(pathLength); + + // Get all tiles in between cubot and Radioactive entity + ArrayList tiles = getTiles(unit.getX(), unit.getY(), entity.getX(), entity.getY()); + for (Tuple tup : tiles) { + // If intermediary tile is blocked, reduce alphaParticles by 5 + if (unit.getWorld().isTileBlocked(tup.x, tup.y)) { + alphaParticles -= 5; + } + } + } + } + + // Save Alpha Radioactive Particles to register B + getCpu().getRegisterSet().getRegister("B").setValue(alphaParticles); } @Override diff --git a/Server/src/main/java/net/simon987/server/game/objects/Radioactive.java b/Server/src/main/java/net/simon987/server/game/objects/Radioactive.java index ba7b501..f0bd502 100644 --- a/Server/src/main/java/net/simon987/server/game/objects/Radioactive.java +++ b/Server/src/main/java/net/simon987/server/game/objects/Radioactive.java @@ -6,7 +6,7 @@ package net.simon987.server.game.objects; public interface Radioactive { - public static int getAlphaCounts(double distance) { + public default int getAlphaCounts(double distance) { return (int) (1000 * 1.0 / (distance * distance)); } }