Skip to content
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
107 changes: 0 additions & 107 deletions src/f1p/__init__.py
Original file line number Diff line number Diff line change
@@ -1,107 +0,0 @@
from typing import Self

from direct.showbase.ShowBase import ShowBase
from panda3d.core import PStatClient, WindowProperties

from f1p.services.data_extractor import DataExtractorService
from f1p.ui.components.leaderboard import Leaderboard
from f1p.ui.components.map import Map
from f1p.ui.components.menu import Menu
from f1p.ui.components.origin import Origin
from f1p.ui.components.playback import PlaybackControls


class F1PlayerApp(ShowBase):
def __init__(
self,
width: int = 800,
height: int = 800,
draw_origin: bool = False,
show_frame_rate: bool = False,
pstat_debug: bool = False,
):
super().__init__(self)

self.symbols_font = self.loader.loadFont("./src/f1p/ui/fonts/NotoSansSymbols2-Regular.ttf")
self.text_font = self.loader.loadFont("./src/f1p/ui/fonts/f1_font.ttf")

self.width = width
self.height = height

self._data_extractor: DataExtractorService | None = None
self.cam.setPos(0, -70, 40)
self.cam.lookAt(0, 0, 0)

self.setBackgroundColor(0.3, 0.3, 0.3, 1)

self.taskMgr.setupTaskChain("loadingData", numThreads=1)

self.ui_components: list = []

if draw_origin:
origin = Origin(self.render)
origin.render()

self.setFrameRateMeter(show_frame_rate)

if pstat_debug:
PStatClient.connect()

@property
def data_extractor(self) -> DataExtractorService:
if self._data_extractor is None:
self._data_extractor = DataExtractorService(
self.pixel2d,
self.taskMgr,
self.width,
self.height,
self.text_font,
)

return self._data_extractor

def configure_window(self) -> Self:
props = WindowProperties()
props.setSize(self.width, self.height)
props.setFixedSize(True)
self.win.requestProperties(props)

return self

def draw_menu(self) -> Self:
menu = Menu(self.pixel2d, self.taskMgr, self.messenger, self.width, 40, self.text_font, self.data_extractor)
menu.render()

return self

def register_ui_components(self) -> Self:
playback_controls = PlaybackControls(
self.pixel2d,
self.cam,
self.taskMgr,
self.height,
self.width,
30,
self.symbols_font,
self.text_font,
self.data_extractor,
)

circuit_map = Map(self.render, self.taskMgr, self.data_extractor)

leaderboard = Leaderboard(
self.pixel2d,
self.taskMgr,
self.symbols_font,
self.text_font,
circuit_map,
self.data_extractor,
)

self.ui_components = [
playback_controls,
circuit_map,
leaderboard,
]

return self
118 changes: 118 additions & 0 deletions src/f1p/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
from typing import Self

from direct.showbase.ShowBase import ShowBase
from panda3d.core import PStatClient, WindowProperties

from f1p.services.data_extractor.service import DataExtractorService
from f1p.ui.components.leaderboard.component import Leaderboard
from f1p.ui.components.map import Map
from f1p.ui.components.menu import Menu
from f1p.ui.components.origin import Origin
from f1p.ui.components.playback import PlaybackControls
from f1p.ui.components.weather import WeatherBoard


class F1PlayerApp(ShowBase):
def __init__(
self,
width: int = 800,
height: int = 800,
draw_origin: bool = False,
show_frame_rate: bool = False,
pstat_debug: bool = False,
):
super().__init__(self)

self.symbols_font = self.loader.loadFont("./src/f1p/ui/fonts/NotoSansSymbols2-Regular.ttf")
self.text_font = self.loader.loadFont("./src/f1p/ui/fonts/f1_font.ttf")

self.width = width
self.height = height

self._data_extractor: DataExtractorService | None = None
self.cam.setPos(0, -70, 40)
self.cam.lookAt(0, 0, 0)

self.setBackgroundColor(0.3, 0.3, 0.3, 1)

self.taskMgr.setupTaskChain("loadingData", numThreads=1)

self.ui_components: list = []

if draw_origin:
origin = Origin(self.render)
origin.render()

self.setFrameRateMeter(show_frame_rate)

if pstat_debug:
PStatClient.connect()

@property
def data_extractor(self) -> DataExtractorService:
if self._data_extractor is None:
self._data_extractor = DataExtractorService(
self.pixel2d,
self.taskMgr,
self.width,
self.height,
self.text_font,
)

return self._data_extractor

def configure_window(self) -> Self:
props = WindowProperties()
props.setSize(self.width, self.height)
props.setFixedSize(True)
self.win.requestProperties(props)

return self

def draw_menu(self) -> Self:
menu = Menu(self.pixel2d, self.taskMgr, self.messenger, self.width, 40, self.text_font, self.data_extractor)
menu.render()

return self

def register_ui_components(self) -> Self:
playback_controls = PlaybackControls(
self.pixel2d,
self.cam,
self.taskMgr,
self.height,
self.width,
30,
self.symbols_font,
self.text_font,
self.data_extractor,
)

circuit_map = Map(self.render, self.taskMgr, self.data_extractor)

leaderboard = Leaderboard(
self.pixel2d,
self.taskMgr,
self.symbols_font,
self.text_font,
circuit_map,
self.data_extractor,
)

weather_board = WeatherBoard(
self.pixel2d,
self.taskMgr,
self.symbols_font,
self.text_font,
self.width,
self.data_extractor,
)

self.ui_components = [
playback_controls,
circuit_map,
leaderboard,
weather_board,
]

return self
2 changes: 1 addition & 1 deletion src/f1p/main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from f1p import F1PlayerApp
from f1p.app import F1PlayerApp

app = F1PlayerApp()
app.disableMouse() # disable camera controls
Expand Down
Loading