-life_loop(X, Y, Generation, Time, Board) ->
- ok = do_print_status(X, Y, Generation, Time),
- ok = do_print_board(Board),
+life_loop(
+ #state{x = X
+ ,y = Y
+ ,n = N
+ ,bar = Bar
+ ,board = Board
+ ,gen_count = GenCount
+ ,gen_duration = Time
+ ,print_time = LastPrintTime
+ }=State) ->
+
+ {PrintTime, ok} = timer:tc(
+ fun() ->
+ do_print_screen(Board, Bar, X, Y, N, GenCount, Time, LastPrintTime)
+ end
+ ),
+
+ {NewTime, NewBoard} = timer:tc(
+ fun() ->
+ next_generation(X, Y, Board)
+ end
+ ),
+
+ NewState = State#state{board = NewBoard
+ ,gen_count = GenCount + 1
+ ,gen_duration = NewTime
+ ,print_time = PrintTime
+ },