fix: proper font loading, cross platform assets, better platform independent trait implementation, conditional modules

This commit is contained in:
2025-08-16 14:17:28 -05:00
parent f940f01d9b
commit 313ca4f3e6
9 changed files with 89 additions and 82 deletions

View File

@@ -5,12 +5,12 @@ use std::time::Duration;
use crate::asset::Asset;
use crate::error::{AssetError, PlatformError};
use crate::platform::Platform;
use crate::platform::CommonPlatform;
/// Desktop platform implementation.
pub struct DesktopPlatform;
pub struct Platform;
impl Platform for DesktopPlatform {
impl CommonPlatform for Platform {
fn sleep(&self, duration: Duration, focused: bool) {
if focused {
spin_sleep::sleep(duration);
@@ -75,7 +75,8 @@ impl Platform for DesktopPlatform {
Asset::Wav2 => Ok(Cow::Borrowed(include_bytes!("../../assets/game/sound/waka/2.ogg"))),
Asset::Wav3 => Ok(Cow::Borrowed(include_bytes!("../../assets/game/sound/waka/3.ogg"))),
Asset::Wav4 => Ok(Cow::Borrowed(include_bytes!("../../assets/game/sound/waka/4.ogg"))),
Asset::Atlas => Ok(Cow::Borrowed(include_bytes!("../../assets/game/atlas.png"))),
Asset::AtlasImage => Ok(Cow::Borrowed(include_bytes!("../../assets/game/atlas.png"))),
Asset::Font => Ok(Cow::Borrowed(include_bytes!("../../assets/game/TerminalVector.ttf"))),
}
}
}

View File

@@ -5,12 +5,12 @@ use std::time::Duration;
use crate::asset::Asset;
use crate::error::{AssetError, PlatformError};
use crate::platform::Platform;
use crate::platform::CommonPlatform;
/// Emscripten platform implementation.
pub struct EmscriptenPlatform;
pub struct Platform;
impl Platform for EmscriptenPlatform {
impl CommonPlatform for Platform {
fn sleep(&self, duration: Duration, _focused: bool) {
unsafe {
emscripten_sleep(duration.as_millis() as u32);

View File

@@ -5,11 +5,13 @@ use crate::error::{AssetError, PlatformError};
use std::borrow::Cow;
use std::time::Duration;
pub mod desktop;
pub mod emscripten;
#[cfg(not(target_os = "emscripten"))]
mod desktop;
#[cfg(target_os = "emscripten")]
mod emscripten;
/// Platform abstraction trait that defines cross-platform functionality.
pub trait Platform {
pub trait CommonPlatform {
/// Sleep for the specified duration using platform-appropriate method.
fn sleep(&self, duration: Duration, focused: bool);
@@ -32,17 +34,14 @@ pub trait Platform {
/// Get the current platform implementation.
#[allow(dead_code)]
pub fn get_platform() -> &'static dyn Platform {
static DESKTOP: desktop::DesktopPlatform = desktop::DesktopPlatform;
static EMSCRIPTEN: emscripten::EmscriptenPlatform = emscripten::EmscriptenPlatform;
pub fn get_platform() -> &'static dyn CommonPlatform {
#[cfg(not(target_os = "emscripten"))]
{
&DESKTOP
&desktop::Platform
}
#[cfg(target_os = "emscripten")]
{
&EMSCRIPTEN
&emscripten::Platform
}
}