def __init__(self, controller):
        """
        Game initialization: 1024x768 screen for now
        """
        self.controller = controller
        gui.Container.__init__(self, width=1024, height=704)

        # Initialize screen components: Title Menu
        self.title_menu = gui.TextArea(value="Asteroid Miner", width=152, height=36, focusable=False)

        self.base_station_button = gui.Button(
            "Returning to Base Station", width=152, height=36
        )  # , background=(208, 208, 208))
        self.notify_value = "NOTIFY"
        self.notification_zone = gui.TextArea(value=self.notify_value, width=256, height=36, focusable=False)
        self.fuel_button = gui.Button("Buying Fuel", width=152, height=36)

        self.quit_button = gui.Button("Quit", width=96, height=36)

        # Initialize screen components: Gameplay Canvas
        self.lander = PhysicsEngine(0, 36, 1024, 524)

        # Initialize screen components: Lander Readouts
        self.altitude_readout = gui.TextArea(value="Altitude = 800 m", width=256, height=20, focusable=False)
        self.horizontal_speed_readout = gui.TextArea(
            value="Horizontal Speed: 0.0 km/s", width=256, height=20, focusable=False
        )  # , color=(255, 0, 0))
        self.vertical_speed_readout = gui.TextArea(
            value="Vertical Speed: 0.0 km/s", width=256, height=20, focusable=False
        )
        self.fuel_level_readout = gui.TextArea(
            value="Fuel: 1000.00 L", width=256, height=20, focusable=False
        )  # TODO From Message
        self.fuel_level = 1000.00

        # Position top menu
        self.add(self.title_menu, 0, 0)
        self.add(self.base_station_button, 360, 0)
        self.add(self.fuel_button, 512, 0)
        self.add(self.quit_button, 928, 0)

        # Position canvas and game readouts
        self.add(self.notification_zone, 768, 36)
        self.add(self.altitude_readout, 0, 562)
        self.add(self.horizontal_speed_readout, 256, 562)
        self.add(self.vertical_speed_readout, 512, 562)
        self.add(self.fuel_level_readout, 768, 562)

        # Position Gameplay info panels
        self.leaderboardPanel = LeaderboardPanel(24, 616)
        self.mineralPanel = MineralPanel(
            320, 616, {IRON: GAME_GOAL_IRON, GOLD: GAME_GOAL_GOLD, COPPER: GAME_GOAL_COPPER}
        )
        self.plotsPanel = PlotsPanel(
            744, 616, {IRON: IRON_PLOT_TOTAL, GOLD: GOLD_PLOT_TOTAL, COPPER: COPPER_PLOT_TOTAL}
        )  # TODO From Message
        self.add(self.plotsPanel, 744, 616)
        self.add(self.mineralPanel, 320, 616)
        self.add(self.leaderboardPanel, 24, 616)
class LanderContainer(gui.Container):
    """
    This container is the main GUI for the Lander Game.
    
    """

    def __init__(self, controller):
        """
        Game initialization: 1024x768 screen for now
        """
        self.controller = controller
        gui.Container.__init__(self, width=1024, height=704)

        # Initialize screen components: Title Menu
        self.title_menu = gui.TextArea(value="Asteroid Miner", width=152, height=36, focusable=False)

        self.base_station_button = gui.Button(
            "Returning to Base Station", width=152, height=36
        )  # , background=(208, 208, 208))
        self.notify_value = "NOTIFY"
        self.notification_zone = gui.TextArea(value=self.notify_value, width=256, height=36, focusable=False)
        self.fuel_button = gui.Button("Buying Fuel", width=152, height=36)

        self.quit_button = gui.Button("Quit", width=96, height=36)

        # Initialize screen components: Gameplay Canvas
        self.lander = PhysicsEngine(0, 36, 1024, 524)

        # Initialize screen components: Lander Readouts
        self.altitude_readout = gui.TextArea(value="Altitude = 800 m", width=256, height=20, focusable=False)
        self.horizontal_speed_readout = gui.TextArea(
            value="Horizontal Speed: 0.0 km/s", width=256, height=20, focusable=False
        )  # , color=(255, 0, 0))
        self.vertical_speed_readout = gui.TextArea(
            value="Vertical Speed: 0.0 km/s", width=256, height=20, focusable=False
        )
        self.fuel_level_readout = gui.TextArea(
            value="Fuel: 1000.00 L", width=256, height=20, focusable=False
        )  # TODO From Message
        self.fuel_level = 1000.00

        # Position top menu
        self.add(self.title_menu, 0, 0)
        self.add(self.base_station_button, 360, 0)
        self.add(self.fuel_button, 512, 0)
        self.add(self.quit_button, 928, 0)

        # Position canvas and game readouts
        self.add(self.notification_zone, 768, 36)
        self.add(self.altitude_readout, 0, 562)
        self.add(self.horizontal_speed_readout, 256, 562)
        self.add(self.vertical_speed_readout, 512, 562)
        self.add(self.fuel_level_readout, 768, 562)

        # Position Gameplay info panels
        self.leaderboardPanel = LeaderboardPanel(24, 616)
        self.mineralPanel = MineralPanel(
            320, 616, {IRON: GAME_GOAL_IRON, GOLD: GAME_GOAL_GOLD, COPPER: GAME_GOAL_COPPER}
        )
        self.plotsPanel = PlotsPanel(
            744, 616, {IRON: IRON_PLOT_TOTAL, GOLD: GOLD_PLOT_TOTAL, COPPER: COPPER_PLOT_TOTAL}
        )  # TODO From Message
        self.add(self.plotsPanel, 744, 616)
        self.add(self.mineralPanel, 320, 616)
        self.add(self.leaderboardPanel, 24, 616)

    def clicked_in_button(self, button, position):
        return button.collidepoint(position)

    def mouse_event_handler(self, event):
        if event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()

            # Purchasing / Traveling Buttons
            if self.clicked_in_button(self.base_station_button.rect, pos):
                self.triggerBaseStation()
            elif self.clicked_in_button(self.fuel_button.rect, pos):
                self.triggerBuyFuel()
            elif self.clicked_in_button(self.quit_button.rect, pos):
                self.quit()

            # Mining Plots Selection
            elif self.clicked_in_button(self.plotsPanel.rectIron, pos):
                self.triggerMiningPlotIron()
            elif self.clicked_in_button(self.plotsPanel.rectGold, pos):
                self.triggerMiningPlotGold()
            elif self.clicked_in_button(self.plotsPanel.rectCopper, pos):
                self.triggerMiningPlotCopper()
            # else: self.updateNotify(str(pos[0]) + " " + str(pos[1]))

        elif event.type == pygame.MOUSEBUTTONUP:
            pass

    def key_event_handler(self, event):
        if event.key == pygame.K_b:
            self.triggerBaseStation()
        elif event.key == pygame.K_f:
            self.triggerBuyFuel()
        else:
            self.lander.on_key_event(event)

    def game_ready(self):
        self.lander.set_ready()

    def draw_game(self, screen):
        # Update game
        self.lander.draw(screen)
        status = self.lander.get_status()
        if status == "CRASHED":
            self.updateNotify(status)
            self.triggerCrashedLanded()
            self.lander.set_status(self.lander.STATUS_PAUSED)
        elif status == "LANDED":
            self.triggerLandedSafely(10)
            self.lander.set_status(self.lander.STATUS_PAUSED)
            # send this signal to server

        # Update Readouts
        self.altitude_readout.value = "Altitude: " + str(self.lander.get_vertical_position()) + " m"

        self.horizontal_speed_readout.value = (
            "Horizontal Speed: " + str(self.lander.get_horizontal_velocity()) + " km/s"
        )
        self.vertical_speed_readout.value = "Vertical Speed: " + str(self.lander.get_vertical_velocity()) + " km/s"
        if abs(self.lander.get_horizontal_velocity()) > 4 or self.lander.get_vertical_velocity() > 4:
            pygame.draw.rect(screen, (255, 0, 0), (0, 560, 1024, 2), 0)
        self.notification_zone.value = self.notify_value
        if status == "RUNNING":
            self.fuel_level -= 1
        self.fuel_level_readout.value = "Fuel: " + str(self.fuel_level) + " L"

    def triggerMiningPlotIron(self):
        self.updateNotify("Mining: Iron")
        self.controller.RequestPlot(IRON)

    def triggerMiningPlotGold(self):
        self.updateNotify("Mining: Gold")
        self.controller.RequestPlot(GOLD)

    def triggerMiningPlotCopper(self):
        self.updateNotify("Mining: Copper")
        self.controller.RequestPlot(COPPER)

    def triggerBaseStation(self):
        self.fuel_level = 1000.00
        self.updateNotify("Returning to Base Station")
        self.controller.ReturnToEarth()

    def triggerBuyFuel(self):
        self.updateNotify("Buying Fuel")
        self.controller.BuyFuel()

    def triggerUpdateMineralScore(self, score_dict):
        self.mineralPanel.update_score(score_dict)

    def updateNotify(self, notif):
        print notif
        self.notify_value = notif

    def triggerCrashedLanded(self):
        self.controller.CrashLanded()

    def triggerLandedSafely(self, score):
        self.controller.LandedSafely(score)

    def refreshLeaderboard(self, data):
        self.leaderboardPanel.refreshLeaderboard(data)

    def updatePlots(self, data):
        self.plotsPanel.update_plots(data)

    def quit(self):
        # TODO Send player quitting message here
        sys.exit(0)