Sfoglia il codice sorgente

Merge pull request #123 from RedstoneFuture/improvements/equipment-interval

Adding new options for game-join and respawn equipment interval
RedstoneFuture 1 anno fa
parent
commit
36415720ee

+ 3 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/configuration/arena/EquipmentIntervalConfiguration.java

@@ -30,7 +30,9 @@ import lombok.ToString;
 @RequiredArgsConstructor
 public class EquipmentIntervalConfiguration {
 
-    private int start = 10;
+    @SerializedName("custom_start_interval") private int customStartInterval = 10;
+    @SerializedName("reset_after_respawn") private boolean resetAfterRespawn = true;
+    @SerializedName("custom_respawn_interval") private int customRespawnInterval = 10;
 
     @SerializedName("intervals_by_team_amount") private Map<String, Integer> intervalsByTeamAmount = new HashMap<>() {{
         put("1", 15);

+ 38 - 8
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/equipment/PlayerEquipmentRandomizer.java

@@ -47,6 +47,9 @@ public class PlayerEquipmentRandomizer {
 
     int playerInterval;
     int sendEquipmentCounter = 0;
+    
+    int startInterval;
+    int respawnInterval;
 
 
     public PlayerEquipmentRandomizer(MWPlayer mwPlayer, Game game) {
@@ -56,8 +59,11 @@ public class PlayerEquipmentRandomizer {
         this.equipmentManager = game.getEquipmentManager();
         randomizer = new Random();
         maxGameDuration = game.getArena().getGameDuration() * 60;
+        
+        this.startInterval = arena.getInterval().getCustomStartInterval();
+        this.respawnInterval = arena.getInterval().getCustomRespawnInterval();
 
-        resetPlayerInterval();
+        initializePlayerInterval();
     }
 
     public void tick() {
@@ -67,16 +73,40 @@ public class PlayerEquipmentRandomizer {
         if (playerInterval <= 0) {
 
             sendRandomGameEquipment();
-            setPlayerInterval((int) Math.ceil(getIntervalByTeamAmount() * getFactorByGameTime()));
+            setPlayerInterval(getBasisInterval());
         }
     }
 
+    /**
+     * This method set the countdown for the player equipment
+     * randomizer for the game join.
+     * <p> 
+     * If specified start-interval is '-1', the basis-interval is used.
+     */
+    public void initializePlayerInterval() {
+        if (startInterval == -1) {
+            setPlayerInterval(getBasisInterval());
+            return;
+        }
+        setPlayerInterval(startInterval);
+    }
+    
     /**
      * This method resets the countdown for the player equipment
-     * randomizer.
+     * randomizer after a respawn, if activated.
+     * <p> 
+     * If specified respawn-interval is '-1', the basis-interval is used.
      */
     public void resetPlayerInterval() {
-        setPlayerInterval(getStartInterval() + 1);
+        // config option 'resetAfterRespawn'
+        if (!arena.getInterval().isResetAfterRespawn()) return;
+        
+        // adding 1 value before setting the player interval because of the timing
+        if (respawnInterval == -1) {
+            setPlayerInterval(getBasisInterval() + 1);
+            return;
+        }
+        setPlayerInterval(respawnInterval + 1);
     }
 
     /**
@@ -91,13 +121,13 @@ public class PlayerEquipmentRandomizer {
     }
 
     /**
-     * This method returns the interval after the player receives a new
-     * item at game start.
+     * This method returns the calculated basic interval dependent 
+     * on the team amount and the current game time.
      *
      * @return (int) the interval in seconds
      */
-    private int getStartInterval() {
-        return arena.getInterval().getStart();
+    private int getBasisInterval() {
+        return (int) Math.ceil(getIntervalByTeamAmount() * getFactorByGameTime());
     }
 
     /**