Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 79 additions & 1 deletion src/band3/meta_band/SongSortByRank.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,82 @@
#include "meta_band/SongSortByRank.h"
#include "meta/Sorting.h"
#include "meta_band/BandSongMgr.h"
#include "meta_band/MusicLibrary.h"
#include "meta_band/ProfileMgr.h"
#include "meta_band/SongSortNode.h"
#include "net_band/RockCentral.h"
#include "os/Debug.h"
#include "stl/pointers/_vector.h"

RankCmp::RankCmp(int val, const char *name, RankCmp::RankType ty)
: mVal(val), mSongName(name), mType(ty) {}
: mVal(val), mSongName(name), mType(ty) {}



int RankCmp::Compare(const SongSortCmp *s, SongNodeType nodeType) const {
RankCmp *cmp = (RankCmp *)s;
switch(nodeType) {
case kNodeShortcut:
case kNodeHeader:
if(cmp->mType)
if (mType == kPercentile){
return (mType - mType % 10) - (cmp->mType % 10);
}
else return 0;
case kNodeSong:
case kNodeStoreSong:
if(mType == cmp->mType) {
if (mType == kPercentile) {
if(cmp->mVal != mVal) {
return cmp->mVal - mVal;
}
return AlphaKeyStrCmp(mSongName, cmp->mSongName, true);
}
return mVal - cmp->mVal;
}
default:
if(nodeType != kNodeSong && nodeType != kNodeStoreSong){
MILO_FAIL("invalid type of node comparison.\n");
return 0;
}
}
}

SongSortByRank::~SongSortByRank() {

}

void SongSortByRank::Clear() {
mRankings.clear();
mDataResults.Clear();
}

bool SongSortByRank::IsReady() const {
return !mRankings.empty();
}

void SongSortByRank::MakeReady() {
RequestSongRankingInfo();
}

void SongSortByRank::CancelMakeReady() {
CancelSongRankingRequest();
if(!mRankings.empty())
mRankings.clear();
mDataResults.Clear();
}

void SongSortByRank::RequestSongRankingInfo() {
Profile *prof = TheProfileMgr.GetPrimaryProfile();
if(prof) {
stlpmtx_std::vector<int> something;
ScoreType sType = TheMusicLibrary->ActiveScoreType();
TheSongMgr.GetRankedSongs(something, true, true);
TheRockCentral.GetMultipleRankingsForPlayer(prof, sType, something, mDataResults, this);
}
}

void SongSortByRank::CancelSongRankingRequest() {
TheRockCentral.CancelOutstandingCalls(this);
}

5 changes: 4 additions & 1 deletion src/band3/meta_band/SongSortByRank.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class RankCmp : public SongSortCmp {
class SongSortByRank : public SongSort {
public:
SongSortByRank() { mShortName = by_rank; }
virtual ~SongSortByRank() {}
virtual ~SongSortByRank();
virtual DataNode Handle(DataArray *, bool);
virtual void Clear();
virtual bool IsReady() const;
Expand All @@ -36,6 +36,9 @@ class SongSortByRank : public SongSort {
virtual OwnedSongSortNode *NewSongNode(SongRecord *) const;
virtual StoreSongSortNode *NewSongNode(class StoreOffer *) const;

void RequestSongRankingInfo();
void CancelSongRankingRequest();

std::map<int, bool> mRankings; // 0x3c
DataResultList mDataResults; // 0x54
};
12 changes: 11 additions & 1 deletion src/band3/meta_band/StoreRootPanel.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#include "StoreRootPanel.h"
#include "utl/Str.h"
#include "utl/TextStream.h"
StoreRootPanel::StoreRootPanel() {}

StoreRootPanel::~StoreRootPanel() {
Expand All @@ -25,6 +27,14 @@ BEGIN_HANDLERS(StoreRootPanel)
HANDLE_CHECK(149)
END_HANDLERS

int InitStoreOverlay() {
void InitStoreOverlay() {
gStoreUIOverlay = RndOverlay::Find(store, false);
}

void UpdateStoreOverlay() {

if (gStoreUIOverlay && gStoreUIOverlay->mShowing != false) {
gStoreUIOverlay->Clear();
//I have no idea what DAT_80D17CBC is
}
}
3 changes: 2 additions & 1 deletion src/band3/meta_band/StoreRootPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@ class StoreRootPanel : public UIPanel {
DataArray *mUGCMetadata;
};

int InitStoreOverlay();
void InitStoreOverlay();
void UpdateStoreOverlay();
extern RndOverlay *gStoreUIOverlay;
62 changes: 62 additions & 0 deletions src/band3/meta_band/StoreSongSortNode.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#include "StoreSongSortNode.h"
#include "meta_band/BandSongMgr.h"
#include "meta_band/SongSortNode.h"
#include "obj/Data.h"
#include "obj/ObjMacros.h"
#include "utl/Symbols2.h"

StoreSongSortNode::StoreSongSortNode(SongSortCmp *cmp, StoreOffer* off) : SongSortNode(cmp) {

unk34 = off->ShortName();
}

StoreSongSortNode::~StoreSongSortNode(){

}

bool StoreSongSortNode::IsEnabled() const {
return IsActive();
}

const char *StoreSongSortNode::GetAlbumArtPath() {
return "ui/image/song_select_random_keep.png";
}

const char *StoreSongSortNode::GetTitle() const {
return unk38->OfferName();
}

const char *StoreSongSortNode::GetArtist() const {
return unk38->Artist();
}

bool StoreSongSortNode::GetIsCover() const {
return unk38->IsCover();
}

const char *StoreSongSortNode::GetAlbum() const {
return unk38->AlbumName();
}

int StoreSongSortNode::GetTotalMs() const {
return 0;
}

int StoreSongSortNode::GetTier(Symbol sym) const {
float f1 = unk38->PartRank(sym);
return TheSongMgr.RankTier(f1, sym);
}

SongNodeType StoreSongSortNode::GetType() const {
return kNodeStoreSong;
}

Symbol StoreSongSortNode::GetToken() const {
return unk34;
}

BEGIN_HANDLERS(StoreSongSortNode)

HANDLE_SUPERCLASS(SongSortNode)
HANDLE_CHECK(76)
END_HANDLERS
4 changes: 2 additions & 2 deletions src/band3/meta_band/StoreSongSortNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ class StoreSongSortNode : public SongSortNode {
virtual const char *GetAlbum() const;
virtual int GetTier(Symbol) const;

int unk34;
int unk38;
Symbol unk34;
StoreOffer *unk38;
};
8 changes: 4 additions & 4 deletions src/system/track/TrackWidgetImp.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class TrackWidgetImp : public TrackWidgetImpBase {
virtual void RemoveUntil(float f1, float f2) { DoRemoveUntil(Instances(), f1, f2); }
virtual std::list<T> &Instances() = 0;
virtual void RemoveInstances(
std::list<T> &list, std::list<T>::iterator start, std::list<T>::iterator end
std::list<T> &list, typename std::list<T>::iterator start, typename std::list<T>::iterator end
) {
list.erase(start, end);
SetDirty(true);
Expand All @@ -104,8 +104,8 @@ class TrackWidgetImp : public TrackWidgetImpBase {

void DoRemoveAt(std::list<T> &insts, float f1, float f2, float f3) {
if (!insts.empty()) {
std::list<T>::iterator it5c = insts.end();
std::list<T>::iterator it = insts.begin();
typename std::list<T>::iterator it5c = insts.end();
typename std::list<T>::iterator it = insts.begin();
for (; it != insts.end(); ++it) {
if (IsFabsZero(it->mXfm.v.y - f1)) {
if (f3 < 0 || Abs<float>(it->mXfm.v.x - f2) <= f3) {
Expand All @@ -132,7 +132,7 @@ class TrackWidgetImp : public TrackWidgetImpBase {

void DoRemoveUntil(std::list<T> &insts, float f1, float f2) {
if (!insts.empty()) {
std::list<T>::iterator it = insts.begin();
typename std::list<T>::iterator it = insts.begin();
for (; it != insts.end() && f2 * it->mXfm.m.y.y + it->mXfm.v.y < f1; ++it) {
}
if (it != insts.end()) {
Expand Down