Commit e009b89b authored by nanahira's avatar nanahira

view side deck

parent 342dfed1
...@@ -62,6 +62,7 @@ static bool check_set_code(const CardDataC& data, int set_code) { ...@@ -62,6 +62,7 @@ static bool check_set_code(const CardDataC& data, int set_code) {
void DeckBuilder::Initialize() { void DeckBuilder::Initialize() {
mainGame->is_building = true; mainGame->is_building = true;
mainGame->is_siding = false; mainGame->is_siding = false;
mainGame->sidedeck_available = false;
mainGame->wInfos->setVisible(true); mainGame->wInfos->setVisible(true);
mainGame->wCardImg->setVisible(true); mainGame->wCardImg->setVisible(true);
mainGame->wDeckEdit->setVisible(true); mainGame->wDeckEdit->setVisible(true);
...@@ -511,7 +512,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -511,7 +512,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(draging_pointer == dataManager._datas.end()) if(draging_pointer == dataManager._datas.end())
break; break;
if(hovered_pos == 4) { if(hovered_pos == 4) {
if(!check_limit(draging_pointer)) if(!check_limit(draging_pointer) || mainGame->is_siding)
break; break;
} }
is_starting_dragging = true; is_starting_dragging = true;
...@@ -546,7 +547,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -546,7 +547,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(mainGame->is_siding) { if(mainGame->is_siding) {
if(is_draging) if(is_draging)
break; break;
if(hovered_pos == 0 || hovered_seq == -1) if(hovered_pos == 0 || hovered_seq == -1 || hovered_pos == 4)
break; break;
auto pointer = dataManager.GetCodePointer(hovered_code); auto pointer = dataManager.GetCodePointer(hovered_code);
if(pointer == dataManager._datas.end()) if(pointer == dataManager._datas.end())
...@@ -1116,4 +1117,35 @@ bool DeckBuilder::check_limit(code_pointer pointer) { ...@@ -1116,4 +1117,35 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
} }
return limit > 0; return limit > 0;
} }
void DeckBuilder::LoadSideDeck(int p) {
if(!mainGame->sidedeck_available) {
myswprintf(result_string, L"%d", -1);
return;
}
for(int i = 0; i < mainGame->sidedeck_main[p].size(); ++i) {
int trycode = mainGame->sidedeck_main[p][i];
if (dataManager.GetData(trycode, 0)) {
auto ptr = dataManager.GetCodePointer(trycode);
results.push_back(ptr);
}
}
for(int i = 0; i < mainGame->sidedeck_extra[p].size(); ++i) {
int trycode = mainGame->sidedeck_extra[p][i];
if (dataManager.GetData(trycode, 0)) {
auto ptr = dataManager.GetCodePointer(trycode);
results.push_back(ptr);
}
}
if (results.size() > 7) {
mainGame->scrFilter->setVisible(true);
mainGame->scrFilter->setMax(results.size() - 7);
mainGame->scrFilter->setPos(0);
}
else {
mainGame->scrFilter->setVisible(false);
mainGame->scrFilter->setPos(0);
}
SortList();
myswprintf(result_string, L"%d", results.size());
}
} }
...@@ -30,6 +30,8 @@ public: ...@@ -30,6 +30,8 @@ public:
void pop_extra(int seq); void pop_extra(int seq);
void pop_side(int seq); void pop_side(int seq);
bool check_limit(code_pointer pointer); bool check_limit(code_pointer pointer);
//side deck
void LoadSideDeck(int p);
long long filter_effect; long long filter_effect;
unsigned int filter_type; unsigned int filter_type;
......
...@@ -417,6 +417,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -417,6 +417,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size(); mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size();
mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size(); mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size();
mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size(); mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size();
mainGame->deckBuilder.LoadSideDeck(mainGame->LocalPlayer(1));
mainGame->device->setEventReceiver(&mainGame->deckBuilder); mainGame->device->setEventReceiver(&mainGame->deckBuilder);
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
break; break;
...@@ -722,17 +723,45 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -722,17 +723,45 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
mainGame->replaySignal.Reset(); mainGame->replaySignal.Reset();
mainGame->replaySignal.Wait(); mainGame->replaySignal.Wait();
if(mainGame->actionParam || !is_host) { char* prep = pdata;
char* prep = pdata; Replay new_replay;
Replay new_replay; memcpy(&new_replay.pheader, prep, sizeof(ReplayHeader));
memcpy(&new_replay.pheader, prep, sizeof(ReplayHeader)); prep += sizeof(ReplayHeader);
prep += sizeof(ReplayHeader); memcpy(new_replay.comp_data, prep, len - sizeof(ReplayHeader) - 1);
memcpy(new_replay.comp_data, prep, len - sizeof(ReplayHeader) - 1); new_replay.comp_size = len - sizeof(ReplayHeader) - 1;
new_replay.comp_size = len - sizeof(ReplayHeader) - 1; const wchar_t* save_name = mainGame->actionParam ? mainGame->ebRSName->getText() : L"auto_saved_replay";
if(mainGame->actionParam) new_replay.SaveReplay(save_name);
new_replay.SaveReplay(mainGame->ebRSName->getText()); //side deck
else new_replay.SaveReplay(L"_LastReplay"); Replay side_replay;
} if(!side_replay.OpenReplay(save_name))
break;
if(!!(side_replay.pheader.flag & REPLAY_TAG))
break;
//skip player names
wchar_t dark_hole[20];
for(int i = 0; i < 2; ++i)
side_replay.ReadName(dark_hole);
//skip pre infos
for(int i = 0; i < 4; ++i)
side_replay.ReadInt32();
//clear deck
for(int i = 0; i < 2; ++i) {
mainGame->sidedeck_main[i].clear();
mainGame->sidedeck_extra[i].clear();
}
int main = side_replay.ReadInt32();
for(int i = 0; i < main; ++i)
mainGame->sidedeck_main[0].push_back(side_replay.ReadInt32());
int extra = side_replay.ReadInt32();
for(int i = 0; i < extra; ++i)
mainGame->sidedeck_extra[0].push_back(side_replay.ReadInt32());
main = side_replay.ReadInt32();
for(int i = 0; i < main; ++i)
mainGame->sidedeck_main[1].push_back(side_replay.ReadInt32());
extra = side_replay.ReadInt32();
for(int i = 0; i < extra; ++i)
mainGame->sidedeck_extra[1].push_back(side_replay.ReadInt32());
mainGame->sidedeck_available = true;
break; break;
} }
case STOC_TIME_LIMIT: { case STOC_TIME_LIMIT: {
...@@ -1115,6 +1144,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1115,6 +1144,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->showcard = 101; mainGame->showcard = 101;
mainGame->WaitFrameSignal(40); mainGame->WaitFrameSignal(40);
mainGame->showcard = 0; mainGame->showcard = 0;
//clear side deck
mainGame->sidedeck_available = false;
for(int i = 0; i < 2; ++i) {
mainGame->sidedeck_main[i].clear();
mainGame->sidedeck_extra[i].clear();
}
mainGame->gMutex.Lock(); mainGame->gMutex.Lock();
int playertype = BufferIO::ReadInt8(pbuf); int playertype = BufferIO::ReadInt8(pbuf);
mainGame->dInfo.isFirst = (playertype & 0xf) ? false : true; mainGame->dInfo.isFirst = (playertype & 0xf) ? false : true;
......
...@@ -183,6 +183,11 @@ public: ...@@ -183,6 +183,11 @@ public:
std::wstring chatMsg[8]; std::wstring chatMsg[8];
std::vector<BotInfo> botInfo; std::vector<BotInfo> botInfo;
//deck view
std::vector<int> sidedeck_main[2];
std::vector<int> sidedeck_extra[2];
bool sidedeck_available;
int hideChatTimer; int hideChatTimer;
bool hideChat; bool hideChat;
int chatTiming[8]; int chatTiming[8];
......
...@@ -155,6 +155,17 @@ bool Replay::OpenReplay(const wchar_t* name) { ...@@ -155,6 +155,17 @@ bool Replay::OpenReplay(const wchar_t* name) {
char fname2[256]; char fname2[256];
BufferIO::EncodeUTF8(fname, fname2); BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "rb"); fp = fopen(fname2, "rb");
#endif
}
if(!fp) {
wchar_t fname[256];
myswprintf(fname, L"./replay/%ls.yrp", name);
#ifdef WIN32
fp = _wfopen(fname, L"rb");
#else
char fname2[256];
BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "rb");
#endif #endif
} }
if(!fp) if(!fp)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment