Compare commits

...

5 Commits

Author SHA1 Message Date
Mark ec796ff974
Updated TODO 2024-01-23 16:57:01 -08:00
Mark fd4839057f
Added basic cli 2024-01-23 16:56:56 -08:00
Mark 4e6da57c5b
Added assets 2024-01-23 16:56:32 -08:00
Mark 1e9b1215bc
Whitespace 2024-01-23 16:56:24 -08:00
Mark 86ebe8d7b5
Removed stray debug 2024-01-23 15:55:03 -08:00
12 changed files with 249 additions and 32 deletions

182
Cargo.lock generated
View File

@ -84,6 +84,54 @@ dependencies = [
"libc",
]
[[package]]
name = "anstream"
version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
[[package]]
name = "anstyle-parse"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
dependencies = [
"anstyle",
"windows-sys 0.52.0",
]
[[package]]
name = "anyhow"
version = "1.0.76"
@ -267,6 +315,46 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "clap"
version = "4.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
dependencies = [
"clap_builder",
"clap_derive",
]
[[package]]
name = "clap_builder"
version = "4.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.42",
]
[[package]]
name = "clap_lex"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
[[package]]
name = "codespan-reporting"
version = "0.11.1"
@ -283,6 +371,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "colorchoice"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "com-rs"
version = "0.2.1"
@ -622,14 +716,18 @@ name = "galactica"
version = "0.0.0"
dependencies = [
"anyhow",
"clap",
"galactica-content",
"galactica-packer",
"galactica-playeragent",
"galactica-render",
"galactica-system",
"galactica-util",
"image",
"nalgebra",
"pollster",
"rand",
"walkdir",
"wgpu",
"winit",
]
@ -875,6 +973,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hexf-parse"
version = "0.2.1"
@ -1903,6 +2007,12 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "svg_fmt"
version = "0.4.1"
@ -2153,6 +2263,12 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "utf8parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "vec_map"
version = "0.8.2"
@ -2522,6 +2638,15 @@ dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.0",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
@ -2552,6 +2677,21 @@ dependencies = [
"windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows-targets"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
dependencies = [
"windows_aarch64_gnullvm 0.52.0",
"windows_aarch64_msvc 0.52.0",
"windows_i686_gnu 0.52.0",
"windows_i686_msvc 0.52.0",
"windows_x86_64_gnu 0.52.0",
"windows_x86_64_gnullvm 0.52.0",
"windows_x86_64_msvc 0.52.0",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@ -2564,6 +2704,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@ -2576,6 +2722,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@ -2588,6 +2740,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@ -2600,6 +2758,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@ -2612,6 +2776,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@ -2624,6 +2794,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@ -2636,6 +2812,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]]
name = "winit"
version = "0.28.7"

View File

@ -71,3 +71,4 @@ walkdir = "2.4.0"
toml = "0.8.8"
glyphon = "0.4.1"
lazy_static = "1.4.0"
clap = { version = "4.4.18", features = ["derive"] }

View File

@ -3,6 +3,7 @@
## Currently working on:
- first: remove object array
- first: sticky particles
- first: rework timings
- clickable buttons
- planet outfitter
@ -43,7 +44,7 @@
- User config file
- 🌟 Document content
- 🌟 Clean up content: one ship per file, autodetect
- CLI: pack sprites(?), check content, content location, logs, etc
- CLI: content location, logs, etc
- Better WGSL preprocessor?
- Projectile performance
- Starfield clusters, shader instead of an array?

2
assets

@ -1 +1 @@
Subproject commit f749d99ae63bcdefb4a62774d21f30a7eebc20d3
Subproject commit e51b880b91e712214db025d97c9fbb3ccb3df7c3

View File

@ -26,6 +26,7 @@ galactica-render = { workspace = true }
galactica-util = { workspace = true }
galactica-system = { workspace = true }
galactica-playeragent = { workspace = true }
galactica-packer = { workspace = true }
rand = { workspace = true }
winit = { workspace = true }
@ -33,3 +34,6 @@ wgpu = { workspace = true }
pollster = { workspace = true }
anyhow = { workspace = true }
nalgebra = { workspace = true }
clap = { workspace = true }
walkdir = { workspace = true }
image = { workspace = true }

View File

@ -0,0 +1 @@
pub mod packer;

View File

@ -1,10 +1,7 @@
mod atlasset;
use atlasset::AtlasSet;
use anyhow::{bail, Context, Result};
use galactica_packer::AtlasSet;
use image::io::Reader;
use std::path::{Path, PathBuf};
use std::path::Path;
use walkdir::WalkDir;
// TODO: warning when images have extra transparency
@ -13,11 +10,9 @@ use walkdir::WalkDir;
// TODO: randomly assign sprites to textures, for efficiency
// TODO: group images by use case (dynamic loading algorithm)
fn main() -> Result<()> {
pub fn run(asset_root: &Path, cache_target: &Path) -> Result<()> {
let mut files = Vec::new();
let asset_root = Path::new("./assets/render");
// Total number of pixels we want to add
let mut total_dim = 0f64;
@ -88,8 +83,8 @@ fn main() -> Result<()> {
println!("Saving files...");
atlas_set.save_files(
|x| PathBuf::from(format!("cache/atlas-{x:0.2}.bmp")),
&PathBuf::from("cache/spriteatlas.toml"),
|x| cache_target.join(format!("atlas-{x:0.2}.bmp")),
&cache_target.join("spriteatlas.toml"),
)?;
return Ok(());

View File

@ -1,6 +1,7 @@
mod game;
use anyhow::{bail, Result};
use clap::Parser;
use galactica_content::{Content, SystemHandle};
use galactica_playeragent::{PlayerAgent, PlayerStatus};
use galactica_render::RenderInput;
@ -20,17 +21,51 @@ use winit::{
window::WindowBuilder,
};
fn main() {
if let Err(err) = try_main() {
eprintln!("Galactica failed with an error");
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
/// Run the asset packer
#[arg(long, action, group = "run")]
pack: bool,
let mut i = 0;
for e in err.chain().rev() {
eprintln!("{i:02}: {}", e);
i += 1;
/// Check content in the default directory
#[arg(long, action, group = "run")]
check_content: bool,
}
mod cli;
fn main() -> Result<()> {
let args = Args::parse();
let cache_dir = Path::new(ASSET_CACHE);
fs::create_dir_all(cache_dir)?;
if args.pack {
cli::packer::run(Path::new("./assets/render"), cache_dir)?;
} else if args.check_content {
let atlas_index = cache_dir.join("spriteatlas.toml");
let _ = Content::load_dir(
PathBuf::from("./content"),
PathBuf::from("./assets"),
atlas_index.clone(),
)?;
println!("Content was loaded without errors.")
} else {
// Run game
if let Err(err) = try_main() {
eprintln!("Galactica failed with an error");
let mut i = 0;
for e in err.chain().rev() {
eprintln!("{i:02}: {}", e);
i += 1;
}
std::process::exit(1);
}
std::process::exit(1);
}
return Ok(());
}
fn try_main() -> Result<()> {
@ -43,11 +78,11 @@ fn try_main() -> Result<()> {
bail!("Could not find sprite atlas!");
}
// TODO: pretty error if missing
// TODO: pretty error if missing (also in cli)
let content = Content::load_dir(
PathBuf::from("./content"),
PathBuf::from("./assets"),
atlas_index.clone(),
atlas_index,
)?;
let event_loop = EventLoop::new();

View File

@ -1,7 +1,3 @@
[[bin]]
name = "galactica-packer"
path = "src/main.rs"
[package]
name = "galactica-packer"
description = "Galactica's sprite packer"

View File

@ -1,5 +1,5 @@
use crate::{SpriteAtlas, SpriteAtlasImage};
use anyhow::{bail, Context, Result};
use galactica_packer::{SpriteAtlas, SpriteAtlasImage};
use image::{imageops, GenericImageView, ImageBuffer, Rgba, RgbaImage};
use std::{
fs::File,
@ -16,6 +16,7 @@ use std::{
// image: a single file
// sprite: a possibly animated texture
/// Builds a set of atlas textures from input image files
pub struct AtlasSet {
/// The width of each atlas
texture_width: u32,
@ -56,6 +57,7 @@ pub struct AtlasSet {
}
impl AtlasSet {
/// Make a new AtlasSet
pub fn new(
texture_width: u32,
texture_height: u32,
@ -223,6 +225,7 @@ impl AtlasSet {
return Ok(atlas_idx);
}
/// Save the index and all atlas files
pub fn save_files<F>(mut self, atlas_path: F, index_path: &Path) -> Result<()>
where
F: Fn(usize) -> PathBuf,
@ -265,6 +268,7 @@ impl AtlasSet {
}
*/
/// Get the current packing efficiency of this set, over all atlases.
pub fn get_efficiency(&self) -> f64 {
self.used_area
/ (self.texture_height as f64

View File

@ -2,6 +2,9 @@
//! This crate creates texture atlases from an asset tree.
mod atlasset;
pub use atlasset::*;
use std::{
collections::HashMap,
num::NonZeroU32,

View File

@ -66,8 +66,6 @@ impl PhysEffect {
parent_angle + effect.angle + rng.gen_range(-effect.angle_rng..=effect.angle_rng)
};
println!("{:?}", effect.angvel_rng);
let rb = RigidBodyBuilder::new(RigidBodyType::KinematicVelocityBased)
.position(pos.into())
.rotation(angle)
@ -77,15 +75,12 @@ impl PhysEffect {
PhysEffect {
anim: SpriteAutomaton::new(ct, effect.sprite),
rigid_body: wrapper.insert_rigid_body(rb.build()),
lifetime: 0f32
.max(effect.lifetime + rng.gen_range(-effect.lifetime_rng..=effect.lifetime_rng)),
// Make sure size isn't negative. This check should be on EVERY rng!
size: 0f32.max(effect.size + rng.gen_range(-effect.size_rng..=effect.size_rng)),
fade: 0f32.max(effect.fade + rng.gen_range(-effect.fade_rng..=effect.fade_rng)),
is_destroyed: false,
}
}