generate empire names

This commit is contained in:
Michael Zhang 2023-12-30 04:21:21 -05:00
parent 7bb16a1cca
commit 7cb4028af8
7 changed files with 150 additions and 26 deletions

109
Cargo.lock generated
View file

@ -185,6 +185,17 @@ dependencies = [
"crossbeam-utils",
]
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi 0.1.19",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "1.1.0"
@ -251,7 +262,8 @@ dependencies = [
"anyhow",
"axum",
"chrono",
"clap",
"clap 4.4.11",
"names",
"petgraph 0.6.4",
"prisma-client-rust",
"serde",
@ -569,6 +581,23 @@ dependencies = [
"libloading",
]
[[package]]
name = "clap"
version = "3.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
dependencies = [
"atty",
"bitflags 1.3.2",
"clap_derive 3.2.25",
"clap_lex 0.2.4",
"indexmap 1.9.3",
"once_cell",
"strsim",
"termcolor",
"textwrap",
]
[[package]]
name = "clap"
version = "4.4.11"
@ -576,7 +605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
dependencies = [
"clap_builder",
"clap_derive",
"clap_derive 4.4.7",
]
[[package]]
@ -587,10 +616,23 @@ checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"clap_lex 0.6.0",
"strsim",
]
[[package]]
name = "clap_derive"
version = "3.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008"
dependencies = [
"heck 0.4.1",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "clap_derive"
version = "4.4.7"
@ -603,6 +645,15 @@ dependencies = [
"syn 2.0.43",
]
[[package]]
name = "clap_lex"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
dependencies = [
"os_str_bytes",
]
[[package]]
name = "clap_lex"
version = "0.6.0"
@ -1591,6 +1642,15 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "hermit-abi"
version = "0.3.3"
@ -2599,6 +2659,16 @@ dependencies = [
"uuid",
]
[[package]]
name = "names"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc"
dependencies = [
"clap 3.2.25",
"rand 0.8.5",
]
[[package]]
name = "native-tls"
version = "0.2.11"
@ -2728,7 +2798,7 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [
"hermit-abi",
"hermit-abi 0.3.3",
"libc",
]
@ -2856,6 +2926,12 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
[[package]]
name = "os_str_bytes"
version = "6.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
[[package]]
name = "overload"
version = "0.1.1"
@ -3290,6 +3366,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn 1.0.109",
"version_check",
]
@ -4538,6 +4615,21 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "termcolor"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
dependencies = [
"winapi-util",
]
[[package]]
name = "textwrap"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
[[package]]
name = "thiserror"
version = "1.0.52"
@ -5290,6 +5382,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"

View file

@ -15,3 +15,4 @@ serde = { version = "1.0.193", features = ["derive"] }
tokio = { version = "1.35.1", features = ["full"] }
serde_json = "1.0.108"
petgraph = "0.6.4"
names = "0.14.0"

View file

@ -2,12 +2,16 @@ use std::{collections::HashMap, f64::consts::PI};
use anyhow::Result;
use chrono::Utc;
use names::Generator as NameGenerator;
use petgraph::{graph::UnGraph, graphmap::UnGraphMap};
use triangle::{triangulate, Point, TrianglulateOpts};
use crate::{
prisma::PrismaClient,
state::{GameCoreState, StarSystemCoreState, StarSystemId, UniverseId},
state::{
EmpireCoreState, EmpireId, GameCoreState, StarSystemCoreState,
StarSystemId, UniverseId,
},
};
pub async fn generate_initial_game_state(
@ -37,7 +41,14 @@ pub async fn generate_initial_game_state(
// Generate a new universe ID
let universe = client.universe().create(json!({}), vec![]).exec().await?;
let empires = HashMap::new();
// Generate some empires
let mut empires = HashMap::new();
let name_generator = NameGenerator::default();
for (idx, name) in name_generator.take(10).enumerate() {
let id = EmpireId(idx as i32);
let empire = EmpireCoreState { id, name };
empires.insert(id, empire);
}
// Format the star systems
let mut star_systems = HashMap::new();
@ -50,6 +61,7 @@ pub async fn generate_initial_game_state(
star_systems.insert(id, star_system);
}
// Format the hyperlanes into petgraph
let mut hyperlanes = UnGraphMap::default();
for indexes in result.triangle_list.into_iter() {
hyperlanes.add_edge(indexes[0], indexes[1], ());

View file

@ -1,5 +1,9 @@
pub struct EmpireId(u32);
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct EmpireId(pub i32);
pub struct EmpireCoreState {}
pub struct EmpireCoreState {
pub id: EmpireId,
pub name: String,
}
pub struct EmpireDerivedState {}

View file

@ -4,7 +4,7 @@ use anyhow::Result;
use chrono::{DateTime, Utc};
use petgraph::{graph::UnGraph, graphmap::UnGraphMap};
use crate::prisma::{star_system, star_system_edges, PrismaClient};
use crate::prisma::{empire, star_system, star_system_edges, PrismaClient};
use super::{EmpireCoreState, EmpireId, StarSystemCoreState, StarSystemId};
@ -25,7 +25,6 @@ pub struct GameDerivedState<'a> {
impl GameCoreState {
pub async fn save_to_database(&self, client: &PrismaClient) -> Result<()> {
println!("Self {:?} {:?}", self.universe_id, self.star_systems);
// Save star systems to database
client
.star_system()
@ -49,19 +48,6 @@ impl GameCoreState {
.await?;
// Insert edges into database
macro_rules! create_edge {
($from:expr, $to:expr) => {{
println!("WTF? {}, {}", $from, $to);
star_system_edges::create_unchecked(
universe.id.clone(),
star_system_map.get(&$from).unwrap().to_owned(),
$from as i32,
star_system_map.get(&$to).unwrap().to_owned(),
$to as i32,
vec![],
)
}};
}
client
.star_system_edges()
.create_many(
@ -82,6 +68,26 @@ impl GameCoreState {
.exec()
.await?;
// Save empires to database
client
.empire()
.create_many(
self
.empires
.values()
.map(|empire| {
empire::create_unchecked(
self.universe_id.0,
empire.name.clone(),
vec![empire::id::set(empire.id.0)],
)
})
.collect(),
)
.skip_duplicates()
.exec()
.await?;
Ok(())
}
}

View file

@ -34,7 +34,7 @@ export default function MapView({}) {
const x = point.coordX / 80;
const y = point.coordY / 80;
return (
<StarSystem key={point.id} system={point} position={[x, 0, y]} />
<StarSystem key={point.index} system={point} position={[x, 0, y]} />
);
})}

View file

@ -42,13 +42,13 @@ model Player {
}
model Empire {
id String @id @default(uuid())
id Int @id @default(autoincrement())
universeId Int
universe Universe @relation(fields: [universeId], references: [id])
name String
color String
color String?
playerId String? @unique
player Player? @relation(fields: [playerId], references: [id])