1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#![warn(clippy::all, clippy::pedantic, clippy::nursery, clippy::cargo)]
#![allow(
clippy::cargo_common_metadata,
clippy::cast_lossless,
clippy::cast_possible_truncation,
clippy::cast_possible_wrap,
clippy::cast_sign_loss,
clippy::default_trait_access,
clippy::fn_params_excessive_bools,
clippy::missing_const_for_fn,
clippy::missing_panics_doc,
clippy::module_name_repetitions,
clippy::multiple_crate_versions,
clippy::must_use_candidate,
clippy::pedantic,
clippy::range_plus_one,
clippy::suboptimal_flops,
clippy::too_many_arguments,
clippy::too_many_lines,
clippy::unreadable_literal,
clippy::wildcard_dependencies,
clippy::wildcard_imports
)]
#[macro_use]
mod utils;
mod audio;
mod canvas;
mod channel;
mod event;
mod graphics;
mod image;
mod input;
mod key;
mod music;
mod oscillator;
mod platform;
mod profiler;
mod rectarea;
mod resource;
mod sdl2;
mod settings;
mod sound;
mod system;
mod tilemap;
mod types;
use crate::audio::Audio;
pub use crate::channel::{Channel, SharedChannel};
use crate::graphics::Graphics;
pub use crate::image::{Image, SharedImage};
use crate::input::Input;
pub use crate::key::*;
pub use crate::music::{Music, SharedMusic};
use crate::platform::Platform;
use crate::resource::Resource;
use crate::sdl2::Sdl2;
pub use crate::settings::*;
pub use crate::sound::{SharedSound, Sound};
use crate::system::System;
pub use crate::tilemap::{SharedTilemap, Tilemap};
pub use crate::types::*;
type TargetPlatform = Sdl2;
pub struct Pyxel {
platform: TargetPlatform,
system: System,
resource: Resource,
input: Input,
graphics: Graphics,
audio: Audio,
pub colors: [Rgb8; NUM_COLORS as usize],
pub screen: SharedImage,
pub cursor: SharedImage,
pub font: SharedImage,
}
pub trait PyxelCallback {
fn update(&mut self, pyxel: &mut Pyxel);
fn draw(&mut self, pyxel: &mut Pyxel);
}
impl Pyxel {
pub fn new(
width: u32,
height: u32,
title: Option<&str>,
fps: Option<u32>,
quit_key: Option<Key>,
capture_scale: Option<u32>,
capture_sec: Option<u32>,
) -> Self {
let title = title.unwrap_or(DEFAULT_TITLE);
let fps = fps.unwrap_or(DEFAULT_FPS);
let quit_key = quit_key.unwrap_or(DEFAULT_QUIT_KEY);
let capture_scale = capture_scale.unwrap_or(DEFAULT_CAPTURE_SCALE);
let capture_sec = capture_sec.unwrap_or(DEFAULT_CAPTURE_SEC);
let mut platform = TargetPlatform::new(title, width, height, DISPLAY_RATIO);
let system = System::new(fps, quit_key);
let resource = Resource::new(width, height, fps, capture_scale, capture_sec);
let input = Input::new();
let graphics = Graphics::new();
let audio = Audio::new(&mut platform);
let colors = DEFAULT_COLORS;
let screen = Image::new(width, height);
let cursor = Graphics::new_cursor_image();
let font = Graphics::new_font_image();
let mut pyxel = Self {
platform,
system,
resource,
input,
graphics,
audio,
colors,
screen,
cursor,
font,
};
pyxel.icon(&ICON_DATA, ICON_SCALE);
pyxel
}
}