new mines system

This commit is contained in:
2024-05-23 17:56:54 -05:00
parent c90378e3f0
commit 3aac2410b0
2 changed files with 56 additions and 216 deletions
+49 -81
View File
@@ -15,6 +15,8 @@ import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class MineThread implements Runnable {
public MineThread(){
@@ -22,89 +24,12 @@ public class MineThread implements Runnable {
}
@Override
public void run() {
LocalDateTime nextPulse = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
LocalDateTime nextPulse = LocalDateTime.now().withMinute(59).minusHours(1);
while (true) {
LocalDateTime now = LocalDateTime.now();
if(now.isBefore(nextPulse))
break;
nextPulse = nextPulse.plusMinutes(1);
for (Mine mine : Mine.getMines()) {
if(mine.wasClaimed)
continue;
int minute = 0;
if (!mine.firstThirty)
minute = 30;
LocalDateTime openTime = now.withHour(mine.liveTime).withMinute(minute).withSecond(0);
LocalDateTime closeTime = openTime.plusMinutes(30);
if (now.isAfter(openTime) && !mine.isActive) {
mineWindowOpen(mine);
continue; // mine has not opened today yet, and it is now after the time it should have, open the mine
}
if(now.isAfter(closeTime) && BuildingManager.getBuilding(mine.getBuildingID()).getRank() == 1 && mine.isActive) {
mineWindowClose(mine);
continue; // mine was never knocked down, close it
}
if(now.isAfter(closeTime) && mine.lastClaimer == null && mine.isActive){
if(mine.firstThirty){
mine.firstThirty = false;
}else{
mine.firstThirty = true;
mine.liveTime += 1;
}
continue; // roll over to the next 30-minute window, mine was knocked down and not claimed
}
mineWindowClose(mine); // finished checking parameters, close the mine
}
if(LocalDateTime.now().isAfter(nextPulse));
processMineWindows();
nextPulse = nextPulse.plusMinutes(30);
}
// if(LocalDateTime.now().isAfter(nextPulse)) {
// for (Mine mine : Mine.getMines()) {
// Building mineTower = BuildingManager.getBuilding(mine.getBuildingID());
// if (mineTower == null)
// continue;
// int minute = 0;
// if (mine.firstThirty == false)
// minute = 30;
// LocalDateTime openTime = LocalDateTime.now().withHour(mine.liveTime).withMinute(minute).withSecond(0);
// LocalDateTime closeTime = openTime.plusMinutes(29);
//current time is after start time and before close time, open mine window
// if (LocalDateTime.now().isAfter(openTime.minusMinutes(1)) && !mine.wasClaimed && !mine.wasOpened) {
// mineWindowOpen(mine);
// continue;
// }
// if (mine.isActive) {
//
// if (LocalDateTime.now().isAfter(closeTime) && mineTower.getRank() > 0)
// mineWindowClose(mine); //mine was never knocked down, close window
//
// if (LocalDateTime.now().isAfter(closeTime) && mineTower.getRank() < 1 && mine.lastClaimer != null)
// mineWindowClose(mine); //mine was knocked down and was claimed, close window
// }
// }
// nextPulse = nextPulse.plusMinutes(30);
// }
//}
}
public static void mineWindowOpen(Mine mine) {
@@ -181,4 +106,47 @@ public class MineThread implements Runnable {
mine.wasClaimed = true;
return true;
}
public static void processMineWindows(){
for (Mine mine : Mine.getMines()) {
Building tower = BuildingManager.getBuildingFromCache(mine.getBuildingID());
if(tower == null)
continue;
LocalDateTime liveTime = LocalDateTime.now().withHour(mine.liveHour).withMinute(mine.liveMinute).minusMinutes(1);
ZonedDateTime localizedTime = convertCSTToLocalTime(liveTime);
if(!mine.isActive) {
if (ZonedDateTime.now().isAfter(localizedTime)) {
mineWindowOpen(mine);
// mine has not opened today yet, and it is now after the time it should have, open the mine
}
}else{
//mine is active right now
if (ZonedDateTime.now().isBefore(localizedTime.plusMinutes(30))){
continue; // window is not over yet
}
if(tower.getRank() == 1){
//mine was not knocked down, close the window
mineWindowClose(mine);
}else{
if(mine.lastClaimer != null)
mineWindowClose(mine); //has a claimer, close the window
}
}
}
}
public static ZonedDateTime convertCSTToLocalTime(LocalDateTime cstDateTime) {
// Define the CST time zone (Central Standard Time)
ZoneId cstZoneId = ZoneId.of("America/Chicago"); // CST is represented by America/Chicago
// Define the system's default time zone
ZoneId localZoneId = ZoneId.systemDefault();
// Create a ZonedDateTime object for CST
ZonedDateTime cstZonedDateTime = ZonedDateTime.of(cstDateTime, cstZoneId);
// Convert CST to the local time zone
ZonedDateTime localZonedDateTime = cstZonedDateTime.withZoneSameInstant(localZoneId);
return localZonedDateTime;
}
}