Lil bit of game logic

This commit is contained in:
ruby
2024-08-12 00:38:15 +12:00
parent 8d7b9fc5b9
commit 9663c70d54
3 changed files with 44 additions and 17 deletions

View File

@ -66,6 +66,10 @@ public class Floor {
FillWalls(xzCorner.getBlockY(), xzCorner.getBlockY() + 15, Material.AIR); FillWalls(xzCorner.getBlockY(), xzCorner.getBlockY() + 15, Material.AIR);
} }
public void WarnWalls(Material material) {
FillWalls(xzCorner.getBlockY() + 2, xzCorner.getBlockY() + 4, material);
}
public void SoloTile(Material material) { public void SoloTile(Material material) {
for (int row = 0; row < gridSize; row++) { for (int row = 0; row < gridSize; row++) {
for (int col = 0; col < gridSize; col++) { for (int col = 0; col < gridSize; col++) {
@ -75,8 +79,6 @@ public class Floor {
Material.AIR); Material.AIR);
} }
} }
FillWalls(xzCorner.getBlockY() + 2, xzCorner.getBlockY() + 4, material);
} }
private void FillTile(int xMin, int zMin, Material material) { private void FillTile(int xMin, int zMin, Material material) {

View File

@ -16,7 +16,7 @@ public class GameConfig {
private boolean playersHaveKnockbackStick; private boolean playersHaveKnockbackStick;
private boolean playersHaveFishingRod; private boolean playersHaveFishingRod;
private boolean spectatorsCanMessWithPlayers; private boolean spectatorsCanMessWithPlayers;
private static final Map<String, Material> availableColours = new HashMap<>(); private static final Map<Material, String> availableColours = new HashMap<>();
private Location postGameTpLocation; private Location postGameTpLocation;
private Location floorCenter; private Location floorCenter;
private final Location[] playerJoinArea = new Location[2]; private final Location[] playerJoinArea = new Location[2];
@ -49,7 +49,7 @@ public class GameConfig {
for (String colour : coloursSection.getKeys(false)){ for (String colour : coloursSection.getKeys(false)){
var material = Material.getMaterial(coloursSection.getString(colour)); var material = Material.getMaterial(coloursSection.getString(colour));
availableColours.put(colour, material); availableColours.put(material, colour);
} }
} }
@ -127,7 +127,7 @@ public class GameConfig {
FloorGame.SaveConfig(); FloorGame.SaveConfig();
} }
public Map<String, Material> getColourMap() { public Map<Material, String> getColourMap() {
return availableColours; return availableColours;
} }

View File

@ -3,11 +3,12 @@ package com.pobnellion.floorGame.game;
import com.pobnellion.floorGame.FloorGame; import com.pobnellion.floorGame.FloorGame;
import com.pobnellion.floorGame.Util; import com.pobnellion.floorGame.Util;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
import java.util.logging.Level; import java.util.logging.Level;
@ -18,7 +19,11 @@ public class GameInstance {
private final ArrayList<Player> players = new ArrayList<>(); private final ArrayList<Player> players = new ArrayList<>();
private final ArrayList<Player> spectators = new ArrayList<>(); private final ArrayList<Player> spectators = new ArrayList<>();
private final GameConfig config; private final GameConfig config;
public int round; private int round;
private boolean roundInProgress;
private LocalDateTime nextRoundStartTime;
private Material roundColour;
public GameInstance(GameConfig config) { public GameInstance(GameConfig config) {
floor = new Floor(config.getFloorCenter(), config.getGridSize(), config.getTileSize(), config.getAvailableColours()); floor = new Floor(config.getFloorCenter(), config.getGridSize(), config.getTileSize(), config.getAvailableColours());
@ -51,17 +56,41 @@ public class GameInstance {
} }
private void GameLoopTask() { private void GameLoopTask() {
var rand = new Random();
var colour = floor.colours[rand.nextInt(floor.colours.length)];
floor.SoloTile(colour);
var roundTime = 1 + floor.tileSize * 0.5 - round * (0.2 * floor.tileSize);
new BukkitRunnable() {
var a =new BukkitRunnable() {
public void run() { public void run() {
floor.Reset(); floor.Reset();
} }
}.runTaskLater(FloorGame.GetInstance(), 1000); }.runTaskLater(FloorGame.GetInstance(), 1000);
a.
}
private BukkitRunnable round = new BukkitRunnable() {
@Override
public void run() {
var rand = new Random();
roundColour = floor.colours[rand.nextInt(floor.colours.length)];
floor.SoloTile(colour);
}
};
private BukkitRunnable warnColour = new BukkitRunnable() {
@Override
public void run() {
floor.WarnWalls(roundColour);
var colourName = config.getColourMap().get(roundColour).toUpperCase();
// TODO: stay based on round time
players.forEach(player -> player.sendTitle(null, colourName, 0, 10, 0));
}
} }
public void Stop() { public void Stop() {
@ -76,10 +105,6 @@ public class GameInstance {
} }
private double GetRoundTime() { private double GetRoundTime() {
if (round < 40) return 1 + 0.5 * floor.tileSize + Math.pow(0.85, Math.floor(round * 0.1));
return 1 + 0.5 * floor.tileSize - 0.08 * floor.tileSize * round * 0.1;
// TODO: flatter line after round 40
return 0;
} }
} }