TraSCA/skill.py

125 lines
4.6 KiB
Python
Raw Normal View History

2022-12-29 11:50:47 +01:00
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 :
2022-12-29 21:41:30 +01:00
- 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:
2022-12-29 11:50:47 +01:00
"""
2022-12-29 21:41:30 +01:00
def __get_direction(self):
if self.numeric_code.startswith("."):
2022-12-29 11:50:47 +01:00
self.direction = FRONTWARD
2022-12-29 21:41:30 +01:00
elif self.numeric_code.find("."):
2022-12-29 11:50:47 +01:00
self.direction = BACKWARD
else:
2022-12-29 21:41:30 +01:00
self.direction = None
2022-12-29 11:50:47 +01:00
2022-12-29 21:41:30 +01:00
def __get_position(self):
position = self.numeric_code[-1:]
2022-12-29 11:50:47 +01:00
if position == "o" or position == "<" or position == "/":
self.position = position
else:
self.position = None
2022-12-29 21:41:30 +01:00
def __get_rotation_quantity(self):
rotation_quantity = len(self.numeric_code)
self.twisting_start_position = 2
2022-12-29 11:50:47 +01:00
if rotation_quantity == 4:
self.rotation_quantity = 1
elif rotation_quantity == 5:
self.rotation_quantity = 2
elif rotation_quantity == 7:
self.rotation_quantity = 3
2022-12-29 21:41:30 +01:00
self.twisting_start_position = 3
2022-12-29 11:50:47 +01:00
elif rotation_quantity == 8:
self.rotation_quantity = 4
2022-12-29 21:41:30 +01:00
self.twisting_start_position = 3
2022-12-29 11:50:47 +01:00
else:
self.rotation_quantity = None
self.twist_in_quantity = None
self.twist_out_quantity = None
2022-12-29 21:41:30 +01:00
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:])
)
2022-12-29 11:50:47 +01:00
def __str__(self):
2022-12-29 21:41:30 +01:00
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})."