StarRailCopilot/tasks/rogue/route/model.py

162 lines
3.7 KiB
Python
Raw Normal View History

from functools import cached_property
from typing import Any
2023-10-01 15:03:57 +00:00
from pydantic import BaseModel, RootModel
from tasks.map.route.model import RouteModel
class RogueWaypointModel(BaseModel):
"""
{
"domain": "Combat",
"route": "Herta_StorageZone_F1_X252Y84",
"waypoint": "spawn",
"index": 0,
"file": "./screenshots/rogue/Combat/Herta_StorageZone_F1_X252Y84/route/spawn.png",
"plane": "Herta_StorageZone",
"floor": "F1",
"position": [
252.8,
84.8
],
"direction": 300.1,
"rotation": 299
},
"""
domain: str
route: str
waypoint: str
index: int
file: str
plane: str
floor: str
position: tuple[float, float]
direction: float
rotation: int
class Config:
ignored_types = (cached_property,)
def model_post_init(self, __context: Any) -> None:
if self.waypoint == 'exit':
self.waypoint = 'exit_'
@cached_property
2023-10-01 15:03:57 +00:00
def plane_floor(self):
return f'{self.plane}_{self.floor}'
@cached_property
2023-10-01 15:03:57 +00:00
def positionXY(self):
x, y = int(self.position[0]), int(self.position[1])
return f'X{x}Y{y}'
@cached_property
2023-10-01 15:03:57 +00:00
def is_spawn(self) -> bool:
return self.waypoint.startswith('spawn')
@cached_property
2023-10-01 15:03:57 +00:00
def is_exit(self) -> bool:
return self.waypoint.startswith('exit_')
@cached_property
def is_exit1(self) -> bool:
return self.waypoint.startswith('exit1')
@cached_property
def is_exit2(self) -> bool:
return self.waypoint.startswith('exit2')
@cached_property
def is_exit_door(self) -> bool:
return self.is_exit1 or self.is_exit2
@cached_property
def is_middle(self) -> bool:
return not self.is_spawn and not self.is_exit_door and not self.is_exit_door
2023-10-01 15:03:57 +00:00
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainBoss(self):
return self.domain == 'Boss'
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainCombat(self):
return self.domain == 'Combat'
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainElite(self):
return self.domain == 'Elite'
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainEncounter(self):
return self.domain == 'Encounter'
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainOccurrence(self):
return self.domain == 'Occurrence'
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainRespite(self):
return self.domain == 'Respite'
@cached_property
2023-10-01 15:03:57 +00:00
def is_DomainTransaction(self):
return self.domain == 'Transaction'
RogueWaypointListModel = RootModel[list[RogueWaypointModel]]
class RogueRouteModel(RouteModel):
"""
{
"name": "Boss_Luofu_ArtisanshipCommission_F1_X506Y495",
"domain": "Boss",
"route": "route.rogue.Boss.Luofu_ArtisanshipCommission_F1:Luofu_ArtisanshipCommission_F1_X506Y495",
"plane": "Luofu_ArtisanshipCommission",
"floor": "F1",
"position": [
506.0,
495.4
]
},
"""
domain: str
@property
def plane_floor(self):
return f'{self.plane}_{self.floor}'
@property
def is_DomainBoss(self):
return self.domain == 'Boss'
@property
def is_DomainCombat(self):
return self.domain == 'Combat'
@property
def is_DomainElite(self):
return self.domain == 'Elite'
@property
def is_DomainEncounter(self):
return self.domain == 'Encounter'
@property
def is_DomainOccurrence(self):
return self.domain == 'Occurrence'
@property
def is_DomainRespite(self):
return self.domain == 'Respite'
@property
def is_DomainTransaction(self):
return self.domain == 'Transaction'
RogueRouteListModel = RootModel[list[RogueRouteModel]]