More fixes, add agnostic_interface.rs
This commit is contained in:
parent
b29a35c2d6
commit
1dcfbc2db9
3 changed files with 40 additions and 5 deletions
22
src/agnostic_interface.rs
Normal file
22
src/agnostic_interface.rs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
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>;
|
||||||
|
}
|
|
@ -2,6 +2,8 @@ use std::ops::{Mul, Add, AddAssign, Sub};
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::agnostic_interface::WindowInterface;
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct Color {
|
pub struct Color {
|
||||||
pub r: u8,
|
pub r: u8,
|
||||||
|
@ -230,6 +232,15 @@ pub struct View {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Window {
|
pub struct Window {
|
||||||
|
interface: Box<dyn WindowInterface>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Window {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
interface: todo!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Key {
|
pub struct Key {
|
||||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -13,6 +13,7 @@
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
mod agnostic_interface;
|
||||||
mod faux_quicksilver;
|
mod faux_quicksilver;
|
||||||
use faux_quicksilver::{Color, Image, Rectangle, Circle, Vector, Transform, Window, Sound, Font, FontStyle, Event, Key, View};
|
use faux_quicksilver::{Color, Image, Rectangle, Circle, Vector, Transform, Window, Sound, Font, FontStyle, Event, Key, View};
|
||||||
|
|
||||||
|
@ -1914,9 +1915,9 @@ impl GameState {
|
||||||
0xFF,
|
0xFF,
|
||||||
0xFF,
|
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),
|
* Transform::rotate(self.player_r as f32),
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
|
@ -1948,9 +1949,10 @@ impl GameState {
|
||||||
| SaveLoadNotification::Load { text, timer } => {
|
| SaveLoadNotification::Load { text, timer } => {
|
||||||
if let Some(i) = text {
|
if let Some(i) = text {
|
||||||
let mut c = Color::WHITE;
|
let mut c = Color::WHITE;
|
||||||
c.a = (*timer / SL_NOTIF_TIME) as f32;
|
c.a = ((*timer / SL_NOTIF_TIME) as f32 * 255.0) as u8;
|
||||||
let mut image_rect = i.area();
|
let mut image_rect = i.area_rect();
|
||||||
image_rect.pos = self.camera.pos + Vector::new(20.0, 20.0);
|
image_rect.x = self.camera.x + 20.0;
|
||||||
|
image_rect.y = self.camera.y + 20.0;
|
||||||
window.draw(&image_rect, Blended(i, c));
|
window.draw(&image_rect, Blended(i, c));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue