--- /dev/null
+use crate::faux_quicksilver::Color;
+
+pub trait ImageInterface {
+ fn draw(&self, x: f32, y: f32) -> Result<(), String>;
+}
+
+pub trait FontInterface {
+ fn draw(&self, s: &str) -> Result<(), String>;
+}
+
+pub trait SoundInterface {
+ fn play(&self, vol: f32) -> Result<(), String>;
+}
+
+pub trait WindowInterface {
+ fn get_dimensions(&self) -> Result<(f32, f32), String>;
+ fn get_key_pressed(&self, key: char) -> Result<bool, String>;
+ fn get_mouse_pressed(&self) -> Result<Option<(f32, f32)>, String>;
+ fn clear_window(&self, color: Color) -> Result<(), String>;
+ fn begin_drawing(&self) -> Result<(), String>;
+ fn end_drawing(&self) -> Result<(), String>;
+}
use serde::{Deserialize, Serialize};
+use crate::agnostic_interface::WindowInterface;
+
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Color {
pub r: u8,
}
pub struct Window {
+ interface: Box<dyn WindowInterface>,
+}
+
+impl Window {
+ pub fn new() -> Self {
+ Self {
+ interface: todo!(),
+ }
+ }
}
pub struct Key {
use rand::prelude::*;
use serde::{Deserialize, Serialize};
+mod agnostic_interface;
mod faux_quicksilver;
use faux_quicksilver::{Color, Image, Rectangle, Circle, Vector, Transform, Window, Sound, Font, FontStyle, Event, Key, View};
0xFF,
0xFF,
0xFF,
- self.player_particles.opacity,
+ (self.player_particles.opacity * 255.0) as u8,
)),
- Transform::translate(-self.player.size.x / 2.0, -self.player.size.y / 2.0)
+ Transform::translate(-self.player.x / 2.0, -self.player.y / 2.0)
* Transform::rotate(self.player_r as f32),
1,
);
| SaveLoadNotification::Load { text, timer } => {
if let Some(i) = text {
let mut c = Color::WHITE;
- c.a = (*timer / SL_NOTIF_TIME) as f32;
- let mut image_rect = i.area();
- image_rect.pos = self.camera.pos + Vector::new(20.0, 20.0);
+ c.a = ((*timer / SL_NOTIF_TIME) as f32 * 255.0) as u8;
+ let mut image_rect = i.area_rect();
+ image_rect.x = self.camera.x + 20.0;
+ image_rect.y = self.camera.y + 20.0;
window.draw(&image_rect, Blended(i, c));
}
}