Skip to content

checkstyle hustlersapp #138

Merged
merged 1 commit into from
May 18, 2026
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,9 @@ public DesktopViewController(

setupPopupOverlay();
setupDesktopUi();

setupListeners();


int startDay = timeAndWeatherController.dayIndexProperty().get();
stockAppController.setWeekend(startDay == SATURDAY_INDEX || startDay == SUNDAY_INDEX);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ public class HustlersApp extends Popup {
* including sidebar navigation and content rendering system.</p>
*/
public HustlersApp() {
super(720, 480, 80, 60, App.HUSTLERS);
super(720, 480, 400, 400, App.HUSTLERS);
buildChapters();
buildUi();
show();
}

/**
Expand Down Expand Up @@ -85,86 +86,40 @@ private void buildChapters() {
+ "that money is gone. Never invest money you need for rent.\n\n"
+ "PRO TIPS\n"
+ "Watch the trend for at least two days before buying.\n"
+ "Diversify don't put everything in one stock.\n"
+ "Diversify - don't put everything in one stock.\n"
+ "Always keep enough cash to cover your weekly rent."
});

chapters.put("Bank", new String[]{
"HOW THE BANK WORKS",
"The Bank app is your financial safety net and leverage tool.\n\n"
"The Bank app is your financial safety net - and leverage tool.\n\n"
+ "SAVINGS ACCOUNT\n"
+ "Your account displays your total balance, cash available, "
+ "cash invested and total return. "
+ "cash invested and total return.\n"
+ "Remember, green numbers mean you're flying, red means you gotta lock in chief.\n\n"
+ "PORTFOLIO\n"
+ "If you like to brag about your investments, this is where it's at. "
+ "If it's empty, what are you even doing reading this?! Get to investing! "
+ "On the other hand, if it's full, I'm one proud G. \n\n"
+ "If you like to brag about your investments, this is where it's at.\n"
+ "If it's empty, what are you even doing reading this?! Get to investing!\n"
+ "On the other hand, if it's full, I'm one proud G.\n\n"
+ "PRO TIPS\n"
+ "Clicking on a share in your portfolio will open its page in the Market app.\n"
+ "Bank app + Market app = holy dual wield.\n"
+ "Check your current cash balance before rent day."
});

chapters.put("App Store", new String[]{
"HOW THE APP STORE WORKS",
"The App Store lets you purchase new apps that unlock extra features.\n\n"
+ "BROWSING APPS\n"
+ "Open the App Store and scroll through the available apps. "
+ "Each listing shows the app name, what it does, and its one-time price.\n\n"
+ "BUYING AN APP\n"
+ "Tap an app, read the description, and tap PURCHASE. "
+ "The price is taken from your wallet and the app appears on your home screen.\n\n"
+ "INSTALLED APPS\n"
+ "Purchased apps stay with you permanently — you never pay again. "
+ "Apps can include trading tools, extra income streams, "
+ "and communication upgrades.\n\n"
+ "FREE vs. PAID\n"
+ "Some apps are free by default (like this one). "
+ "Premium apps cost money but often pay for themselves quickly.\n\n"
+ "PRO TIPS\n"
+ "Buy income-boosting apps early — they compound over time.\n"
+ "Don't blow your rent fund on apps. Timing is everything."
});

chapters.put("Email", new String[]{
"HOW EMAIL WORKS",
"Email is how the game world communicates with you.\n\n"
+ "RECEIVING EMAILS\n"
+ "Emails arrive automatically from employers, contacts, and the system. "
+ "Emails arrive automatically - from employers, contacts, and the system. "
+ "A badge on the Email app icon shows unread messages.\n\n"
+ "IMPORTANT EMAILS\n"
+ "Some emails contain offers, jobs, or warnings that expire. "
+ "Check your inbox regularly so you don't miss time-sensitive opportunities.\n\n"
+ "JOB OFFERS\n"
+ "Employers send job offers via email. Accept them through the email itself. "
+ "Ignoring an offer causes it to expire after a set number of days.\n\n"
+ "RENT REMINDERS\n"
+ "You will receive a rent reminder email before the end of each week. "
+ "This is your cue to make sure your wallet has enough to cover the payment.\n\n"
+ "PRO TIPS\n"
+ "Read every email when it arrives — some are one-time chances.\n"
+ "Rent reminders are not optional reading."
});

chapters.put("Messenger", new String[]{
"HOW MESSENGER WORKS",
"Messenger is your direct line to contacts, NPCs, and deal-makers.\n\n"
+ "CONVERSATIONS\n"
+ "Each contact has their own chat thread. Tap a conversation to open it.\n\n"
+ "STORY INTERACTIONS\n"
+ "Some story events and side quests are triggered through Messenger. "
+ "Replying (or not replying) to certain contacts affects your relationships "
+ "and can unlock or close off opportunities.\n\n"
+ "DEALS AND TIPS\n"
+ "Certain contacts send you hot tips on the market or exclusive deals. "
+ "These appear as messages — act quickly because they are time-limited.\n\n"
+ "NOTIFICATIONS\n"
+ "New messages show a badge on the Messenger icon. "
+ "Don't let important messages pile up unread.\n\n"
+ "BREAKING NEWS\n"
+ "These are like the news, but for emails. "
+ "Check your inbox regularly so you don't miss "
+ "time-sensitive opportunities and events.\n\n"
+ "PRO TIPS\n"
+ "Maintain good relationships — ignoring contacts costs you opportunities.\n"
+ "Market tips from contacts can be more reliable than raw price trends."
+ "Read every email when it arrives - some are one-time chances.\n"
+ "Read the entire newsletter carefully - they might fool you.\n"
});

chapters.put("Rent", new String[]{
Expand All @@ -174,7 +129,7 @@ private void buildChapters() {
+ "Rent is charged on Saturday 00:00, right before the new week begins, "
+ "so you have until Friday to make sure you're set.\n\n"
+ "HOW IT'S PAID\n"
+ "The rent amount is deducted directly from your wallet automatically, "
+ "The rent amount is deducted directly from your wallet - automatically, "
+ "no action needed on your part. Make sure the money is in your wallet, "
+ "NOT locked in savings/investments.\n\n"
+ "WHAT IF YOU CAN'T PAY?\n"
Expand All @@ -184,14 +139,14 @@ private void buildChapters() {
+ "HOW MUCH IS RENT?\n"
+ "Your rent amount is shown on the Rent Day popup at Saturday 00:00. "
+ "You can count on it being $50 the first couple weeks.\n"
+ "It may increase as you progress so keep earning.\n\n"
+ "It may increase as you progress - so keep earning.\n\n"
+ "PRO TIPS\n"
+ "Check your wallet balance on Friday.\n"
+ "Sell shares if you are short."
});

chapters.put("Hearts", new String[]{
"YOUR LIVES HEARTS",
"YOUR LIVES - HEARTS",
"Hearts represent how many chances you have left before it's game over.\n\n"
+ "STARTING HEARTS\n"
+ "You begin the game with a set number of hearts shown in the footer.\n\n"
Expand All @@ -201,10 +156,10 @@ private void buildChapters() {
+ "When you run out of hearts, the game ends. "
+ "There is no revive. Manage your money or start over.\n\n"
+ "CAN YOU GAIN HEARTS BACK?\n"
+ "Nah bro, work with the cards you've been dealt protect the ones you have.\n\n"
+ "Nah bro, work with the cards you've been dealt - protect the ones you have.\n\n"
+ "PRO TIPS\n"
+ "Treat every heart like real money. One bad week can cascade.\n"
+ "If you're at one heart, play conservative protect your wallet above all."
+ "If you're at one heart, play conservative - protect your wallet above all."
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import edu.ntnu.idi.idatt2003.gruppe42.model.App;
import edu.ntnu.idi.idatt2003.gruppe42.view.views.components.DesktopBottomBar;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
Expand Down Expand Up @@ -82,8 +83,6 @@ public DesktopView(final DesktopViewController controller) {
gridArea = createGrid();
bottomBar = new DesktopBottomBar(controller.getPlayer());

// Ensure the popup overlay is in a pane that allows x,y positioning,
// and then place that pane in the center of the BorderPane.
Pane centerArea = new Pane(gridArea, popupOverlay);
Region region = (Region) gridArea;
region.prefWidthProperty().bind(centerArea.widthProperty());
Expand Down Expand Up @@ -296,13 +295,16 @@ private GridPane createGrid() {
grid.getRowConstraints().add(rc);
}

App[] apps = App.values();
List<App> desktopApps = Arrays.stream(App.values())
.filter(DesktopView::isDesktopApp)
.toList();

for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLS; col++) {
StackPane cell = new StackPane();
controller.configureCellAsDropTarget(cell);
if (row == 0 && col < apps.length && isDesktopApp(apps[col])) {
cell.getChildren().add(controller.createAppButton(apps[col]));
if (row == 0 && col < desktopApps.size()) {
cell.getChildren().add(controller.createAppButton(desktopApps.get(col)));
}
grid.add(cell, col, row);
}
Expand All @@ -315,7 +317,9 @@ private static boolean isDesktopApp(final App app) {
&& app != App.WARNING
&& app != App.GAMEOVER
&& app != App.SETTINGS
&& app != App.FILEPICKER;
&& app != App.FILEPICKER
&& app != App.APPSTORE // is a desktop app but is not developed yet
&& app != App.NEWS; // is a desktop app but is not developed yet
}

private String resource(final String path) {
Expand Down