Example #1
0
class ConfigReader():
    def __init__(self, config_file):
            self.super_cc_loc = None
            self.tile_world_loc = None
            self.super_cc_save_file = None
            self.tile_world_save_file = None
            self.puzzle_script_save_file = None
            self.engine = None
            self.level_count = None
            self.play_or_generate = None
            self.ask_for_rating = None
            self.name = None
            self.ratings_file = None
            self.draw_graph = None
            self.aesthetic = None
            self.generate_level_count = None
            self.keep_level_count = None

            with open(config_file) as f:
                config = json.load(f)
                self.from_config_data(config)

                self.aesthetic = AestheticSettings()
                self.aesthetic.from_config_data(config['aesthetic'])


    def from_config_data(self, config):
            for setting in self.__dict__:
                if setting not in config:
                    raise LookupError("You are missing '{}' in your config file!".format(setting))
                self.__dict__[setting] = config[setting]
    def test_from_config_data(self):
        config = {
            "level_space_aesthetic": {
                "rectangle_count": 1,
                "rectangle_min": 2,
                "rectangle_max": 3,
                "noise_percentage": 0.4,
                "noise_empty_percentage": 0.6,
                "x_mirror_probability": 0.7,
                "y_mirror_probability": 0.8
            },
            "mission_graph_aesthetic": {
                "max_depth": 1,
                "min_depth": 2,
                "branch_probability": [0.3, 0.4],
                "max_multi_lock_count": 5,
                "max_locks_per_multi_lock": 6,
                "collectable_in_room_probability": 0.7,
                "insert_room_probability": 0.8,
                "key_is_sokoban_probability": 0.9
            },
            "tweaker_aesthetic": {
                "should_fill_unused_space": 0.5
            },
            "mission_aesthetic": {
                "hazard_spread_probability": {
                    "water": 0.1,
                    "fire": 0.2
                },
                "single_lock_is_hazard_probability": 0.3,
                "max_seconds_per_move": 4,
                "min_seconds_per_move": 5
            }
        }

        aesthetic = AestheticSettings()
        aesthetic.from_config_data(config)
        self.assertEqual(aesthetic.level_space_aesthetic.rectangle_count, 1)
        self.assertEqual(aesthetic.level_space_aesthetic.rectangle_min, 2)
        self.assertEqual(aesthetic.level_space_aesthetic.rectangle_max, 3)
        self.assertEqual(aesthetic.level_space_aesthetic.noise_percentage, 0.4)
        self.assertEqual(
            aesthetic.level_space_aesthetic.noise_empty_percentage, 0.6)
        self.assertEqual(aesthetic.level_space_aesthetic.x_mirror_probability,
                         0.7)
        self.assertEqual(aesthetic.level_space_aesthetic.y_mirror_probability,
                         0.8)

        self.assertEqual(aesthetic.mission_graph_aesthetic.max_depth, 1)
        self.assertEqual(aesthetic.mission_graph_aesthetic.min_depth, 2)
        self.assertEqual(aesthetic.mission_graph_aesthetic.branch_probability,
                         [0.3, 0.4])
        self.assertEqual(
            aesthetic.mission_graph_aesthetic.max_multi_lock_count, 5)
        self.assertEqual(
            aesthetic.mission_graph_aesthetic.max_locks_per_multi_lock, 6)
        self.assertEqual(
            aesthetic.mission_graph_aesthetic.collectable_in_room_probability,
            0.7)
        self.assertEqual(
            aesthetic.mission_graph_aesthetic.insert_room_probability, 0.8)
        self.assertEqual(
            aesthetic.mission_graph_aesthetic.key_is_sokoban_probability, 0.9)

        self.assertEqual(aesthetic.tweaker_aesthetic.should_fill_unused_space,
                         0.5)

        self.assertEqual(
            aesthetic.mission_aesthetic.hazard_spread_probability[Tiles.water],
            0.1)
        self.assertEqual(
            aesthetic.mission_aesthetic.hazard_spread_probability[Tiles.fire],
            0.2)
        self.assertEqual(
            aesthetic.mission_aesthetic.single_lock_is_hazard_probability, 0.3)
        self.assertEqual(aesthetic.mission_aesthetic.max_seconds_per_move, 4)
        self.assertEqual(aesthetic.mission_aesthetic.min_seconds_per_move, 5)