Skip to content

Commit

Permalink
Feat: Added stats page to in game view
Browse files Browse the repository at this point in the history
  • Loading branch information
tommyah committed May 13, 2026
1 parent acd52fa commit ac26ea0
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 31 deletions.
23 changes: 10 additions & 13 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.ntnu.idi.idatt2003.g40.mappe;

import edu.ntnu.idi.idatt2003.g40.mappe.engine.Exchange;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Stock;
import edu.ntnu.idi.idatt2003.g40.mappe.service.FileConverter;
import edu.ntnu.idi.idatt2003.g40.mappe.service.FileParser;
Expand Down Expand Up @@ -38,18 +39,6 @@
* */
public class Main extends Application {

static void main() {
FileParser parser1 = new FileParser("src/main/resources/dummydata.txt");
FileConverter converter1 = new FileConverter();
try {
List<Stock> stocksInFile = converter1.getStocksFromStrings(parser1.readFile());
parser1.writeStocksToFile(converter1.stocksToStrings(stocksInFile));
stocksInFile.forEach(s -> System.out.println(s.getSymbol()));
} catch (IOException e) {
System.err.println(e.getMessage());
}
}

/**
* {@inheritDoc}
* */
Expand All @@ -66,6 +55,14 @@ public void start(final Stage stage) throws Exception {
EventManager eventManager = new EventManager();
ViewManager viewManager = new ViewManager(stage, eventManager);

List<Stock> stocksInFile;
FileParser parser1 = new FileParser("src/main/resources/dummydata.txt");

FileConverter converter1 = new FileConverter();
stocksInFile = converter1.getStocksFromStrings(parser1.readFile());

Exchange exchange = new Exchange("Exchange", stocksInFile);

// Main menu
MainMenuView mainMenuView = new MainMenuView();
new MainMenuController(mainMenuView, eventManager);
Expand All @@ -85,7 +82,7 @@ public void start(final Stage stage) throws Exception {

// Summary section of the top bar
SummaryView summaryView = new SummaryView();
new SummaryController(summaryView, eventManager);
new SummaryController(summaryView, eventManager, exchange);

// Top bar
TopBarView topBarView = new TopBarView(summaryView);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
package edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.financialsummary;

import edu.ntnu.idi.idatt2003.g40.mappe.engine.Exchange;
import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager;
import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController;

public class SummaryController extends ViewController<SummaryView> {

private Exchange exchange;
/**
* {@inheritDoc}.
*/
public SummaryController(final SummaryView viewElement,
final EventManager eventManager)
final EventManager eventManager,
final Exchange exchange)
throws IllegalArgumentException {
this.exchange = exchange;
super(viewElement, eventManager);
}

@Override
protected void initInteractions() {
getViewElement().setOnAction(SummaryActions.NEXT_WEEK, () -> {
System.out.println("Next week!");
exchange.nextWeek();
});

exchange.weekProperty().addListener((observable, o, n) -> {
getViewElement().setWeek((Integer) n);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ protected void initLayout() {
navInfo.setAlignment(Pos.TOP_CENTER);

nextBtn = new Button("next");
weekLabel = new Label("week: 0");
weekLabel = new Label("week: 1");
weekLabel.getStyleClass().add("week-label");
Region spacerR = new Region();
VBox.setVgrow(spacerR, Priority.ALWAYS);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,46 @@
package edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.stats;

public class StatsController {
import edu.ntnu.idi.idatt2003.g40.mappe.engine.Exchange;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Player;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Share;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Transaction;
import edu.ntnu.idi.idatt2003.g40.mappe.service.PurchaseCalculator;
import edu.ntnu.idi.idatt2003.g40.mappe.service.TransactionCalculator;
import edu.ntnu.idi.idatt2003.g40.mappe.service.TransactionFactory;
import edu.ntnu.idi.idatt2003.g40.mappe.service.TransactionType;
import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager;
import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController;

import java.math.BigDecimal;

public class StatsController extends ViewController<StatsView> {

private Player player;
private Exchange exchange;

/**
* {@inheritDoc}
*/
public StatsController(final StatsView viewElement,
final EventManager eventManager,
final Player player,
final Exchange exchange)
throws IllegalArgumentException {
this.player = player;
this.exchange = exchange;
super(viewElement, eventManager);
}

@Override
protected void initInteractions() {
getViewElement().setOnAction(StatsActions.BUY_SHARES, () -> {
BigDecimal amountToBuy = new BigDecimal("1.0");
Transaction transaction = exchange.buy(
getViewElement().getCurrentStock().getSymbol(),
amountToBuy,
player
);

});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;

public class StatsView extends ViewElement<HBox, StatsActions> {
Expand All @@ -22,7 +22,9 @@ public class StatsView extends ViewElement<HBox, StatsActions> {
private ArrayList<Stock> stocks;
private ArrayList<String> stockStrings;
private ArrayList<Button> stockButtons;
private Label selectedStock;
private Stock selectedStock;
private Label selectedStockLabel;
private HBox tradeActions;

public StatsView() {
super(new HBox(), StatsActions.class);
Expand All @@ -36,6 +38,7 @@ protected void initLayout() {
sidebar = new VBox(10);
sidebar.setPrefWidth(150);
sidebar.setMaxHeight(Double.MAX_VALUE);
sidebar.setMinWidth(150);
VBox.setVgrow(sidebar, Priority.ALWAYS);

stocks = new ArrayList<>();
Expand Down Expand Up @@ -63,8 +66,6 @@ protected void initLayout() {
stockStrings.add("NVID");
stockStrings.add("NVID");



stockButtons = new ArrayList<>();
for (String t : stockStrings) {
Button btn = new Button(t);
Expand All @@ -76,17 +77,18 @@ protected void initLayout() {
scrollPane.setFitToWidth(true);
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
scrollPane.setMinWidth(150);

VBox.setVgrow(scrollPane, Priority.ALWAYS);
scrollPane.setMaxHeight(Double.MAX_VALUE);

VBox mainContent = new VBox(20);
mainContent.setAlignment(Pos.CENTER);
HBox.setHgrow(mainContent, Priority.ALWAYS);
mainContent.setMaxHeight(Double.MAX_VALUE);
HBox.setHgrow(mainContent, Priority.ALWAYS);
VBox.setVgrow(mainContent, Priority.ALWAYS);

selectedStock = new Label("APL");
selectedStockLabel = new Label("AAPL");

NumberAxis xAxis = new NumberAxis(1, 22, 1);
xAxis.setMinorTickVisible(false);
Expand Down Expand Up @@ -115,10 +117,11 @@ protected void initLayout() {
chart.minHeightProperty().set(50);
chart.getData().add(dataSeries);

// Trade Buttons Row
HBox tradeActions = new HBox();
tradeActions = new HBox();
tradeActions.setAlignment(Pos.CENTER);
tradeActions.setSpacing(300); // Push buy/sell to opposite sides
tradeActions.setMaxWidth(500);
tradeActions.setPrefWidth(500);
tradeActions.minWidth(100);

Button buyBtn = new Button("buy");
buyBtn.getStyleClass().add("buy-button");
Expand All @@ -128,18 +131,32 @@ protected void initLayout() {
sellBtn.getStyleClass().add("sell-button");
registerButton(StatsActions.SELL_SHARES, sellBtn);

tradeActions.getChildren().addAll(buyBtn, sellBtn);
Region spacer = new Region();
HBox.setHgrow(spacer, Priority.ALWAYS);
tradeActions.getChildren().addAll(buyBtn, spacer, sellBtn);

mainContent.getChildren().addAll(selectedStock, chart, tradeActions);
mainContent.getChildren().addAll(selectedStockLabel, chart, tradeActions);
getRootPane().getChildren().addAll(scrollPane, mainContent);

registerButton(StatsActions.BUY_SHARES, buyBtn);
registerButton(StatsActions.SELL_SHARES, sellBtn);
}

@Override
protected void initStyling() {
sidebar.getStyleClass().add("market-sidebar");
tradeActions.getStyleClass().add("trade-actions");
for (Button b : stockButtons) {
b.getStyleClass().add("stock-button");
}
selectedStock.getStyleClass().add("selected-stock-pill");
selectedStockLabel.getStyleClass().add("selected-stock-pill");
}

public void setCurrentStock(final Stock stock) {
selectedStock = stock;
}

public Stock getCurrentStock() {
return selectedStock;
}
}
2 changes: 0 additions & 2 deletions src/main/resources/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,6 @@

/* --------------- IN GAME VIEW ------------- */
.market-sidebar {
-fx-border-color: transparent black transparent transparent;
-fx-border-width: 0 1 0 0;
-fx-padding: 20;
}

Expand Down

0 comments on commit ac26ea0

Please sign in to comment.