[vlc-devel] [PATCH 1/2] Puzzle: fix shapes bug when changing game mode
Jean-Baptiste Kempf
jb at videolan.org
Thu Aug 15 12:24:44 CEST 2013
Applied, after much manual intervention...
Le 26/07/2013 20:02, Vianney Boyer a écrit :
>
>
> Hi,
>
> You'll find below and in 1 additional patches the puzzle video filter
> bug fix and GUI.
> This is the same as previous one but separated from the other new
> modules (oldmovie, vhs & freeze)
>
> However it has to be applied after freeze, oldmovie and vhs patch set
>
>
> This fix regenerates the shapes when you change the game mode. However
> you'll see straight shapes.
>
> Regards
>
> Vianney
>
>
>
> ---
> modules/video_filter/puzzle_mgt.c | 47
> +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/modules/video_filter/puzzle_mgt.c
> b/modules/video_filter/puzzle_mgt.c
> index b6a9862..8f2fd19 100644
> --- a/modules/video_filter/puzzle_mgt.c
> +++ b/modules/video_filter/puzzle_mgt.c
> @@ -957,4 +957,51 @@ void puzzle_load( filter_t *p_filter, save_game_t
> *ps_save_game)
> break;
> }
> }
> +
> + for (uint32_t i_pce=0; i_pce < p_sys->s_allocated.i_pieces_nbr;
> i_pce++) {
> + /* redefine shapes */
> + uint32_t i_left_pce = 0;
> + uint32_t i_right_pce = 6;
> + uint32_t i_top_pce = 2;
> + uint32_t i_btm_pce = 4;
> +
> + uint32_t i_pce_pair = 0;
> + for (int32_t i_row = 0; i_row < p_sys->s_allocated.i_rows; i_row++)
> + for (int32_t i_col = 0; i_col < p_sys->s_allocated.i_cols;
> i_col++) {
> + if (p_sys->ps_pieces[i_pce].i_original_row ==
> p_sys->ps_pieces[i_pce_pair].i_original_row) {
> + if (p_sys->ps_pieces[i_pce].i_original_col ==
> p_sys->ps_pieces[i_pce_pair].i_original_col - 1)
> + i_right_pce = i_pce_pair;
> + else if (p_sys->ps_pieces[i_pce].i_original_col ==
> p_sys->ps_pieces[i_pce_pair].i_original_col + 1)
> + i_left_pce = i_pce_pair;
> + }
> + else if (p_sys->ps_pieces[i_pce].i_original_col ==
> p_sys->ps_pieces[i_pce_pair].i_original_col) {
> + if (p_sys->ps_pieces[i_pce].i_original_row ==
> p_sys->ps_pieces[i_pce_pair].i_original_row - 1)
> + i_btm_pce = i_pce_pair;
> + else if (p_sys->ps_pieces[i_pce].i_original_row ==
> p_sys->ps_pieces[i_pce_pair].i_original_row + 1)
> + i_top_pce = i_pce_pair;
> + }
> + i_pce_pair++;
> + }
> +
> + if ((p_sys->ps_pieces[i_pce].i_left_shape == 0) &&
> (p_sys->ps_pieces[i_pce].i_original_col != 0)) {
> + p_sys->ps_pieces[i_left_pce].i_right_shape = 6 + 8 + 8*((
> (unsigned) vlc_mrand48()) % ( SHAPES_QTY ) ) + (vlc_mrand48() & 0x01);
> + p_sys->ps_pieces[i_pce].i_left_shape =
> (p_sys->ps_pieces[i_left_pce].i_right_shape - 6 ) ^ 0x01;
> + }
> +
> + if ((p_sys->ps_pieces[i_pce].i_right_shape == 6) &&
> (p_sys->ps_pieces[i_pce].i_original_col != p_sys->s_allocated.i_cols-1)) {
> + p_sys->ps_pieces[i_pce].i_right_shape = 6 + 8 + 8*((
> (unsigned) vlc_mrand48()) % ( SHAPES_QTY ) ) + (vlc_mrand48() & 0x01);
> + p_sys->ps_pieces[i_right_pce].i_left_shape =
> (p_sys->ps_pieces[i_pce].i_right_shape - 6 ) ^ 0x01;
> + }
> +
> + if ((p_sys->ps_pieces[i_pce].i_top_shape == 2) &&
> (p_sys->ps_pieces[i_pce].i_original_row != 0)) {
> + p_sys->ps_pieces[i_top_pce].i_btm_shape = 4 + 8 + 8*((
> (unsigned) vlc_mrand48()) % ( SHAPES_QTY ) ) + (vlc_mrand48() & 0x01);
> + p_sys->ps_pieces[i_pce].i_top_shape =
> (p_sys->ps_pieces[i_top_pce].i_btm_shape - 2 ) ^ 0x01;
> + }
> +
> + if ((p_sys->ps_pieces[i_pce].i_btm_shape == 4) &&
> (p_sys->ps_pieces[i_pce].i_original_row != p_sys->s_allocated.i_rows-1)) {
> + p_sys->ps_pieces[i_pce].i_btm_shape = 4 + 8 + 8*((
> (unsigned) vlc_mrand48()) % ( SHAPES_QTY ) ) + (vlc_mrand48() & 0x01);
> + p_sys->ps_pieces[i_btm_pce].i_top_shape =
> (p_sys->ps_pieces[i_pce].i_btm_shape - 2 ) ^ 0x01;
> + }
> +
> + }
> }
> --
> 1.8.1.2
>
>
>
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel
>
--
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device
More information about the vlc-devel
mailing list