Skip to content

Commit 771a2c2

Browse files
committed
optimized vita and ypk loading
1 parent 34ce38b commit 771a2c2

File tree

8 files changed

+74
-51
lines changed

8 files changed

+74
-51
lines changed

radiance/radiance/src/input/gamepad/vita.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ impl VitaGamepadInput {
1414
unsafe {
1515
let mut ctrl: SceCtrlData = std::mem::zeroed();
1616
sceCtrlPeekBufferPositive(0, &mut ctrl as *mut _, 1);
17-
1817
set_key_state(
1918
states,
2019
Key::GamePadEast,
@@ -52,10 +51,11 @@ impl VitaGamepadInput {
5251
ctrl.buttons & SCE_CTRL_RIGHT != 0,
5352
);
5453

55-
axis_states[Axis::LeftStickX as usize].set_value(ctrl.lx as f32 / 255.0);
56-
axis_states[Axis::LeftStickY as usize].set_value(ctrl.ly as f32 / 255.0);
57-
axis_states[Axis::RightStickX as usize].set_value(ctrl.rx as f32 / 255.0);
58-
axis_states[Axis::RightStickY as usize].set_value(ctrl.ry as f32 / 255.0);
54+
axis_states[Axis::LeftStickX as usize].set_value(ctrl.lx as f32 / 255.0 * 2.0 - 1.0);
55+
axis_states[Axis::LeftStickY as usize].set_value(-(ctrl.ly as f32 / 255.0 * 2.0 - 1.0));
56+
axis_states[Axis::RightStickX as usize].set_value(ctrl.rx as f32 / 255.0 * 2.0 - 1.0);
57+
axis_states[Axis::RightStickY as usize]
58+
.set_value(-(ctrl.ry as f32 / 255.0 * 2.0 - 1.0));
5959
}
6060
}
6161
}

radiance/radiance/src/utils/act_drop.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ impl ActDrop {
3333
let color = [0., 0., 0., value];
3434
let style = ui.push_style_color(imgui::StyleColor::WindowBg, color);
3535
ui.window("actdrop")
36+
.no_decoration()
3637
.position([0., 0.], imgui::Condition::Always)
3738
.size([width, height], imgui::Condition::Always)
3839
.movable(false)

yaobow/packfs/src/ypk/ypk_archive.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,17 @@ impl YpkArchive {
2222
let mut reader = file.lock().unwrap();
2323
let header = YpkHeader::read(&mut reader.deref_mut())?;
2424

25+
let file_end = reader.seek(std::io::SeekFrom::End(0))?;
26+
let entry_list_size = file_end - header.entry_offset;
27+
2528
reader.seek(std::io::SeekFrom::Start(header.entry_offset))?;
29+
let mut entry_list = Vec::with_capacity(entry_list_size as usize);
30+
reader.read_to_end(&mut entry_list);
31+
let mut entry_reader = Cursor::new(entry_list);
32+
2633
let mut entries = Vec::with_capacity(header.entry_count as usize);
2734
for _ in 0..header.entry_count {
28-
entries.push(YpkEntry::read(&mut reader.deref_mut())?);
35+
entries.push(YpkEntry::read(&mut entry_reader)?);
2936
}
3037

3138
let mut entries_hash = HashMap::new();
@@ -57,21 +64,13 @@ impl YpkArchive {
5764
(entry.offset, entry.actual_size, entry.is_compressed == 1)
5865
};
5966

60-
/*let mut reader = self.reader.lock().unwrap();
61-
reader.seek(std::io::SeekFrom::Start(offset))?;
62-
let mut buf = vec![0; actual_size as usize];
63-
reader.read_exact(&mut buf)?;*/
64-
6567
let mut streaming =
6668
StreamingFile::new(self.reader.clone(), offset, offset + actual_size as u64);
6769

6870
if is_compressed {
6971
let buf = zstd::stream::decode_all(&mut streaming)?;
7072
return Ok(MemoryFile::new(Cursor::new(buf)).into());
7173
} else {
72-
/*let mut buf = Vec::new();
73-
streaming.read_to_end(&mut buf)?;
74-
return Ok(MemoryFile::new(Cursor::new(buf)).into());*/
7574
return Ok(streaming.into());
7675
}
7776
}

yaobow/shared/src/loaders/dff.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,19 @@ pub(crate) fn create_geometry_internal(
321321
let group = material_to_indices.entry(t.material).or_insert_with(|| {
322322
let material = &materials[t.material as usize];
323323
let md = if let Some(texture) = material.texture.as_ref() {
324-
let data = texture_resolver.resolve_texture(vfs, path.as_ref(), &texture.name);
325-
if data.is_none() {
326-
log::warn!("Failed to resolve texture {} for {:?}", texture.name, path);
327-
}
328-
radiance::rendering::SimpleMaterialDef::create2(&texture.name, data, true)
324+
radiance::rendering::SimpleMaterialDef::create(
325+
&texture.name,
326+
|name| {
327+
let data =
328+
texture_resolver.resolve_texture(vfs, path.as_ref(), &texture.name);
329+
if data.is_none() {
330+
log::warn!("Failed to resolve texture {} for {:?}", texture.name, path);
331+
}
332+
333+
data.and_then(|data| Some(std::io::Cursor::new(data)))
334+
},
335+
true,
336+
)
329337
} else {
330338
log::debug!("no texture info for material {:?}", path);
331339
radiance::rendering::SimpleMaterialDef::create2("missing", None, true)

yaobow/shared/src/openpal4/asset_loader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ impl AssetLoader {
8383
folder: &str,
8484
file_name: &str,
8585
) -> Option<ComRc<IEntity>> {
86-
let path = format!("/{}{}.dff", folder, file_name);
86+
let path = format!("/{}{}.dff", folder, file_name).replace("\\", "/");
8787
self.try_load_dff(path, object_name.to_string())
8888
}
8989

yaobow/shared/src/openpal4/scene.rs

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,12 @@ impl Pal4Scene {
9797
block_name: &str,
9898
) -> anyhow::Result<Self> {
9999
let scene = asset_loader.load_scene(scene_name, block_name)?;
100-
let clip = asset_loader.try_load_scene_clip(scene_name, block_name);
101-
if let Some(clip) = clip {
102-
scene.add_entity(clip);
100+
101+
if !cfg!(vita) {
102+
let clip = asset_loader.try_load_scene_clip(scene_name, block_name);
103+
if let Some(clip) = clip {
104+
scene.add_entity(clip);
105+
}
103106
}
104107

105108
let clip_na = asset_loader.try_load_scene_clip_na(scene_name, block_name);
@@ -237,30 +240,38 @@ impl Pal4Scene {
237240
continue;
238241
}
239242

240-
let entity = asset_loader.load_object(&object_name, &folder, &file_name);
241-
242-
if let Some(entity) = entity {
243-
entity.set_visible(true);
244-
entity.set_enabled(true);
245-
246-
let scale = entry
247-
.get_common_property(GobCommonProperties::Scale)
248-
.and_then(|s| s.value_f32())
249-
.unwrap_or(1.0);
250-
251-
entity
252-
.transform()
253-
.borrow_mut()
254-
.scale_local(&Vec3::new(scale, scale, scale))
255-
.rotate_axis_angle_local(&Vec3::BACK, entry.rotation[2].to_radians())
256-
.rotate_axis_angle_local(&Vec3::UP, entry.rotation[1].to_radians())
257-
.rotate_axis_angle_local(&Vec3::EAST, entry.rotation[0].to_radians())
258-
.set_position(&Vec3::from(entry.position));
259-
260-
objects.push(entity.clone());
243+
let entity = asset_loader
244+
.load_object(&object_name, &folder, &file_name)
245+
.unwrap_or_else(|| {
246+
log::error!(
247+
"Cannot load object: {:?} {:?} {:?}",
248+
object_name,
249+
folder,
250+
file_name
251+
);
252+
CoreEntity::create(object_name.clone(), false)
253+
});
254+
255+
entity.set_visible(true);
256+
entity.set_enabled(true);
257+
258+
let scale = entry
259+
.get_common_property(GobCommonProperties::Scale)
260+
.and_then(|s| s.value_f32())
261+
.unwrap_or(1.0);
262+
263+
entity
264+
.transform()
265+
.borrow_mut()
266+
.scale_local(&Vec3::new(scale, scale, scale))
267+
.rotate_axis_angle_local(&Vec3::BACK, entry.rotation[2].to_radians())
268+
.rotate_axis_angle_local(&Vec3::UP, entry.rotation[1].to_radians())
269+
.rotate_axis_angle_local(&Vec3::EAST, entry.rotation[0].to_radians())
270+
.set_position(&Vec3::from(entry.position));
271+
272+
objects.push(entity.clone());
261273

262-
scene.add_entity(entity);
263-
}
274+
scene.add_entity(entity);
264275
}
265276
(object_name, folder, file_name) => {
266277
log::error!(

yaobow/shared/src/utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pub fn get_moving_direction(input: Rc<RefCell<dyn InputEngine>>, scene: ComRc<IS
8181
}
8282

8383
let left_y = input.get_axis_state(Axis::LeftStickY).value();
84-
let left_y = if left_y.abs() < 0.4 { 0. } else { left_y };
84+
let left_y = if left_y.abs() < 0.1 { 0. } else { left_y };
8585
local_direction = Vec3::add(&local_direction, &Vec3::new(0., 0., -left_y));
8686

8787
if input.get_key_state(Key::Left).is_down()
@@ -97,7 +97,7 @@ pub fn get_moving_direction(input: Rc<RefCell<dyn InputEngine>>, scene: ComRc<IS
9797
}
9898

9999
let left_x = input.get_axis_state(Axis::LeftStickX).value();
100-
let left_x = if left_x.abs() < 0.4 { 0. } else { left_x };
100+
let left_x = if left_x.abs() < 0.1 { 0. } else { left_x };
101101

102102
local_direction = Vec3::add(&local_direction, &Vec3::new(left_x, 0., 0.));
103103
local_direction.normalize();
@@ -135,7 +135,7 @@ pub fn get_camera_rotation(
135135
}
136136

137137
let right_x = input.get_axis_state(Axis::RightStickX).value();
138-
let right_x = if right_x.abs() < 0.4 { 0. } else { right_x };
138+
let right_x = if right_x.abs() < 0.1 { 0. } else { right_x };
139139

140140
current_rotation -= CAMERA_ROTATE_SPEED * delta_sec * right_x;
141141

yaobow/yaobow/src/main.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ pub fn main() {
2424
init_logger();
2525
register_opengb_video_decoders();
2626

27-
if cfg!(vita) {
27+
#[cfg(vita)]
28+
{
2829
run_openpal4();
29-
} else {
30+
}
31+
32+
#[cfg(not(vita))]
33+
{
3034
let args = std::env::args().collect::<Vec<String>>();
3135
if args.len() <= 1 {
3236
run_title_selection();

0 commit comments

Comments
 (0)