package me.pascoej.ajario.util; import me.pascoej.ajario.AgarClient; import me.pascoej.ajario.node.Node; import me.pascoej.ajario.node.PlayerNode; import java.awt.*; /** * Created by john on 6/14/15. */ public class ThreatInfo { private final ThreatLevel threatLevel; public enum ThreatLevel { ME(new Color(0x106022)), TOO_HUGE(new Color(0x7A028F)), SPLIT_KILL_ME(new Color(0xFE3E48)), KILL_ME(new Color(0x9D0008)), NEUTREL(new Color(0x7d7d7d)), CAN_KILL(new Color(0x156880)), CAN_SPLIT_KILL(new Color(0x468DA1)); private final Color color; ThreatLevel(Color color) { this.color = color; } public org.newdawn.slick.Color getColor() { return new org.newdawn.slick.Color(color.getRGB()); } } private ThreatInfo(ThreatLevel threatLevel) { this.threatLevel = threatLevel; } public ThreatLevel getThreatLevel() { return threatLevel; } public static ThreatInfo threatInfo(AgarClient agarClient, PlayerNode node) { if (agarClient.isDead()) { return new ThreatInfo(ThreatLevel.NEUTREL); } double myAvgSize = agarClient.getWorld().getClientNodes().stream().mapToDouble(Node::getSize).average().getAsDouble() - 10; double myLargestSize = agarClient.getWorld().getClientNodes().stream().mapToDouble(Node::getSize).max().getAsDouble() - 10; double nodeSize = node.getSize() - 10; ThreatLevel threatLevel = ThreatLevel.NEUTREL; boolean isSplit = agarClient.getWorld().isSplit(node); boolean amISplit = agarClient.getWorld().getClientNodes().size() > 1; if (node.isMine()) { threatLevel = ThreatLevel.ME; } else if (nodeSize >= 4.7 * myAvgSize) { threatLevel = ThreatLevel.TOO_HUGE; } else if (nodeSize >= 2.55 * myAvgSize) { threatLevel = ThreatLevel.SPLIT_KILL_ME; } else if (!isSplit && nodeSize >= 1.09 * myAvgSize) { threatLevel = ThreatLevel.KILL_ME; } else if (nodeSize > 1.29 * myAvgSize) { threatLevel = ThreatLevel.KILL_ME; } if (2.6 * nodeSize <= myLargestSize) { threatLevel = ThreatLevel.CAN_SPLIT_KILL; } else if (amISplit && 1.3 * nodeSize <= myLargestSize) { threatLevel = ThreatLevel.CAN_KILL; } else if (!amISplit && 1.10 * nodeSize <= myLargestSize) { threatLevel = ThreatLevel.CAN_KILL; } return new ThreatInfo(threatLevel); } }