def analyze_replay_file(replay_path: str, output_path: str = None, overwrite=True, controls: ControlsCreator = None, sanity_check: SanityChecker = None, analysis_per_goal=False): """ Decompile and analyze a replay file. :param replay_path: Path to replay file :param output_path: Path to write JSON :param overwrite: If to overwrite JSON (suggest True if speed is not an issue) :param controls: Generate controls from the replay using our best guesses (ALPHA) :param sanity_check: Run sanity check to make sure we analyzed correctly (BETA) :param analysis_per_goal: Runs the analysis per a goal instead of the replay as a whole :return: AnalysisManager of game with analysis. """ _json = decompile_replay(replay_path, output_path=output_path, overwrite=overwrite) game = Game() game.initialize(loaded_json=_json) # get_controls(game) # TODO: enable and optimise. if sanity_check is not None: sanity_check.check_game(game) if analysis_per_goal: analysis = PerGoalAnalysis(game) else: analysis = AnalysisManager(game) analysis.create_analysis() if controls is not None: controls.get_controls(game) return analysis
def analyze_replay_file(replay_path: str, output_path: str = None, overwrite=True, controls: ControlsCreator = None, sanity_check: SanityChecker = None, analysis_per_goal=False, rattletrap_path: str = None, logging_level=logging.NOTSET, calculate_intensive_events: bool = False): """ Decompile and analyze a replay file. :param replay_path: Path to replay file :param output_path: Path to write JSON :param overwrite: If to overwrite JSON (suggest True if speed is not an issue) :param controls: Generate controls from the replay using our best guesses (ALPHA) :param sanity_check: Run sanity check to make sure we analyzed correctly (BETA) :param analysis_per_goal: Runs the analysis per a goal instead of the replay as a whole :param rattletrap_path: Custom location for rattletrap executable. Path to folder. :param force_full_analysis: If True full analysis will be performed even if checks say it should not. :param logging_level: Sets the logging level globally across carball :param calculate_intensive_events: Indicates if expensive calculations should run to include additional stats. :return: AnalysisManager of game with analysis. """ if logging_level != logging.NOTSET: logging.getLogger('carball').setLevel(logging_level) _json = decompile_replay(replay_path, output_path=output_path, overwrite=overwrite, rattletrap_path=rattletrap_path) game = Game() game.initialize(loaded_json=_json) # get_controls(game) # TODO: enable and optimise. if sanity_check is not None: sanity_check.check_game(game) if analysis_per_goal: analysis = PerGoalAnalysis(game) else: analysis = AnalysisManager(game) analysis.create_analysis( calculate_intensive_events=calculate_intensive_events) if controls is not None: controls.get_controls(game) return analysis