mirror of
https://github.com/SpaceManiac/SpacemanDMM.git
synced 2025-12-23 05:36:47 +00:00
Remove Atom::loc field
This commit is contained in:
parent
b2ff507b30
commit
ab7eb9dcad
2 changed files with 11 additions and 21 deletions
|
|
@ -59,7 +59,7 @@ pub fn generate(ctx: Context, icon_cache: &IconCache) -> Result<Image, ()> {
|
|||
|
||||
let loc = (x as u32, y as u32);
|
||||
|
||||
'atom: for mut atom in get_atom_list(objtree, &map.dictionary[e], loc, render_passes, Some(ctx.errors)) {
|
||||
'atom: for mut atom in get_atom_list(objtree, &map.dictionary[e], render_passes, Some(ctx.errors)) {
|
||||
for pass in render_passes.iter() {
|
||||
// Note that late_filter is NOT called during smoothing lookups.
|
||||
if !pass.late_filter(&atom, objtree) {
|
||||
|
|
@ -88,7 +88,7 @@ pub fn generate(ctx: Context, icon_cache: &IconCache) -> Result<Image, ()> {
|
|||
}
|
||||
|
||||
// smoothing time
|
||||
icon_smoothing::handle_smooth(&mut underlays, ctx, atom, !0);
|
||||
icon_smoothing::handle_smooth(&mut underlays, ctx, loc, atom, !0);
|
||||
sprites.extend(underlays.drain(..).map(|o| (loc, o)));
|
||||
sprites.extend(overlays.drain(..).map(|o| (loc, o)));
|
||||
}
|
||||
|
|
@ -166,7 +166,6 @@ fn clip(bounds: (u32, u32), mut loc: (i32, i32), mut rect: (u32, u32, u32, u32))
|
|||
pub fn get_atom_list<'a>(
|
||||
objtree: &'a ObjectTree,
|
||||
prefabs: &'a [Prefab],
|
||||
loc: (u32, u32),
|
||||
render_passes: &[Box<dyn RenderPass>],
|
||||
errors: Option<&RwLock<HashSet<String>>>,
|
||||
) -> Vec<Atom<'a>> {
|
||||
|
|
@ -209,10 +208,6 @@ pub fn get_atom_list<'a>(
|
|||
result.push(atom);
|
||||
}
|
||||
|
||||
for atom in result.iter_mut() {
|
||||
atom.loc = loc;
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
|
|
@ -224,7 +219,6 @@ pub struct Atom<'a> {
|
|||
pub(crate) type_: &'a Type,
|
||||
prefab: Option<&'a Vars>,
|
||||
pub sprite: Sprite<'a>,
|
||||
pub loc: (u32, u32),
|
||||
}
|
||||
|
||||
impl<'a> Atom<'a> {
|
||||
|
|
@ -233,7 +227,6 @@ impl<'a> Atom<'a> {
|
|||
type_: type_.get(),
|
||||
prefab: Some(&fab.vars),
|
||||
sprite: Sprite::default(),
|
||||
loc: (0, 0),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -248,7 +241,6 @@ impl<'a> From<&'a Type> for Atom<'a> {
|
|||
type_: type_,
|
||||
prefab: None,
|
||||
sprite: Sprite::default(),
|
||||
loc: (0, 0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@ const SMOOTH_MORE: i32 = 2; // smooth with all subtypes thereof
|
|||
const SMOOTH_DIAGONAL: i32 = 4; // smooth diagonally
|
||||
const SMOOTH_BORDER: i32 = 8; // smooth with the borders of the map
|
||||
|
||||
pub fn handle_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, atom: Atom<'a>, mask: i32) {
|
||||
pub fn handle_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, loc: (u32, u32), atom: Atom<'a>, mask: i32) {
|
||||
let smooth_flags = mask & atom.get_var("smooth", ctx.objtree).to_int().unwrap_or(0);
|
||||
if smooth_flags & (SMOOTH_TRUE | SMOOTH_MORE) != 0 {
|
||||
let adjacencies = calculate_adjacencies(ctx, &atom, smooth_flags);
|
||||
let adjacencies = calculate_adjacencies(ctx, loc, &atom, smooth_flags);
|
||||
if smooth_flags & SMOOTH_DIAGONAL != 0 {
|
||||
diagonal_smooth(output, ctx, &atom, adjacencies);
|
||||
diagonal_smooth(output, ctx, loc, &atom, adjacencies);
|
||||
} else {
|
||||
cardinal_smooth(output, ctx, &atom, adjacencies);
|
||||
}
|
||||
|
|
@ -32,13 +32,13 @@ pub fn handle_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, atom: A
|
|||
}
|
||||
}
|
||||
|
||||
fn calculate_adjacencies(ctx: Context, atom: &Atom, flags: i32) -> i32 {
|
||||
fn calculate_adjacencies(ctx: Context, loc: (u32, u32), atom: &Atom, flags: i32) -> i32 {
|
||||
use dmi::*;
|
||||
// TODO: anchored check
|
||||
|
||||
let mut adjacencies = 0;
|
||||
let check_one = |direction, flag| {
|
||||
if find_type_in_direction(ctx, atom, direction, flags) {
|
||||
if find_type_in_direction(ctx, loc, atom, direction, flags) {
|
||||
flag
|
||||
} else {
|
||||
0
|
||||
|
|
@ -69,11 +69,11 @@ fn calculate_adjacencies(ctx: Context, atom: &Atom, flags: i32) -> i32 {
|
|||
adjacencies
|
||||
}
|
||||
|
||||
fn find_type_in_direction<'a>(ctx: Context, source: &Atom, direction: i32, flags: i32) -> bool {
|
||||
fn find_type_in_direction<'a>(ctx: Context, loc: (u32, u32), source: &Atom, direction: i32, flags: i32) -> bool {
|
||||
use std::ptr::eq;
|
||||
|
||||
let (dx, dy) = offset(direction);
|
||||
let new_loc = (source.loc.0 as i32 + dx, source.loc.1 as i32 + dy);
|
||||
let new_loc = (loc.0 as i32 + dx, loc.1 as i32 + dy);
|
||||
let (dim_y, dim_x) = ctx.level.grid.dim();
|
||||
if new_loc.0 < 0 || new_loc.1 < 0 || new_loc.0 >= dim_x as i32 || new_loc.1 >= dim_y as i32 {
|
||||
return flags & SMOOTH_BORDER != 0;
|
||||
|
|
@ -84,7 +84,6 @@ fn find_type_in_direction<'a>(ctx: Context, source: &Atom, direction: i32, flags
|
|||
let atom_list = get_atom_list(
|
||||
ctx.objtree,
|
||||
&ctx.map.dictionary[&ctx.level.grid[ndarray::Dim([new_loc.1 as usize, new_loc.0 as usize])]],
|
||||
new_loc,
|
||||
ctx.render_passes,
|
||||
None,
|
||||
);
|
||||
|
|
@ -162,7 +161,7 @@ fn cardinal_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, source: &
|
|||
}
|
||||
}
|
||||
|
||||
fn diagonal_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, source: &Atom<'a>, adjacencies: i32) {
|
||||
fn diagonal_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, loc: (u32, u32), source: &Atom<'a>, adjacencies: i32) {
|
||||
let presets = if adjacencies == N_NORTH | N_WEST {
|
||||
["d-se", "d-se-0"]
|
||||
} else if adjacencies == N_NORTH | N_EAST {
|
||||
|
|
@ -198,7 +197,7 @@ fn diagonal_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, source: &
|
|||
// check direct, then 45deg left, then 45deg right
|
||||
'dirs: for &each in &[dir, left_45(dir), right_45(dir)] {
|
||||
let (dx, dy) = offset(each);
|
||||
let new_loc = (source.loc.0 as i32 + dx, source.loc.1 as i32 + dy);
|
||||
let new_loc = (loc.0 as i32 + dx, loc.1 as i32 + dy);
|
||||
let (dim_y, dim_x) = ctx.level.grid.dim();
|
||||
if !(new_loc.0 < 0 || new_loc.1 < 0 || new_loc.0 >= dim_x as i32 || new_loc.1 >= dim_y as i32) {
|
||||
let new_loc = (new_loc.0 as u32, new_loc.1 as u32);
|
||||
|
|
@ -206,7 +205,6 @@ fn diagonal_smooth<'a>(output: &mut Vec<Sprite<'a>>, ctx: Context<'a>, source: &
|
|||
let atom_list = get_atom_list(
|
||||
ctx.objtree,
|
||||
&ctx.map.dictionary[&ctx.level.grid[ndarray::Dim([new_loc.1 as usize, new_loc.0 as usize])]],
|
||||
new_loc,
|
||||
ctx.render_passes,
|
||||
None,
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue