mindustry logic execution, map- and schematic- parsing and rendering
uninit
bendn 2024-01-23
parent 824438a · commit 464801b
-rw-r--r--mindus/Cargo.toml4
-rw-r--r--mindus/src/data/renderer.rs22
-rw-r--r--mindus/src/lib.rs9
-rw-r--r--mindus/src/team.rs3
4 files changed, 20 insertions, 18 deletions
diff --git a/mindus/Cargo.toml b/mindus/Cargo.toml
index 413aba3..0c8ea9e 100644
--- a/mindus/Cargo.toml
+++ b/mindus/Cargo.toml
@@ -24,14 +24,14 @@ thiserror = "1.0"
bobbin-bits = "0.1"
enum_dispatch = "0.3"
phf = { version = "0.11", features = ["macros"] }
-fimg = { version = "0.4.31", features = ["scale", "blur", "save"], default-features = false }
+fimg = { version = "0.4.33", features = ["scale", "blur", "save"], default-features = false }
[features]
bin = ["fimg/save"]
default = ["bin"]
[build-dependencies]
-fimg = { version = "0.4.31", features = ["scale", "save", "blur"], default-features = false }
+fimg = { version = "0.4.33", features = ["scale", "save", "blur"], default-features = false }
walkdir = "2"
[[bin]]
diff --git a/mindus/src/data/renderer.rs b/mindus/src/data/renderer.rs
index 72d29d4..1f07d72 100644
--- a/mindus/src/data/renderer.rs
+++ b/mindus/src/data/renderer.rs
@@ -5,7 +5,7 @@ use super::GridPos;
use crate::block::Rotation;
pub(crate) use crate::utils::*;
use crate::Map;
-use fimg::BlendingOverlay;
+use fimg::{uninit, BlendingOverlay};
include!(concat!(env!("OUT_DIR"), "/full.rs"));
include!(concat!(env!("OUT_DIR"), "/quar.rs"));
@@ -169,8 +169,10 @@ impl Renderable for Map {
} else {
Scale::Eigth
};
- let mut img: Image<_, 3> =
- Image::alloc(scale * self.width as u32, scale * self.height as u32);
+ let mut img = uninit::Image::<_, 3>::new(
+ (scale * self.width as u32).try_into().unwrap(),
+ (scale * self.height as u32).try_into().unwrap(),
+ );
// loop1 draws the floor
for y in 0..self.height {
for x in 0..self.width {
@@ -179,21 +181,13 @@ impl Renderable for Map {
let tile = unsafe { self.tiles.get_unchecked(j) };
let y = self.height - y - 1;
// println!("draw {tile:?} ({x}, {y})");
- unsafe {
- img.as_mut()
- .overlay_at(&tile.floor(scale), scale * x as u32, scale * y as u32)
- };
+ unsafe { img.overlay_at(&tile.floor(scale), scale * x as u32, scale * y as u32) };
if tile.has_ore() {
- unsafe {
- img.as_mut().overlay_at(
- &tile.ore(scale),
- scale * x as u32,
- scale * y as u32,
- )
- };
+ unsafe { img.overlay_at(&tile.ore(scale), scale * x as u32, scale * y as u32) };
}
}
}
+ let mut img = unsafe { img.assume_init() };
// loop2 draws the buildings
for y in 0..self.height {
for x in 0..self.width {
diff --git a/mindus/src/lib.rs b/mindus/src/lib.rs
index 7ed688b..dacdc6b 100644
--- a/mindus/src/lib.rs
+++ b/mindus/src/lib.rs
@@ -1,5 +1,12 @@
//! crate for dealing with mindustry
-#![feature(generic_arg_infer, const_trait_impl, const_option, let_chains, effects)]
+#![feature(
+ generic_arg_infer,
+ const_trait_impl,
+ const_option,
+ derive_const,
+ let_chains,
+ effects
+)]
#![allow(clippy::redundant_closure_call)]
#![warn(
clippy::multiple_unsafe_ops_per_block,
diff --git a/mindus/src/team.rs b/mindus/src/team.rs
index a10209f..34c6602 100644
--- a/mindus/src/team.rs
+++ b/mindus/src/team.rs
@@ -2,7 +2,8 @@ use std::fmt;
use crate::content::{Content, Type};
-#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Default)]
+#[derive(Clone, Copy, Debug, Eq, Ord, PartialOrd, Default)]
+#[derive_const(PartialEq)]
pub struct Team(u8);
impl Team {