- Progress =
Base::Struct.new(
value: Integer,
max: Integer,
) do
def to_s; "#{value}/#{max}"; end
alias to_i value
alias inspect to_s
end
- RivalInfo =
Base::Struct.new(
player: PlayerData::Lite,
score: Float,
)
- TourMember =
Base::Struct.new(
icon: URI::Generic,
grade: Integer,
level: Integer,
)
- Judgment =
Base::Struct.new(
just: Integer,
perfect: Integer,
great: Integer,
good: Integer,
miss: Integer,
)
- Offset =
Base::Struct.new(
early: Integer,
late: Integer,
)
- Challenge =
Base::Struct.new(
type: Symbol,
lives: Progress,
)
- ScoreLite =
Base::Struct.new(
score: Float,
deluxe_score: Progress,
grade: Symbol,
flags: Generic[Array, Symbol],
)
- Score =
Base::Struct.new(
score: Float,
deluxe_score: Progress,
combo: Progress,
sync_score: Progress,
grade: Symbol,
flags: Generic[Array, Symbol],
)
- ReferenceWebID =
Base::Struct.new(
order: Integer,
time: Time,
) do
def self.parse(s)
order, time = s.split(',').first(2).map(&:to_i)
new(order: order, time: Time.at(time).localtime(32400).freeze)
end
def to_str
[order, time.to_i].join(',')
end
alias to_s to_str
end
- Track =
Base::Struct.new(
info: Chart::Info,
score: Either[Score, ScoreLite],
order: Integer,
time: Time,
challenge: Optional[Challenge],
)
- TrackReference =
Base::Struct.new(
track: Track,
ref_web_id: ReferenceWebID,
)
- Data =
Base::Struct.new(
track: Track,
breakdown: Generic[Hash, Symbol, Judgment],
timing: Offset,
members: Generic[Array, TourMember],
rival: Optional[RivalInfo],
)