125 lines
4.6 KiB
Python
125 lines
4.6 KiB
Python
SKILL_SCORE_DICT = {
|
|
".12--1<": 2.0,
|
|
".12--1o": 1.7,
|
|
".41/": 0.6,
|
|
".8-1<": 1.3,
|
|
".8-1o": 1.1,
|
|
".8-3<": 1.5,
|
|
".8-3o": 1.3,
|
|
".821<": 1.5,
|
|
"4.-/": 0.6,
|
|
"8.--/": 1.0,
|
|
"8.--<": 1.2,
|
|
"8.--o": 1.0,
|
|
"8.11<": 1.4,
|
|
"8.11o": 1.2,
|
|
"8.22/": 1.6,
|
|
"8.22o": 1.4,
|
|
"8.31<": 1.6,
|
|
}
|
|
|
|
FRONTWARD = 1
|
|
BACKWARD = 0
|
|
|
|
|
|
class Skill:
|
|
"""Class skill
|
|
|
|
Each object `skill` is composed by the following fields :
|
|
- numeric_code: cleaned string of skill numeric code
|
|
- direction: direction of the skill (frontward or backward)
|
|
- rotation_quantity: summersault quantity (1, 2, 3 or 4)
|
|
- quart_summersault_rotation: quantity of quart sommersault rotation (from 1 to 16)
|
|
- half_twist_rotation: quantity of half twist rotation (from 0 to 9)
|
|
- position: position of the skill (o, < or /)
|
|
- difficulty: difficulty value of the skill
|
|
- twisting: twisting part of the skill
|
|
- twist_in_quantity:
|
|
- twist_out_quantity:
|
|
|
|
"""
|
|
|
|
def __get_direction(self):
|
|
if self.numeric_code.startswith("."):
|
|
self.direction = FRONTWARD
|
|
elif self.numeric_code.find("."):
|
|
self.direction = BACKWARD
|
|
else:
|
|
self.direction = None
|
|
|
|
def __get_position(self):
|
|
position = self.numeric_code[-1:]
|
|
if position == "o" or position == "<" or position == "/":
|
|
self.position = position
|
|
else:
|
|
self.position = None
|
|
|
|
def __get_rotation_quantity(self):
|
|
rotation_quantity = len(self.numeric_code)
|
|
self.twisting_start_position = 2
|
|
if rotation_quantity == 4:
|
|
self.rotation_quantity = 1
|
|
elif rotation_quantity == 5:
|
|
self.rotation_quantity = 2
|
|
elif rotation_quantity == 7:
|
|
self.rotation_quantity = 3
|
|
self.twisting_start_position = 3
|
|
elif rotation_quantity == 8:
|
|
self.rotation_quantity = 4
|
|
self.twisting_start_position = 3
|
|
else:
|
|
self.rotation_quantity = None
|
|
self.twist_in_quantity = None
|
|
self.twist_out_quantity = None
|
|
self.twisting_start_position = None
|
|
print(f"Unknow skill: {self.numeric_code}")
|
|
|
|
def __get_twisting_part(self):
|
|
self.twisting = self.numeric_code[self.twisting_start_position : -1]
|
|
|
|
def __get_quart_sommersault_rotation(self):
|
|
if self.rotation_quantity == 1 or self.rotation_quantity == 2:
|
|
if self.direction == FRONTWARD:
|
|
self.quart_summersault_rotation = self.numeric_code[1]
|
|
else:
|
|
self.quart_summersault_rotation = self.numeric_code[0]
|
|
elif self.rotation_quantity == 3 or self.rotation_quantity == 4:
|
|
if self.direction == FRONTWARD:
|
|
self.quart_summersault_rotation = self.numeric_code[1:3]
|
|
else:
|
|
self.quart_summersault_rotation = self.numeric_code[0:2]
|
|
else:
|
|
self.quart_summersault_rotation = None
|
|
|
|
def __get_half_twist_rotation(self):
|
|
self.half_twist_rotation = 0
|
|
for x in self.twisting:
|
|
if x != "-":
|
|
self.half_twist_rotation += int(x)
|
|
|
|
def __get_difficulty_value(self):
|
|
self.difficulty = int(self.half_twist_rotation) * 0.1
|
|
self.difficulty += int(self.quart_summersault_rotation) * 0.1
|
|
self.difficulty += (int(self.quart_summersault_rotation) // 4) * 0.1
|
|
self.difficulty += (int(self.quart_summersault_rotation) // 12) * 0.1
|
|
self.difficulty += (int(self.quart_summersault_rotation) // 16) * 0.1
|
|
if self.position == "<" or self.position == "/":
|
|
self.difficulty += (int(self.quart_summersault_rotation) // 4) * 0.1
|
|
|
|
def __init__(self, skill_string):
|
|
self.numeric_code = skill_string.strip().replace("\s", "")
|
|
self.__get_direction()
|
|
self.__get_position()
|
|
self.__get_rotation_quantity()
|
|
self.__get_twisting_part()
|
|
self.__get_quart_sommersault_rotation()
|
|
self.__get_half_twist_rotation()
|
|
self.__get_difficulty_value()
|
|
self.twist_in_quantity = 0 if self.twisting[0] == "-" else int(self.twisting[0])
|
|
self.twist_out_quantity = (
|
|
0 if self.twisting[-1:] == "-" else int(self.twisting[-1:])
|
|
)
|
|
|
|
def __str__(self):
|
|
return f"{self.numeric_code}: {self.quart_summersault_rotation} quart of {self.direction} with {self.half_twist_rotation} in {self.position} position (difficulty: {self.difficulty})."
|