1
0
mirror of synced 2024-12-14 23:32:53 +01:00
bemaniutils/bemani/backend/sdvx/factory.py

85 lines
3.5 KiB
Python
Raw Normal View History

from typing import List, Optional, Type
from bemani.backend.base import Base, Factory
from bemani.backend.sdvx.booth import SoundVoltexBooth
from bemani.backend.sdvx.infiniteinfection import SoundVoltexInfiniteInfection
from bemani.backend.sdvx.gravitywars import SoundVoltexGravityWars
from bemani.backend.sdvx.gravitywars_s1 import SoundVoltexGravityWarsSeason1
from bemani.backend.sdvx.gravitywars_s2 import SoundVoltexGravityWarsSeason2
from bemani.backend.sdvx.heavenlyhaven import SoundVoltexHeavenlyHaven
from bemani.common import Model, VersionConstants
from bemani.data import Config, Data
class SoundVoltexFactory(Factory):
MANAGED_CLASSES: List[Type[Base]] = [
SoundVoltexBooth,
SoundVoltexInfiniteInfection,
SoundVoltexGravityWars,
SoundVoltexHeavenlyHaven,
]
@classmethod
def register_all(cls) -> None:
for gamecode in ["KFC"]:
Base.register(gamecode, SoundVoltexFactory)
@classmethod
def create(
cls,
data: Data,
config: Config,
model: Model,
parentmodel: Optional[Model] = None,
) -> Optional[Base]:
def version_from_date(date: int) -> Optional[int]:
if date < 2013060500:
return VersionConstants.SDVX_BOOTH
elif date >= 2013060500 and date < 2014112000:
return VersionConstants.SDVX_INFINITE_INFECTION
elif date >= 2014112000 and date < 2016122100:
return VersionConstants.SDVX_GRAVITY_WARS
elif date >= 2016122100:
return VersionConstants.SDVX_HEAVENLY_HAVEN
return None
if model.gamecode == "KFC":
if model.version is None:
if parentmodel is None:
return None
# We have no way to tell apart newer versions. However, we can make
# an educated guess if we happen to be summoned for old profile lookup.
if parentmodel.gamecode != "KFC":
return None
parentversion = version_from_date(parentmodel.version)
if parentversion == VersionConstants.SDVX_INFINITE_INFECTION:
return SoundVoltexBooth(data, config, model)
if parentversion == VersionConstants.SDVX_GRAVITY_WARS:
return SoundVoltexInfiniteInfection(data, config, model)
if parentversion == VersionConstants.SDVX_HEAVENLY_HAVEN:
# We return the generic here because this is usually for profile
# checks, which means we only care about existence.
return SoundVoltexGravityWars(data, config, model)
# Unknown older version
return None
version = version_from_date(model.version)
if version == VersionConstants.SDVX_BOOTH:
return SoundVoltexBooth(data, config, model)
if version == VersionConstants.SDVX_INFINITE_INFECTION:
return SoundVoltexInfiniteInfection(data, config, model)
if version == VersionConstants.SDVX_GRAVITY_WARS:
# Determine which season
if model.version < 2015120400:
return SoundVoltexGravityWarsSeason1(data, config, model)
else:
return SoundVoltexGravityWarsSeason2(data, config, model)
if version == VersionConstants.SDVX_HEAVENLY_HAVEN:
return SoundVoltexHeavenlyHaven(data, config, model)
# Unknown game
return None