Commit 5e515eaa authored by Dark Zane's avatar Dark Zane Committed by GitHub

Merge branch 'fallenstardust:master' into master

parents d9c69731 15a7105b
......@@ -156,6 +156,16 @@ void ClientField::Initial(int player, int deckc, int extrac) {
}
RefreshCardCountDisplay();
}
void ClientField::ResetSequence(std::vector<ClientCard*>& list, bool reset_height) {
unsigned char seq = 0;
for (auto& pcard : list) {
pcard->sequence = seq++;
if (reset_height) {
pcard->curPos.Z = 0.01f + 0.01f * pcard->sequence;
pcard->mTransform.setTranslation(pcard->curPos);
}
}
}
ClientCard* ClientField::GetCard(int controler, int location, int sequence, int sub_seq) {
std::vector<ClientCard*>* lst = 0;
bool is_xyz = (location & LOCATION_OVERLAY) != 0;
......@@ -207,16 +217,10 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
case LOCATION_DECK: {
if (sequence != 0 || deck[controler].size() == 0) {
deck[controler].push_back(pcard);
pcard->sequence = (unsigned char)(deck[controler].size() - 1);
} else {
deck[controler].push_back(0);
for(int i = deck[controler].size() - 1; i > 0; --i) {
deck[controler][i] = deck[controler][i - 1];
deck[controler][i]->sequence++;
}
deck[controler][0] = pcard;
pcard->sequence = 0;
deck[controler].insert(deck[controler].begin(), pcard);
}
ResetSequence(deck[controler], true);
pcard->is_reversed = false;
pcard->ClearData();
pcard->ClearTarget();
......@@ -225,7 +229,7 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
case LOCATION_HAND: {
hand[controler].push_back(pcard);
pcard->sequence = (unsigned char)(hand[controler].size() - 1);
ResetSequence(hand[controler], false);
break;
}
case LOCATION_MZONE: {
......@@ -238,30 +242,22 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
}
case LOCATION_GRAVE: {
grave[controler].push_back(pcard);
pcard->sequence = (unsigned char)(grave[controler].size() - 1);
ResetSequence(grave[controler], false);
break;
}
case LOCATION_REMOVED: {
remove[controler].push_back(pcard);
pcard->sequence = (unsigned char)(remove[controler].size() - 1);
ResetSequence(remove[controler], false);
break;
}
case LOCATION_EXTRA: {
if(extra_p_count[controler] == 0 || (pcard->position & POS_FACEUP)) {
extra[controler].push_back(pcard);
pcard->sequence = (unsigned char)(extra[controler].size() - 1);
} else {
extra[controler].push_back(0);
int p = extra[controler].size() - extra_p_count[controler] - 1;
for(int i = extra[controler].size() - 1; i > p; --i) {
extra[controler][i] = extra[controler][i - 1];
extra[controler][i]->sequence++;
extra[controler][i]->curPos += irr::core::vector3df(0, 0, 0.01f);
extra[controler][i]->mTransform.setTranslation(extra[controler][i]->curPos);
}
extra[controler][p] = pcard;
pcard->sequence = p;
size_t faceup_begin = extra[controler].size() - extra_p_count[controler];
extra[controler].insert(extra[controler].begin() + faceup_begin, pcard);
}
ResetSequence(extra[controler], true);
if (pcard->position & POS_FACEUP)
extra_p_count[controler]++;
break;
......@@ -270,73 +266,52 @@ void ClientField::AddCard(ClientCard* pcard, int controler, int location, int se
RefreshCardCountDisplay();
}
ClientCard* ClientField::RemoveCard(int controler, int location, int sequence) {
ClientCard* pcard = 0;
ClientCard* pcard = nullptr;
switch (location) {
case LOCATION_DECK: {
pcard = deck[controler][sequence];
for (size_t i = sequence; i < deck[controler].size() - 1; ++i) {
deck[controler][i] = deck[controler][i + 1];
deck[controler][i]->sequence--;
deck[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
deck[controler][i]->mTransform.setTranslation(deck[controler][i]->curPos);
}
deck[controler].erase(deck[controler].end() - 1);
deck[controler].erase(deck[controler].begin() + sequence);
ResetSequence(deck[controler], true);
break;
}
case LOCATION_HAND: {
pcard = hand[controler][sequence];
for (size_t i = sequence; i < hand[controler].size() - 1; ++i) {
hand[controler][i] = hand[controler][i + 1];
hand[controler][i]->sequence--;
}
hand[controler].erase(hand[controler].end() - 1);
hand[controler].erase(hand[controler].begin() + sequence);
ResetSequence(hand[controler], false);
break;
}
case LOCATION_MZONE: {
pcard = mzone[controler][sequence];
mzone[controler][sequence] = 0;
mzone[controler][sequence] = nullptr;
break;
}
case LOCATION_SZONE: {
pcard = szone[controler][sequence];
szone[controler][sequence] = 0;
szone[controler][sequence] = nullptr;
break;
}
case LOCATION_GRAVE: {
pcard = grave[controler][sequence];
for (size_t i = sequence; i < grave[controler].size() - 1; ++i) {
grave[controler][i] = grave[controler][i + 1];
grave[controler][i]->sequence--;
grave[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
grave[controler][i]->mTransform.setTranslation(grave[controler][i]->curPos);
}
grave[controler].erase(grave[controler].end() - 1);
grave[controler].erase(grave[controler].begin() + sequence);
ResetSequence(grave[controler], true);
break;
}
case LOCATION_REMOVED: {
pcard = remove[controler][sequence];
for (size_t i = sequence; i < remove[controler].size() - 1; ++i) {
remove[controler][i] = remove[controler][i + 1];
remove[controler][i]->sequence--;
remove[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
remove[controler][i]->mTransform.setTranslation(remove[controler][i]->curPos);
}
remove[controler].erase(remove[controler].end() - 1);
remove[controler].erase(remove[controler].begin() + sequence);
ResetSequence(remove[controler], true);
break;
}
case LOCATION_EXTRA: {
pcard = extra[controler][sequence];
for (size_t i = sequence; i < extra[controler].size() - 1; ++i) {
extra[controler][i] = extra[controler][i + 1];
extra[controler][i]->sequence--;
extra[controler][i]->curPos -= irr::core::vector3df(0, 0, 0.01f);
extra[controler][i]->mTransform.setTranslation(extra[controler][i]->curPos);
}
extra[controler].erase(extra[controler].end() - 1);
extra[controler].erase(extra[controler].begin() + sequence);
ResetSequence(extra[controler], true);
if (pcard->position & POS_FACEUP)
extra_p_count[controler]--;
break;
}
default:
return nullptr;
}
pcard->location = 0;
RefreshCardCountDisplay();
......
......@@ -100,6 +100,7 @@ public:
~ClientField();
void Clear();
void Initial(int player, int deckc, int extrac);
void ResetSequence(std::vector<ClientCard*>& list, bool reset_height);
ClientCard* GetCard(int controler, int location, int sequence, int sub_seq = 0);
void AddCard(ClientCard* pcard, int controler, int location, int sequence);
ClientCard* RemoveCard(int controler, int location, int sequence);
......
......@@ -186,11 +186,12 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_p
return errorcode;
}
int DeckManager::LoadDeck(Deck& deck, std::istringstream& deckStream, bool is_packlist) {
int ct = 0, mainc = 0, sidec = 0, code = 0;
size_t ct = 0;
int mainc = 0, sidec = 0, code = 0;
int cardlist[PACK_MAX_SIZE]{};
bool is_side = false;
std::string linebuf;
while (std::getline(deckStream, linebuf, '\n') && ct < (int)(sizeof cardlist / sizeof cardlist[0])) {
while (std::getline(deckStream, linebuf, '\n') && ct < (sizeof cardlist / sizeof cardlist[0])) {
if (linebuf[0] == '!') {
is_side = true;
continue;
......@@ -204,7 +205,7 @@ int DeckManager::LoadDeck(Deck& deck, std::istringstream& deckStream, bool is_pa
else
++mainc;
}
return LoadDeck(current_deck, cardlist, mainc, sidec, is_packlist);
return LoadDeck(deck, cardlist, mainc, sidec, is_packlist);
}
bool DeckManager::LoadSide(Deck& deck, int* dbuf, int mainc, int sidec) {
std::unordered_map<int, int> pcount;
......
......@@ -23,7 +23,7 @@ struct Deck {
std::vector<code_pointer> main;
std::vector<code_pointer> extra;
std::vector<code_pointer> side;
Deck() {}
Deck() = default;
Deck(const Deck& ndeck) {
main = ndeck.main;
extra = ndeck.extra;
......
#ifndef MATERIALS_H
#define MATERIALS_H
#include "config.h"
namespace ygo {
......@@ -50,3 +53,5 @@ public:
extern Materials matManager;
}
#endif //MATERIALS_H
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