From 3c16bd3f30a0beb969a16635c7baea81e659e355 Mon Sep 17 00:00:00 2001 From: Khalid Ali Date: Wed, 16 Sep 2020 21:10:39 -0400 Subject: [PATCH] Implement RadiationDetector's handleInterrupt --- .../RadiationDetector.java | 29 ++++++++++++++++++- .../server/game/objects/Radioactive.java | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) 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)); } }