Skip to content

Commit

Permalink
settings abstraction to enable more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
alyssaruth committed Oct 22, 2024
1 parent 84a771e commit fb19f99
Show file tree
Hide file tree
Showing 26 changed files with 456 additions and 163 deletions.
3 changes: 2 additions & 1 deletion client/src/main/java/object/EntropyAchievementsTracker.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package object;

import achievement.AchievementUtilKt;
import util.AchievementsUtil;
import util.CardsUtil;
import util.Registry;
Expand Down Expand Up @@ -160,7 +161,7 @@ public void unlockEndOfGameAchievements(int startingCards)
if (!deviatedFromFirstSuit
&& startingCards == 5)
{
AchievementsUtil.unlockAchievement(Achievement.Monotone);
AchievementUtilKt.unlockAchievement(Achievement.Monotone);
}
}
}
2 changes: 1 addition & 1 deletion client/src/main/java/online/screen/EntropyLobby.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import static util.AchievementUtilKt.getAchievementsEarned;
import static achievement.AchievementUtilKt.getAchievementsEarned;
import static util.Images.ICON_ONLINE;

public class EntropyLobby extends JFrame
Expand Down
33 changes: 10 additions & 23 deletions client/src/main/java/online/screen/OnlineChatPanel.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,23 @@
package online.screen;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.prefs.Preferences;

import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;

import achievement.AchievementUtilKt;
import object.LimitedDocument;
import object.OnlineMessage;
import online.util.XmlBuilderClient;

import org.w3c.dom.Document;

import screen.ReplayDialog;
import util.AchievementsUtil;
import util.EntropyUtil;
import util.MessageUtil;
import util.Registry;
import util.StringUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.prefs.Preferences;

public class OnlineChatPanel extends JPanel
implements ActionListener, Registry
{
Expand Down Expand Up @@ -96,8 +83,8 @@ public void actionPerformed(ActionEvent arg0)

Document message = XmlBuilderClient.factoryNewChatXml(roomId, username, colour, text);
MessageUtil.sendMessage(message, 200);
AchievementsUtil.incrementChatCount();

AchievementUtilKt.updateAndUnlockChatty();
}

public void updateChatBox(List<OnlineMessage> messages)
Expand Down
26 changes: 9 additions & 17 deletions client/src/main/java/screen/ClearDataDialog.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,15 @@
package screen;

import java.awt.Component;
import java.awt.Toolkit;
import achievement.AchievementSetting;
import util.*;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import util.Debug;
import util.DialogUtil;
import util.Registry;
import util.RegistryUtil;
import util.ReplayFileUtil;
import static util.ClientGlobals.achievementStore;

public class ClearDataDialog extends JDialog
implements ActionListener,
Expand Down Expand Up @@ -97,7 +89,7 @@ private void clearData()

if (choice == JOptionPane.YES_OPTION)
{
removeStatisticsVariablesFromNode(achievements);
removeStatisticsVariablesFromNode();
DialogUtil.showInfo("Statistics were reset successfully.");
}
else
Expand Down Expand Up @@ -173,12 +165,12 @@ else if (!result.isEmpty())
closeDialog();
}

private void removeStatisticsVariablesFromNode(Preferences achievements)
private void removeStatisticsVariablesFromNode()
{
try
{
ScreenCache.getMainScreen().resetStartTime();
achievements.putInt(STATISTICS_DOUBLE_TIME_PLAYED, 0);
achievementStore.delete(AchievementSetting.TimePlayed);
achievements.remove(STATISTICS_INT_BEST_STREAK);
achievements.remove(STATISTICS_INT_CURRENT_STREAK);
achievements.remove(STATISTICS_INT_ENTROPY_GAMES_PLAYED);
Expand Down
49 changes: 23 additions & 26 deletions client/src/main/java/screen/MainScreen.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package screen;

import achievement.AchievementSetting;
import achievement.AchievementUtilKt;
import bean.AbstractDevScreen;
import game.GameMode;
import object.Bid;
Expand All @@ -23,12 +25,11 @@
import java.util.Timer;
import java.util.TimerTask;
import java.util.prefs.BackingStoreException;
import java.util.prefs.PreferenceChangeEvent;
import java.util.prefs.PreferenceChangeListener;
import java.util.prefs.Preferences;

import static achievement.AchievementUtilKt.getAchievementsEarned;
import static screen.online.PlayOnlineDialogKt.showPlayOnlineDialog;
import static util.AchievementUtilKt.getAchievementsEarned;
import static util.ClientGlobals.achievementStore;
import static utils.CoreGlobals.logger;
import static utils.ThreadUtilKt.dumpThreadStacks;

Expand All @@ -38,7 +39,7 @@ public final class MainScreen extends AbstractDevScreen
ActionListener,
Registry
{
public double startTime = System.currentTimeMillis();
public long startTime = System.currentTimeMillis();

private Timer timerFiveMinutes = null;
private Timer timerFifteenMinutes = null;
Expand Down Expand Up @@ -436,9 +437,9 @@ private void doStuffOnExit()
}
}

double currentTimePlayed = achievements.getDouble(Registry.STATISTICS_DOUBLE_TIME_PLAYED, 0);
double timePlayedThisSession = System.currentTimeMillis() - startTime;
achievements.putDouble(Registry.STATISTICS_DOUBLE_TIME_PLAYED, currentTimePlayed + timePlayedThisSession);
long currentTimePlayed = achievementStore.get(AchievementSetting.TimePlayed);
long timePlayedThisSession = System.currentTimeMillis() - startTime;
achievementStore.save(AchievementSetting.TimePlayed, currentTimePlayed + timePlayedThisSession);

if (!gamePanel.gameOver && !gamePanel.firstRound)
{
Expand Down Expand Up @@ -560,8 +561,9 @@ private void restartTimer(Achievement achievement, Timer timer, int minutes)

timer = new Timer("Timer-" + minutes);

var timePlayed = achievementStore.get(AchievementSetting.TimePlayed);
TimerTask task = new AchievementsUtil.UnlockAchievementTask(achievement);
timer.schedule(task, (long) Math.max(60000*minutes - achievements.getDouble(Registry.STATISTICS_DOUBLE_TIME_PLAYED, 0), 0));
timer.schedule(task, Math.max(60000L * minutes - timePlayed, 0));
}

public void showBottomAchievementPanel(boolean visible)
Expand Down Expand Up @@ -800,10 +802,10 @@ public void exitApplication()

private void checkForCoward()
{
boolean gotCoward = achievements.getBoolean(Registry.ACHIEVEMENTS_BOOLEAN_WILL_UNLOCK_COWARD, false);
boolean gotCoward = achievementStore.get(AchievementSetting.WillUnlockCoward);
if (gotCoward)
{
achievements.remove(Registry.ACHIEVEMENTS_BOOLEAN_WILL_UNLOCK_COWARD);
achievementStore.delete(AchievementSetting.WillUnlockCoward);
AchievementsUtil.unlockCoward();
}
}
Expand Down Expand Up @@ -867,20 +869,15 @@ public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});

achievements.addPreferenceChangeListener(new PreferenceChangeListener()
{
@Override
public void preferenceChange(PreferenceChangeEvent arg0)
{
String keyChanged = arg0.getKey();
if (keyChanged.equals(Registry.STATISTICS_DOUBLE_TIME_PLAYED))
{
restartTimers();
}

}
});

achievementStore.addPreferenceChangeListener(arg0 -> {
String keyChanged = arg0.getKey();
String timePlayedKey = AchievementSetting.TimePlayed.getName();
if (keyChanged.equals(timePlayedKey))
{
restartTimers();
}
});
}

@Override
Expand Down Expand Up @@ -932,7 +929,7 @@ else if (source == mntmPreferences)
}
else if (source == mntmAchievements)
{
AchievementsUtil.updateAndUnlockVanity();
AchievementUtilKt.updateAndUnlockVanity();

AchievementsDialog achievementsDialog = ScreenCache.getAchievementsDialog();
achievementsDialog.setLocationRelativeTo(null);
Expand Down Expand Up @@ -966,7 +963,7 @@ else if (source == mntmPlayOnline)
}
else if (source == mntmStatistics)
{
AchievementsUtil.updateAndUnlockVanity();
AchievementUtilKt.updateAndUnlockVanity();

StatisticsDialog dialog = new StatisticsDialog();
dialog.setTitle("Statistics");
Expand Down
4 changes: 2 additions & 2 deletions client/src/main/java/screen/ReplayInterface.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package screen;

import achievement.AchievementUtilKt;
import bean.FileUploadListener;
import bean.FileUploader;
import object.ReplayTable;
import util.AchievementsUtil;
import util.DialogUtil;
import util.Registry;
import util.ReplayFileUtil;
Expand Down Expand Up @@ -247,7 +247,7 @@ private void exportReplay()
if (ReplayFileUtil.successfullyFilledRegistryFromFile(fullPath, tempReplayStore))
{
ReplayFileUtil.exportReplay(filePath);
AchievementsUtil.unlockAchievement(Achievement.LookAtMe);
AchievementUtilKt.unlockAchievement(Achievement.LookAtMe);
}
else
{
Expand Down
6 changes: 5 additions & 1 deletion client/src/main/java/screen/StatisticsDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,13 @@
import javax.swing.JTextPane;
import javax.swing.SwingConstants;

import achievement.AchievementSetting;
import util.DateUtil;
import util.Debug;
import util.Registry;

import static util.ClientGlobals.achievementStore;

@SuppressWarnings("serial")
public class StatisticsDialog extends JDialog
implements Registry
Expand Down Expand Up @@ -262,7 +265,8 @@ private void setStreaksText()

private void setTimePlayedText()
{
double timePlayed = System.currentTimeMillis() - ScreenCache.getMainScreen().startTime + achievements.getDouble(STATISTICS_DOUBLE_TIME_PLAYED, 0);
var storedTimePlayed = achievementStore.get(AchievementSetting.TimePlayed);
long timePlayed = System.currentTimeMillis() - ScreenCache.getMainScreen().startTime + storedTimePlayed;
String timeFormatted = DateUtil.formatHHMMSS(timePlayed);

timePlayedField.setText("Time played: " + timeFormatted);
Expand Down
49 changes: 5 additions & 44 deletions client/src/main/java/util/AchievementsUtil.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
package util;

import achievement.AchievementSetting;
import game.GameMode;
import object.Bid;
import object.Player;
import online.screen.GameRoom;
import org.w3c.dom.Element;
import screen.MainScreen;
import screen.RewardDialog;
import screen.ScreenCache;
import utils.Achievement;
import utils.AchievementKt;

import javax.swing.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;

import static achievement.AchievementUtilKt.unlockAchievement;
import static util.ClientGlobals.achievementStore;

public class AchievementsUtil implements Registry
{
private static final int FULL_GAME_STARTING_CARDS = 5;
private static final int CHATTY_THRESHOLD = 25;
private static final int OMNISCIENT_THRESHOLD = 10;
private static final int SOCIAL_THRESHOLD = 5;
private static final int HONEST_THRESHOLD = 5;
Expand Down Expand Up @@ -489,7 +490,7 @@ public static void unlockCoward(boolean gameOver, boolean playerEnabled, boolean

public static void setCowardToBeUnlocked()
{
achievements.putBoolean(ACHIEVEMENTS_BOOLEAN_WILL_UNLOCK_COWARD, true);
achievementStore.save(AchievementSetting.WillUnlockCoward, true);
}

public static void unlockCoward()
Expand Down Expand Up @@ -522,17 +523,6 @@ public static void unlockBlueScreenOfDeath()
unlockAchievement(Achievement.BlueScreenOfDeath);
}

public static void updateAndUnlockVanity()
{
int vanityCount = achievements.getInt(ACHIEVEMENTS_INT_VANITY_COUNT, 0) + 1;
achievements.putInt(ACHIEVEMENTS_INT_VANITY_COUNT, vanityCount);

if (vanityCount == 20)
{
unlockAchievement(Achievement.Vanity);
}
}

public static void unlockRewards(int achievementsEarned)
{
unlockIfRequired(achievementsEarned, 5, REWARDS_BOOLEAN_FOUR_COLOURS, RewardDialog.REWARD_BANNER_FOUR_COLOUR);
Expand Down Expand Up @@ -634,17 +624,6 @@ public static void unlockOmniscient(ArrayList<String> revealedCards)
}
}

public static void incrementChatCount()
{
int chatCount = achievements.getInt(ACHIEVEMENTS_INT_CHAT_COUNT, 0) + 1;
achievements.putInt(ACHIEVEMENTS_INT_CHAT_COUNT, chatCount);

if (chatCount >= CHATTY_THRESHOLD)
{
unlockAchievement(Achievement.Chatty);
}
}

public static void unlockHonestOrDeceitful(int cardsRevealed, boolean revealedDifferentSuit, boolean revealedSameSuit)
{
if (cardsRevealed < HONEST_THRESHOLD)
Expand All @@ -662,24 +641,6 @@ else if (!revealedSameSuit)
}
}

public static void unlockAchievement(Achievement achievement)
{
//If we've already got the achievement, do nothing
var registryLocation = achievement.getRegistryLocation();
if (achievements.getBoolean(registryLocation, false))
{
return;
}

achievements.putBoolean(registryLocation, true);

ScreenCache.getAchievementsDialog().refresh(false);
ImageIcon icon = AchievementKt.getIcon(achievement);

MainScreen screen = ScreenCache.getMainScreen();
screen.showAchievementPopup(achievement.getTitle(), icon);
}

public static class UnlockAchievementTask extends TimerTask
{
private final Achievement achievement;
Expand Down
Loading

0 comments on commit fb19f99

Please sign in to comment.