fix bugs
This commit is contained in:
		
							parent
							
								
									b83fed45df
								
							
						
					
					
						commit
						a49bd2b123
					
				
					 3 changed files with 35 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -3,4 +3,5 @@
 | 
			
		|||
# Note: due to how Godot finds paths, this works best if cwd is this directory
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
./pack_res.gd ++ $@
 | 
			
		||||
BASENAMES=$(find -name 'VA_*.mdd' | sed s@\./@@ | sed s@\.mdd@@ | tr "\n" " ")
 | 
			
		||||
./pack_res.gd ++ $BASENAMES
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ var VertexAnimations = preload("VertexAnimations.gd")
 | 
			
		|||
 | 
			
		||||
func _init():
 | 
			
		||||
	var basenames := OS.get_cmdline_user_args()
 | 
			
		||||
	print(basenames)
 | 
			
		||||
 | 
			
		||||
	var animations = VertexAnimations.new()
 | 
			
		||||
	animations.name = "VertexAnimations"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -122,15 +122,17 @@ fn _write_animation_info(filename: &str, info: AnimationInfo) -> Result<(), Box<
 | 
			
		|||
enum PointState {
 | 
			
		||||
    Unseen,
 | 
			
		||||
    OneValue { point_idx: usize, point: Point },
 | 
			
		||||
    Varying { new_idx: usize },
 | 
			
		||||
    Varying,
 | 
			
		||||
    Reindexed { new_idx: usize },
 | 
			
		||||
}
 | 
			
		||||
use PointState::*;
 | 
			
		||||
impl PointState {
 | 
			
		||||
    fn mask_value(&self) -> f32 {
 | 
			
		||||
        match *self {
 | 
			
		||||
            Unseen => panic!("no point should be unseen"),
 | 
			
		||||
            Varying => panic!("no point should be unindexed"),
 | 
			
		||||
            OneValue { .. } => -1.0,
 | 
			
		||||
            Varying { new_idx, .. } => new_idx as f32,
 | 
			
		||||
            Reindexed { new_idx, .. } => new_idx as f32,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    fn point_changed(a: &Point, b: &Point) -> bool {
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +140,6 @@ impl PointState {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    let basename = std::env::args()
 | 
			
		||||
        .nth(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +153,6 @@ fn main() {
 | 
			
		|||
 | 
			
		||||
    let mut mask_last: Vec<PointState> = vec![Unseen; info.total_points];
 | 
			
		||||
    let pc = MDDSeekableFile::read_frames(mdd_file.try_clone().unwrap()).unwrap();
 | 
			
		||||
    let mut total_varying = 0;
 | 
			
		||||
    for frame in pc {
 | 
			
		||||
        let MDDFrame {
 | 
			
		||||
            point, point_idx, ..
 | 
			
		||||
| 
						 | 
				
			
			@ -165,13 +165,34 @@ fn main() {
 | 
			
		|||
            } => {
 | 
			
		||||
                assert_eq!(old_point_idx, point_idx);
 | 
			
		||||
                if PointState::point_changed(&point, &old_point) {
 | 
			
		||||
                    mask_last[point_idx] = Varying {
 | 
			
		||||
                        new_idx: total_varying,
 | 
			
		||||
                    };
 | 
			
		||||
                    mask_last[point_idx] = Varying;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Varying => {}
 | 
			
		||||
            Reindexed { .. } => unreachable!()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let mut total_varying = 0;
 | 
			
		||||
    for point in mask_last.iter_mut() {
 | 
			
		||||
        if let Varying = point {
 | 
			
		||||
            *point = Reindexed { new_idx: total_varying };
 | 
			
		||||
            total_varying += 1;
 | 
			
		||||
        }
 | 
			
		||||
    }    
 | 
			
		||||
            Varying { .. } => {}
 | 
			
		||||
 | 
			
		||||
    // Check that the varing indices are increasing w.r.t. point_idx
 | 
			
		||||
    let mut mask_iter = mask_last.iter().filter_map(|x| {
 | 
			
		||||
        if let &Reindexed { new_idx } = x {
 | 
			
		||||
            Some(new_idx)
 | 
			
		||||
        } else {
 | 
			
		||||
            None
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    if let Some(mut prev_idx) = mask_iter.next() {
 | 
			
		||||
        for next_idx in mask_iter {
 | 
			
		||||
            assert_eq!(prev_idx + 1, next_idx);
 | 
			
		||||
            prev_idx = next_idx;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -199,9 +220,9 @@ fn main() {
 | 
			
		|||
            point_idx, point, ..
 | 
			
		||||
        } = frame.unwrap();
 | 
			
		||||
        match mask_last[point_idx] {
 | 
			
		||||
            Unseen => panic!(),
 | 
			
		||||
            Varying | Unseen => panic!(),
 | 
			
		||||
            OneValue { .. } => None,
 | 
			
		||||
            Varying { .. } => Some(point),
 | 
			
		||||
            Reindexed { .. } => Some(point),
 | 
			
		||||
        }
 | 
			
		||||
    }));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue