def __init__(self, data, dim=TOWER_MENU_DIM):
     super().__init__()
     self.dim = self.width, self.height = dim
     image, display_name, lv, cost, dmg, acckfreq, tower_range, level_up_cost, loc = data
     self.contents = {
         "icon": (bt.TowerIcon((160, 160), "Tower_img",
                               image), (20, 820), (160, 160)),
         "name": (bt.TowerName((380, 50), "name",
                               display_name), (210, 810), (280, 50)),
         "LV": (bt.TowerLV((185, 33), "LV", lv), (210, 870), (185, 33)),
         "cost": (bt.TowerCost((185, 33), "Tower Cost",
                               cost), (405, 870), (185, 33)),
         "dmg": (bt.TowerDmg((185, 33), "Tower Dmg",
                             dmg), (210, 913), (185, 33)),
         "acckfreq": (bt.TowerAcckFreq((185, 33), "Tower attk freq",
                                       acckfreq), (405, 913), (185, 33)),
         "item": (bt.TowerItems((185, 33), "Tower items",
                                None), (210, 956), (185, 33)),
         "range": (bt.TowerRange((185, 33), "Range",
                                 tower_range), (405, 956), (185, 33)),
         "level up cost": (bt.TowerLevelUp(
             (160, 120), level_up_cost,
             (LEVEL_UP, (level_up_cost, loc))), (620, 820), (160, 120)),
         "exit": (bt.Exit((100, 40), "return",
                          (CHANGE_MENU, (LAYER_IN_GAME_MENU, None))),
                  (680, 940), (100, 40)),
     }
 def __init__(self, dim=TUTORIAL_DIM):
     super().__init__()
     self.dim = self.width, self.height = dim
     self.contents = {
         "exit": (bt.Exit((100, 40), "Return",
                          (RETURN, None)), (580, 740), (100, 40)),
     }
 def __init__(self, dim=LICENSE_MENU_DIM):
     super().__init__()
     self.dim = self.width, self.height = dim
     self.contents = {
         "exit": (bt.Exit((100, 40), "Return",
                          (RETURN, None)), (570, 740), (100, 40)),
     }
     self._make_texts()
 def __init__(self, dim=PURCHASE_MENU_DIM):
     super().__init__()
     self.dim = self.width, self.height = dim
     self.contents = {
         "DMG Tower Lv1": (bt.DMGTower(self.BUTTON_DIM, "DMG Tower Lv1", (PURCHASE, DMG_TOWER)), \
                           (self.BUTTON_X_CUT + self.BUTTON_DISTANCE, self.BUTTON_Y_CUT + self.BUTTON_GAP),
                           self.BUTTON_DIM),
         "CC Tower Lv1": (bt.CCTower(self.BUTTON_DIM, "Ranged Tower Lv1", (PURCHASE, CC_TOWER)), \
                          (self.BUTTON_X_CUT + 2 * self.BUTTON_DISTANCE + self.BUTTON_WIDTH,
                           self.BUTTON_Y_CUT + self.BUTTON_GAP), self.BUTTON_DIM),
         "exit": (bt.Exit((100, 40), "Return",(CHANGE_MENU, (LAYER_IN_GAME_MENU, None))), (680, 940), (100, 40)),
     }
 def __init__(self, data, dim=IN_GAME_MENU_DIM):
     """item has not been well implemented yet"""
     health, money, wave = data
     super(GameMenu, self).__init__()
     self.dim = self.width, self.height = dim
     self.contents = {
         "health bar":
         (bt.HealthBar(IN_GAME_MENU_LEFT_HEALTH_DIM, "Live",
                       health), (20, 820), IN_GAME_MENU_LEFT_HEALTH_DIM),
         "money bar":
         (bt.MoneyBar(IN_GAME_MENU_LEFT_MONEY_DIM, "Gold",
                      money), (210, 820), IN_GAME_MENU_LEFT_MONEY_DIM),
         "wave bar": (bt.WaveBar(IN_GAME_MENU_LEFT_WAVE_DIM, "Wave", wave),
                      (400, 820), IN_GAME_MENU_LEFT_WAVE_DIM),
         "purchase":
         (bt.Purchase(IN_GAME_MENU_LEFT_PURCHASE_DIM, "Shop",
                      (CHANGE_MENU, (LAYER_PURCHASE_MENU, None))),
          (20, 910), IN_GAME_MENU_LEFT_PURCHASE_DIM),
         "items": (bt.Items(IN_GAME_MENU_LEFT_ITEMS_DIM, "Items",
                            None), (220, 910), IN_GAME_MENU_LEFT_ITEMS_DIM),
         "next wave": (bt.NextWave(self.RIGHT_BUTTON_DIM, "Next Wave",
                                   (NEXT_WAVE, None)),
                       (self.RIGHT_X_CUT + self.RIGHT_BUTTON_DISTANCE,
                        self.RIGHT_Y_CUT + self.RIGHT_BUTTON_GAP + 800),
                       self.RIGHT_BUTTON_DIM),
         "save":
         (bt.SaveGame(self.RIGHT_BUTTON_DIM, "Save Game", (SAVE, None)),
          (self.RIGHT_X_CUT + self.RIGHT_BUTTON_DISTANCE, self.RIGHT_Y_CUT +
           2 * self.RIGHT_BUTTON_GAP + 1 * self.RIGHT_BUTTON_HEIGHT + 800),
          self.RIGHT_BUTTON_DIM),
         "setting":
         (bt.Setting(self.RIGHT_BUTTON_DIM, "Setting",
                     (NEW_LAYER,
                      (LAYER_SETTING_MENU, LAYER_SETTING_MENU,
                       SETTING_MENU_POS, SETTING_MENU_DIM))),
          (self.RIGHT_X_CUT + self.RIGHT_BUTTON_DISTANCE, self.RIGHT_Y_CUT +
           3 * self.RIGHT_BUTTON_GAP + 2 * self.RIGHT_BUTTON_HEIGHT + 800),
          self.RIGHT_BUTTON_DIM),
         "exit": (bt.Exit(self.RIGHT_BUTTON_DIM, "Return",
                          (RETURN_FROM_GAME, None)),
                  (self.RIGHT_X_CUT + self.RIGHT_BUTTON_DISTANCE,
                   self.RIGHT_Y_CUT + 4 * self.RIGHT_BUTTON_GAP +
                   3 * self.RIGHT_BUTTON_HEIGHT + 800),
                  self.RIGHT_BUTTON_DIM),
     }
 def __init__(self, key_config, dim=SETTING_MENU_DIM):
     super().__init__()
     pause, newwave, retrn, sound_on = key_config
     self.dim = self.width, self.height = dim
     self.contents = {
         "title": (bt.Text(40, "Setting", bold=True,
                           italic=True), (20, 20), (0, 0)),
         "PAUSE":
         (bt.Pause(self.BUTTON_DIM, "Pause",
                   ""), (20, 20 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "pause inp": (bt.SetPause(self.BUTTON_DIM,
                                   FULL_REVERSED_KEYBOARD.get(pause, ""),
                                   (SET_KEY, PAUSE)),
                       (105, 20 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "NEW WAVE":
         (bt.NewWave(self.BUTTON_DIM, "New Wave",
                     ""), (220, 20 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "next wave inp":
         (bt.SetNewWave(self.BUTTON_DIM,
                        FULL_REVERSED_KEYBOARD.get(newwave, ""),
                        (SET_KEY, NEXT_WAVE)),
          (305, 20 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "RETURN": (bt.Return(self.BUTTON_DIM, "Return", ""),
                    (20, 70 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "return inp": (bt.SetReturn(self.BUTTON_DIM,
                                     FULL_REVERSED_KEYBOARD.get(retrn, ""),
                                     (SET_KEY, RETURN)),
                        (105, 70 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "volume": (bt.Volume(self.BUTTON_DIM, "Volume", ""),
                    (20, 120 + self.BUTTON_Y_CUT), self.BUTTON_DIM),
         "volume inp": (bt.SetVolume((275, 30), sound_on,
                                     (SET_VOLUME, None)),
                        (105, 120 + self.BUTTON_Y_CUT), (275, 30)),
         "exit": (bt.Exit(
             (100, 40), "Return",
             (RETURN, None)), (280, 160 + self.BUTTON_Y_CUT), (100, 40)),
     }
     self._tem_command_dict = {}