Compare commits

..

No commits in common. "d4106253e8540cbef12f24322fff1f295909755f" and "983e4cfc29de39e00f50f024f0fba53fb8287087" have entirely different histories.

View File

@ -4,9 +4,7 @@ use prometeu_hal::GfxBridge;
use prometeu_hal::glyph::Glyph;
use prometeu_hal::scene_bank::SceneBank;
use prometeu_hal::scene_viewport_cache::SceneViewportCache;
use prometeu_hal::scene_viewport_resolver::{
CacheRefreshRequest, ResolverUpdate, SceneViewportResolver,
};
use prometeu_hal::scene_viewport_resolver::{CacheRefreshRequest, SceneViewportResolver};
use prometeu_hal::sprite::Sprite;
use std::sync::Arc;
@ -259,7 +257,6 @@ impl FrameComposer {
panic!("SCENE runtime invariant broken: active scene without cache/resolver");
};
let update = resolver.update(scene, self.camera_x_px, self.camera_y_px);
Self::sync_cache_windows(cache, &update);
Self::apply_refresh_requests(cache, scene, &update.refresh_requests);
// `FrameComposer` owns only canonical game-frame composition.
// Deferred `gfx.*` primitives are drained later by a separate
@ -337,16 +334,6 @@ impl FrameComposer {
}
}
}
fn sync_cache_windows(cache: &mut SceneViewportCache, update: &ResolverUpdate) {
for request in &update.copy_requests {
cache.move_layer_window_to(
request.layer_index,
request.cache_origin_tile_x,
request.cache_origin_tile_y,
);
}
}
}
#[cfg(test)]
@ -373,16 +360,6 @@ mod tests {
glyph_asset_id: AssetId,
palette_id: u8,
tile_size: TileSize,
) -> SceneBank {
make_scene_grid(glyph_asset_id, palette_id, tile_size, 2, 2)
}
fn make_scene_grid(
glyph_asset_id: AssetId,
palette_id: u8,
tile_size: TileSize,
width: usize,
height: usize,
) -> SceneBank {
let layer = SceneLayer {
active: true,
@ -390,8 +367,8 @@ mod tests {
tile_size,
parallax_factor: ParallaxFactor { x: 1.0, y: 0.5 },
tilemap: TileMap {
width,
height,
width: 2,
height: 2,
tiles: vec![
Tile {
active: true,
@ -399,7 +376,7 @@ mod tests {
flip_x: false,
flip_y: false,
};
width * height
4
],
},
};
@ -791,43 +768,6 @@ mod tests {
assert_eq!(gfx.front_buffer()[0], Color::BLUE.raw());
}
#[test]
fn render_frame_realigns_cache_window_before_refresh_when_camera_moves() {
let banks = Arc::new(MemoryBanks::new());
let scene = Arc::new(make_scene_grid(0, 2, TileSize::Size8, 16, 16));
banks.install_glyph_bank(0, Arc::new(make_glyph_bank(TileSize::Size8, 2, Color::BLUE)));
banks.install_scene_bank(0, Arc::clone(&scene));
let mut frame_composer = FrameComposer::new(
16,
16,
Arc::clone(&banks) as Arc<dyn SceneBankPoolAccess>,
make_glyph_slot_index(&[(0, 0)]),
);
assert!(frame_composer.bind_scene(0));
let mut expected_resolver = FrameComposer::build_scene_runtime(16, 16, &scene).1;
expected_resolver.update(&scene, 0, 0);
let expected_update = expected_resolver.update(&scene, 40, 0);
let mut gfx = Gfx::new(16, 16, Arc::clone(&banks) as Arc<dyn GlyphBankPoolAccess>);
gfx.scene_fade_level = 31;
gfx.hud_fade_level = 31;
frame_composer.render_frame(&mut gfx);
frame_composer.set_camera(40, 0);
frame_composer.render_frame(&mut gfx);
let cache = frame_composer.cache().expect("cache should exist");
assert_eq!(
cache.layers[0].logical_origin(),
(
expected_update.copy_requests[0].cache_origin_tile_x,
expected_update.copy_requests[0].cache_origin_tile_y,
)
);
}
#[test]
fn render_frame_survives_scene_transition_through_unbind_and_rebind() {
let banks = Arc::new(MemoryBanks::new());