87 lines
3.4 KiB
Python
87 lines
3.4 KiB
Python
from typing import List, Optional, Type
|
|
|
|
from bemani.backend.base import Base, Factory
|
|
from bemani.backend.reflec.reflecbeat import ReflecBeat
|
|
from bemani.backend.reflec.limelight import ReflecBeatLimelight
|
|
from bemani.backend.reflec.colette import ReflecBeatColette
|
|
from bemani.backend.reflec.groovin import ReflecBeatGroovin
|
|
from bemani.backend.reflec.volzza import ReflecBeatVolzza
|
|
from bemani.backend.reflec.volzza2 import ReflecBeatVolzza2
|
|
from bemani.common import Model, VersionConstants
|
|
from bemani.data import Config, Data
|
|
|
|
|
|
class ReflecBeatFactory(Factory):
|
|
|
|
MANAGED_CLASSES: List[Type[Base]] = [
|
|
ReflecBeat,
|
|
ReflecBeatLimelight,
|
|
ReflecBeatColette,
|
|
ReflecBeatGroovin,
|
|
ReflecBeatVolzza,
|
|
ReflecBeatVolzza2,
|
|
]
|
|
|
|
@classmethod
|
|
def register_all(cls) -> None:
|
|
for gamecode in ["KBR", "LBR", "MBR"]:
|
|
Base.register(gamecode, ReflecBeatFactory)
|
|
|
|
@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 < 2014060400:
|
|
return VersionConstants.REFLEC_BEAT_COLETTE
|
|
if date >= 2014060400 and date < 2015102800:
|
|
return VersionConstants.REFLEC_BEAT_GROOVIN
|
|
if date >= 2015102800 and date < 2016032400:
|
|
return VersionConstants.REFLEC_BEAT_VOLZZA
|
|
if date >= 2016032400 and date < 2016120100:
|
|
return VersionConstants.REFLEC_BEAT_VOLZZA_2
|
|
if date >= 2016120100:
|
|
return VersionConstants.REFLEC_BEAT_REFLESIA
|
|
return None
|
|
|
|
if model.gamecode == "KBR":
|
|
return ReflecBeat(data, config, model)
|
|
if model.gamecode == "LBR":
|
|
return ReflecBeatLimelight(data, config, model)
|
|
if model.gamecode == "MBR":
|
|
if model.version is None:
|
|
if parentmodel is None:
|
|
return None
|
|
|
|
if parentmodel.gamecode not in ["KBR", "LBR", "MBR"]:
|
|
return None
|
|
parentversion = version_from_date(parentmodel.version)
|
|
if parentversion == VersionConstants.REFLEC_BEAT_COLETTE:
|
|
return ReflecBeatLimelight(data, config, model)
|
|
if parentversion == VersionConstants.REFLEC_BEAT_GROOVIN:
|
|
return ReflecBeatColette(data, config, model)
|
|
if parentversion == VersionConstants.REFLEC_BEAT_VOLZZA:
|
|
return ReflecBeatGroovin(data, config, model)
|
|
if parentversion == VersionConstants.REFLEC_BEAT_VOLZZA_2:
|
|
return ReflecBeatVolzza(data, config, model)
|
|
|
|
# Unknown older version
|
|
return None
|
|
|
|
version = version_from_date(model.version)
|
|
if version == VersionConstants.REFLEC_BEAT_COLETTE:
|
|
return ReflecBeatColette(data, config, model)
|
|
if version == VersionConstants.REFLEC_BEAT_GROOVIN:
|
|
return ReflecBeatGroovin(data, config, model)
|
|
if version == VersionConstants.REFLEC_BEAT_VOLZZA:
|
|
return ReflecBeatVolzza(data, config, model)
|
|
if version == VersionConstants.REFLEC_BEAT_VOLZZA_2:
|
|
return ReflecBeatVolzza2(data, config, model)
|
|
|
|
# Unknown game version
|
|
return None
|