Commit 1de0d4f8 authored by argon.sun's avatar argon.sun

gui bug fix

parent 028fbb46
......@@ -384,70 +384,74 @@ void Game::DrawGUI() {
mit->first->setImage(imageManager.GetTexture(mit->second));
imageLoading.clear();
}
if(fadingFrame) {
if(isFadein) {
if(fadingFrame > 5) {
fadingUL.X -= fadingDiff.X;
fadingLR.X += fadingDiff.X;
fadingFrame--;
guiFading->setRelativePosition(irr::core::recti(fadingUL, fadingLR));
for(auto fit = fadingList.begin(); fit != fadingList.end();) {
auto fthis = fit++;
FadingUnit& fu = *fthis;
if(fu.fadingFrame) {
fu.guiFading->setVisible(true);
if(fu.isFadein) {
if(fu.fadingFrame > 5) {
fu.fadingUL.X -= fu.fadingDiff.X;
fu.fadingLR.X += fu.fadingDiff.X;
fu.fadingFrame--;
fu.guiFading->setRelativePosition(irr::core::recti(fu.fadingUL, fu.fadingLR));
} else {
fadingUL.Y -= fadingDiff.Y;
fadingLR.Y += fadingDiff.Y;
fadingFrame--;
if(!fadingFrame) {
guiFading->setRelativePosition(fadingSize);
if(guiFading == wPosSelect) {
fu.fadingUL.Y -= fu.fadingDiff.Y;
fu.fadingLR.Y += fu.fadingDiff.Y;
fu.fadingFrame--;
if(!fu.fadingFrame) {
fu.guiFading->setRelativePosition(fu.fadingSize);
if(fu.guiFading == wPosSelect) {
btnPSAU->setDrawImage(true);
btnPSAD->setDrawImage(true);
btnPSDU->setDrawImage(true);
btnPSDD->setDrawImage(true);
}
if(guiFading == wCardSelect) {
if(fu.guiFading == wCardSelect) {
for(int i = 0; i < 5; ++i)
btnCardSelect[i]->setDrawImage(true);
}
env->setFocus(guiFading);
env->setFocus(fu.guiFading);
} else
guiFading->setRelativePosition(irr::core::recti(fadingUL, fadingLR));
fu.guiFading->setRelativePosition(irr::core::recti(fu.fadingUL, fu.fadingLR));
}
} else {
if(fadingFrame > 5) {
fadingUL.Y += fadingDiff.Y;
fadingLR.Y -= fadingDiff.Y;
fadingFrame--;
guiFading->setRelativePosition(irr::core::recti(fadingUL, fadingLR));
if(fu.fadingFrame > 5) {
fu.fadingUL.Y += fu.fadingDiff.Y;
fu.fadingLR.Y -= fu.fadingDiff.Y;
fu.fadingFrame--;
fu.guiFading->setRelativePosition(irr::core::recti(fu.fadingUL, fu.fadingLR));
} else {
fadingUL.X += fadingDiff.X;
fadingLR.X -= fadingDiff.X;
fadingFrame--;
if(!fadingFrame) {
guiFading->setVisible(false);
guiFading->setRelativePosition(fadingSize);
if(guiFading == wPosSelect) {
fu.fadingUL.X += fu.fadingDiff.X;
fu.fadingLR.X -= fu.fadingDiff.X;
fu.fadingFrame--;
if(!fu.fadingFrame) {
fu.guiFading->setVisible(false);
fu.guiFading->setRelativePosition(fu.fadingSize);
if(fu.guiFading == wPosSelect) {
btnPSAU->setDrawImage(true);
btnPSAD->setDrawImage(true);
btnPSDU->setDrawImage(true);
btnPSDD->setDrawImage(true);
}
if(guiFading == wCardSelect) {
if(fu.guiFading == wCardSelect) {
for(int i = 0; i < 5; ++i)
btnCardSelect[i]->setDrawImage(true);
}
if(guiNext)
ShowElement(guiNext);
} else
guiFading->setRelativePosition(irr::core::recti(fadingUL, fadingLR));
fu.guiFading->setRelativePosition(irr::core::recti(fu.fadingUL, fu.fadingLR));
}
}
if(signalAction && !fadingFrame) {
if(fu.signalAction && !fu.fadingFrame) {
localAction.Set();
signalAction = false;
fu.signalAction = false;
}
}
} else if(autoFadeoutFrame) {
autoFadeoutFrame--;
if(!autoFadeoutFrame)
HideElement(guiFading);
} else if(fu.autoFadeoutFrame) {
fu.autoFadeoutFrame--;
if(!fu.autoFadeoutFrame)
HideElement(fu.guiFading);
} else
fadingList.erase(fthis);
}
env->drawAll();
}
......@@ -618,20 +622,22 @@ void Game::DrawSpec() {
}
}
void Game::ShowElement(irr::gui::IGUIElement * win, int autoframe) {
if(fadingFrame)
guiFading->setVisible(false);
fadingSize = win->getRelativePosition();
irr::core::position2di center = fadingSize.getCenter();
fadingDiff.X = fadingSize.getWidth() / 10;
fadingDiff.Y = (fadingSize.getHeight() - 4) / 10;
fadingUL = center;
fadingLR = center;
fadingUL.Y -= 2;
fadingLR.Y += 2;
guiFading = win;
isFadein = true;
fadingFrame = 10;
autoFadeoutFrame = autoframe;
FadingUnit fu;
fu.fadingSize = win->getRelativePosition();
for(auto fit = fadingList.begin(); fit != fadingList.end(); ++fit)
if(win == fit->guiFading)
fu.fadingSize = fit->fadingSize;
irr::core::position2di center = fu.fadingSize.getCenter();
fu.fadingDiff.X = fu.fadingSize.getWidth() / 10;
fu.fadingDiff.Y = (fu.fadingSize.getHeight() - 4) / 10;
fu.fadingUL = center;
fu.fadingLR = center;
fu.fadingUL.Y -= 2;
fu.fadingLR.Y += 2;
fu.guiFading = win;
fu.isFadein = true;
fu.fadingFrame = 10;
fu.autoFadeoutFrame = autoframe;
if(win == wPosSelect) {
btnPSAU->setDrawImage(false);
btnPSAD->setDrawImage(false);
......@@ -643,22 +649,23 @@ void Game::ShowElement(irr::gui::IGUIElement * win, int autoframe) {
btnCardSelect[i]->setDrawImage(false);
}
win->setRelativePosition(irr::core::recti(center.X, center.Y, 0, 0));
win->setVisible(true);
fadingList.push_back(fu);
}
void Game::HideElement(irr::gui::IGUIElement * win, bool set_action, irr::gui::IGUIElement* next) {
if(fadingFrame)
guiFading->setVisible(false);
fadingSize = win->getRelativePosition();
fadingDiff.X = fadingSize.getWidth() / 10;
fadingDiff.Y = (fadingSize.getHeight() - 4) / 10;
fadingUL = fadingSize.UpperLeftCorner;
fadingLR = fadingSize.LowerRightCorner;
guiFading = win;
isFadein = false;
fadingFrame = 10;
autoFadeoutFrame = 0;
signalAction = set_action;
guiNext = next;
void Game::HideElement(irr::gui::IGUIElement * win, bool set_action) {
FadingUnit fu;
fu.fadingSize = win->getRelativePosition();
for(auto fit = fadingList.begin(); fit != fadingList.end(); ++fit)
if(win == fit->guiFading)
fu.fadingSize = fit->fadingSize;
fu.fadingDiff.X = fu.fadingSize.getWidth() / 10;
fu.fadingDiff.Y = (fu.fadingSize.getHeight() - 4) / 10;
fu.fadingUL = fu.fadingSize.UpperLeftCorner;
fu.fadingLR = fu.fadingSize.LowerRightCorner;
fu.guiFading = win;
fu.isFadein = false;
fu.fadingFrame = 10;
fu.autoFadeoutFrame = 0;
fu.signalAction = set_action;
if(win == wPosSelect) {
btnPSAU->setDrawImage(false);
btnPSAD->setDrawImage(false);
......@@ -669,6 +676,7 @@ void Game::HideElement(irr::gui::IGUIElement * win, bool set_action, irr::gui::I
for(int i = 0; i < 5; ++i)
btnCardSelect[i]->setDrawImage(false);
}
fadingList.push_back(fu);
}
void Game::PopupElement(irr::gui::IGUIElement * element, int hideframe) {
element->getParent()->bringToFront(element);
......
......@@ -140,11 +140,9 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->gMutex.Lock();
mainGame->HideElement(mainGame->wHostSingle);
mainGame->WaitFrameSignal(11);
mainGame->ShowElement(mainGame->wLanWindow);
mainGame->WaitFrameSignal(11);
mainGame->gMutex.Lock();
if(events & BEV_EVENT_EOF)
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1401));
else mainGame->env->addMessageBox(L"", dataManager.GetSysString(1402));
......@@ -156,11 +154,11 @@ void DuelClient::ClientEvent(bufferevent *bev, short events, void *ctx) {
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->CloseDuelWindow();
mainGame->gMutex.Unlock();
mainGame->dInfo.isStarted = false;
mainGame->is_building = false;
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->ShowElement(mainGame->wLanWindow);
mainGame->gMutex.Unlock();
}
}
}
......@@ -240,7 +238,9 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
break;
}
case STOC_SELECT_TP: {
mainGame->gMutex.Lock();
mainGame->ShowElement(mainGame->wFTSelect);
mainGame->gMutex.Unlock();
break;
}
case STOC_HAND_RESULT: {
......@@ -333,10 +333,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->HideElement(mainGame->wCreateHost);
else if (mainGame->wLanWindow->isVisible())
mainGame->HideElement(mainGame->wLanWindow);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(11);
mainGame->ShowElement(mainGame->wHostSingle);
mainGame->WaitFrameSignal(11);
mainGame->gMutex.Unlock();
break;
}
case STOC_TYPE_CHANGE: {
......@@ -401,8 +399,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
case STOC_DUEL_END: {
mainGame->gMutex.Lock();
mainGame->stMessage->setText(dataManager.GetSysString(1500));
mainGame->gMutex.Unlock();
mainGame->PopupElement(mainGame->wMessage);
mainGame->gMutex.Unlock();
mainGame->localAction.Reset();
mainGame->localAction.Wait();
mainGame->gMutex.Lock();
......@@ -418,10 +416,12 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
break;
}
case STOC_REPLAY: {
mainGame->gMutex.Lock();
mainGame->ebRSName->setText(L"");
mainGame->PopupElement(mainGame->wReplaySave);
mainGame->localAction.Reset();
mainGame->localAction.Wait();
mainGame->gMutex.Unlock();
mainGame->replaySignal.Reset();
mainGame->replaySignal.Wait();
if(mainGame->actionParam) {
char* prep = pdata;
Replay new_replay;
......@@ -490,14 +490,18 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
mainGame->waitFrame = -1;
mainGame->stHintMsg->setVisible(false);
if(mainGame->wCardSelect->isVisible()) {
mainGame->gMutex.Lock();
mainGame->HideElement(mainGame->wCardSelect);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(11);
}
}
switch(mainGame->dInfo.curMsg) {
case MSG_RETRY: {
mainGame->gMutex.Lock();
mainGame->stACMessage->setText(L"Error occurs.");
mainGame->PopupElement(mainGame->wACMessage, 100);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(120);
if(!mainGame->dInfo.isReplay)
mainGame->dInfo.isStarted = false;
......@@ -515,8 +519,8 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
case HINT_MESSAGE: {
mainGame->gMutex.Lock();
mainGame->stMessage->setText(dataManager.GetDesc(data));
mainGame->gMutex.Unlock();
mainGame->PopupElement(mainGame->wMessage);
mainGame->gMutex.Unlock();
mainGame->localAction.Reset();
mainGame->localAction.Wait();
break;
......@@ -529,8 +533,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, dataManager.GetSysString(1510), dataManager.GetDesc(data));
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(0);
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->textFont, textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
break;
}
......@@ -545,8 +551,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, dataManager.GetSysString(1511), dataManager.FormatRace(data));
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(0);
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->textFont, textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
break;
}
......@@ -554,8 +562,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, dataManager.GetSysString(1511), dataManager.FormatAttribute(data));
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(0);
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->textFont, textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
break;
}
......@@ -563,8 +573,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, dataManager.GetSysString(1511), dataManager.GetName(data));
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(data);
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->textFont, textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
break;
}
......@@ -572,8 +584,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, dataManager.GetSysString(1512), data);
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(0);
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stACMessage, 310, mainGame->textFont, textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
break;
}
......@@ -1063,7 +1077,9 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
mainGame->btnPSDD->setVisible(true);
startpos += 145;
} else mainGame->btnPSDD->setVisible(false);
mainGame->gMutex.Lock();
mainGame->PopupElement(mainGame->wPosSelect);
mainGame->gMutex.Unlock();
mainGame->localAction.Reset();
mainGame->localAction.Wait();
DuelClient::SendResponse();
......@@ -1772,6 +1788,7 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
mainGame->WaitFrameSignal(11);
mainGame->showcardcode = code;
mainGame->showcarddif = 0;
mainGame->showcardp = 0;
mainGame->showcard = 7;
mainGame->WaitFrameSignal(30);
mainGame->showcard = 0;
......@@ -2231,10 +2248,12 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
*pwbuf++ = L']';
}
*pwbuf = 0;
mainGame->gMutex.Lock();
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(0);
mainGame->stACMessage->setText(textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
return true;
}
......@@ -2250,10 +2269,12 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
*pwbuf++ = L']';
}
*pwbuf = 0;
mainGame->gMutex.Lock();
mainGame->lstLog->addItem(textBuffer);
mainGame->logParam.push_back(0);
mainGame->stACMessage->setText(textBuffer);
mainGame->PopupElement(mainGame->wACMessage, 20);
mainGame->gMutex.Unlock();
mainGame->WaitFrameSignal(40);
return true;
}
......@@ -2271,8 +2292,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, L"%ls", dataManager.GetDesc(select_hint));
else myswprintf(textBuffer, dataManager.GetSysString(563));
select_hint = 0;
mainGame->gMutex.Lock();
mainGame->wANRace->setText(textBuffer);
mainGame->PopupElement(mainGame->wANRace);
mainGame->gMutex.Unlock();
mainGame->localAction.Reset();
mainGame->localAction.Wait();
DuelClient::SendResponse();
......@@ -2292,8 +2315,10 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
myswprintf(textBuffer, L"%ls", dataManager.GetDesc(select_hint));
else myswprintf(textBuffer, dataManager.GetSysString(562));
select_hint = 0;
mainGame->gMutex.Lock();
mainGame->wANAttribute->setText(textBuffer);
mainGame->PopupElement(mainGame->wANAttribute);
mainGame->gMutex.Unlock();
mainGame->localAction.Reset();
mainGame->localAction.Wait();
DuelClient::SendResponse();
......@@ -2301,13 +2326,15 @@ int DuelClient::ClientAnalyze(char* msg, unsigned int len) {
}
case MSG_ANNOUNCE_CARD: {
int player = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
mainGame->ebANCard->setText(L"");
if(select_hint)
myswprintf(textBuffer, L"%ls", dataManager.GetDesc(select_hint));
else myswprintf(textBuffer, dataManager.GetSysString(564));
select_hint = 0;
mainGame->gMutex.Lock();
mainGame->ebANCard->setText(L"");
mainGame->wANCard->setText(textBuffer);
mainGame->PopupElement(mainGame->wANCard);
mainGame->gMutex.Unlock();
mainGame->localAction.Reset();
mainGame->localAction.Wait();
DuelClient::SendResponse();
......
......@@ -82,12 +82,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(mainGame->ebRSName->getText()[0] == 0)
break;
mainGame->actionParam = 1;
mainGame->HideElement(mainGame->wReplaySave, true);
mainGame->HideElement(mainGame->wReplaySave);
mainGame->replaySignal.Set();
break;
}
case BUTTON_REPLAY_CANCEL: {
mainGame->actionParam = 0;
mainGame->HideElement(mainGame->wReplaySave, true);
mainGame->HideElement(mainGame->wReplaySave);
mainGame->replaySignal.Set();
break;
}
case BUTTON_LEAVE_GAME: {
......@@ -96,6 +98,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->CloseDuelWindow();
mainGame->dInfo.isStarted = false;
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->ShowElement(mainGame->wLanWindow);
} else {
DuelClient::SendPacketToServer(CTOS_SURRENDER);
......@@ -122,6 +127,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->HideElement(mainGame->wQuery);
break;
}
default: {
mainGame->HideElement(mainGame->wQuery);
break;
}
}
break;
}
......@@ -149,6 +158,10 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->HideElement(mainGame->wQuery, true);
break;
}
default: {
mainGame->HideElement(mainGame->wQuery);
break;
}
}
break;
}
......@@ -1058,7 +1071,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(mainGame->dInfo.isReplay)
break;
mainGame->wCmdMenu->setVisible(false);
if(mainGame->fadingFrame)
if(mainGame->fadingList.size())
break;
switch(mainGame->dInfo.curMsg) {
case MSG_WAITING: {
......
......@@ -30,8 +30,6 @@ bool Game::Initialize() {
return false;
linePattern = 0x0f0f;
waitFrame = 0;
fadingFrame = 0;
autoFadeoutFrame = 0;
signalFrame = 0;
showcard = 0;
is_attacking = false;
......@@ -87,7 +85,6 @@ bool Game::Initialize() {
env->addStaticText(dataManager.GetSysString(1222), rect<s32>(10, 390, 220, 410), false, false, wLanWindow);
ebJoinPass = env->addEditBox(L"", rect<s32>(110, 385, 250, 410), true, wLanWindow);
ebJoinPass->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebJoinPass->setPasswordBox(true);
btnJoinHost = env->addButton(rect<s32>(460, 355, 570, 380), wLanWindow, BUTTON_JOIN_HOST, dataManager.GetSysString(1223));
btnJoinCancel = env->addButton(rect<s32>(460, 385, 570, 410), wLanWindow, BUTTON_JOIN_CANCEL, dataManager.GetSysString(1212));
btnCreateHost = env->addButton(rect<s32>(460, 25, 570, 50), wLanWindow, BUTTON_CREATE_HOST, dataManager.GetSysString(1224));
......
......@@ -6,6 +6,8 @@
#include "deck_con.h"
#include "menu_handler.h"
#include <unordered_map>
#include <vector>
#include <list>
namespace ygo {
......@@ -36,6 +38,18 @@ struct DuelInfo {
wchar_t strTurn[8];
};
struct FadingUnit {
bool signalAction;
bool isFadein;
int fadingFrame;
int autoFadeoutFrame;
irr::gui::IGUIElement* guiFading;
irr::core::recti fadingSize;
irr::core::vector2di fadingUL;
irr::core::vector2di fadingLR;
irr::core::vector2di fadingDiff;
};
class Game {
public:
......@@ -53,7 +67,7 @@ public:
void DrawGUI();
void DrawSpec();
void ShowElement(irr::gui::IGUIElement* element, int autoframe = 0);
void HideElement(irr::gui::IGUIElement* element, bool set_action = false, irr::gui::IGUIElement* next = 0);
void HideElement(irr::gui::IGUIElement* element, bool set_action = false);
void PopupElement(irr::gui::IGUIElement* element, int hideframe = 0);
void WaitFrameSignal(int frame);
void DrawThumb(int code, position2di pos, std::unordered_map<int, int>* lflist);
......@@ -71,24 +85,16 @@ public:
Mutex gBuffer;
Signal frameSignal;
Signal localAction;
Signal replaySignal;
Config gameConf;
DuelInfo dInfo;
std::list<FadingUnit> fadingList;
std::vector<int> logParam;
unsigned short linePattern;
int waitFrame;
int signalFrame;
bool isFadein;
bool signalAction;
int actionParam;
irr::gui::IGUIElement* guiFading;
irr::gui::IGUIElement* guiNext;
int fadingFrame;
irr::core::recti fadingSize;
irr::core::vector2di fadingUL;
irr::core::vector2di fadingLR;
irr::core::vector2di fadingDiff;
int autoFadeoutFrame;
int showcard;
int showcardcode;
int showcarddif;
......
......@@ -26,7 +26,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->HideElement(mainGame->wMainMenu, false, mainGame->wLanWindow);
mainGame->HideElement(mainGame->wMainMenu);
mainGame->ShowElement(mainGame->wLanWindow);
break;
}
case BUTTON_JOIN_HOST: {
......@@ -48,7 +49,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break;
}
case BUTTON_JOIN_CANCEL: {
mainGame->HideElement(mainGame->wLanWindow, false, mainGame->wMainMenu);
mainGame->HideElement(mainGame->wLanWindow);
mainGame->ShowElement(mainGame->wMainMenu);
break;
}
case BUTTON_LAN_REFRESH: {
......@@ -58,7 +60,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
case BUTTON_CREATE_HOST: {
mainGame->btnHostConfirm->setEnabled(true);
mainGame->btnHostCancel->setEnabled(true);
mainGame->HideElement(mainGame->wLanWindow, false, mainGame->wCreateHost);
mainGame->HideElement(mainGame->wLanWindow);
mainGame->ShowElement(mainGame->wCreateHost);
break;
}
case BUTTON_HOST_CONFIRM: {
......@@ -77,7 +80,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->HideElement(mainGame->wCreateHost, false, mainGame->wLanWindow);
mainGame->HideElement(mainGame->wCreateHost);
mainGame->ShowElement(mainGame->wLanWindow);
break;
}
case BUTTON_HS_DUELIST: {
......@@ -109,11 +113,13 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->btnCreateHost->setEnabled(true);
mainGame->btnJoinHost->setEnabled(true);
mainGame->btnJoinCancel->setEnabled(true);
mainGame->HideElement(mainGame->wHostSingle, false, mainGame->wLanWindow);
mainGame->HideElement(mainGame->wHostSingle);
mainGame->ShowElement(mainGame->wLanWindow);
break;
}
case BUTTON_REPLAY_MODE: {
mainGame->HideElement(mainGame->wMainMenu, false, mainGame->wReplay);
mainGame->HideElement(mainGame->wMainMenu);
mainGame->ShowElement(mainGame->wReplay);
mainGame->RefreshReplay();
break;
}
......@@ -145,7 +151,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break;
}
case BUTTON_CANCEL_REPLAY: {
mainGame->HideElement(mainGame->wReplay, false, mainGame->wMainMenu);
mainGame->HideElement(mainGame->wReplay);
mainGame->ShowElement(mainGame->wMainMenu);
break;
}
case BUTTON_DECK_EDIT: {
......
......@@ -509,11 +509,11 @@ void SingleDuel::Surrender(DuelPlayer* dp) {
for(auto oit = observers.begin(); oit != observers.end(); ++oit)
NetServer::ReSendToPlayer(*oit);
if(players[player] == pplayer[player]) {
match_result[duel_count++] = player;
tp_player = 1 - player;
} else {
match_result[duel_count++] = 1 - player;
tp_player = player;
} else {
match_result[duel_count++] = player;
tp_player = 1 - player;
}
EndDuel();
DuelEndProc();
......
......@@ -488,6 +488,8 @@ interpreter::interpreter(duel* pd): coroutines(256) {
lua_setglobal(lua_state, "Group");
luaL_newlib(lua_state, duellib);
lua_setglobal(lua_state, "Duel");
luaL_newlib(lua_state, debuglib);
lua_setglobal(lua_state, "Debug");
//extra scripts
load_script((char*) "constant.lua");
load_script((char*) "utility.lua");
......
......@@ -14,7 +14,7 @@ end
c11747708[0]=true
c11747708[1]=true
function c11747708.costfilter(c)
return c:IsRace(RACE_PLANT) and c:IsAbleToRemoveAsCost()
return c:IsRace(RACE_PLANT) and c:GetLevel()>0 and c:IsAbleToRemoveAsCost()
end
function c11747708.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(c11747708.costfilter,tp,LOCATION_GRAVE,0,1,e:GetHandler()) end
......
......@@ -49,7 +49,7 @@ function c12435193.ccost(e,tp)
Duel.ConfirmCards(1-tp,g)
Duel.ShuffleHand(tp)
else
Duel.Destroy(e:GetHandler(),REASON_RULE)
Duel.Destroy(e:GetHandler(),REASON_COST)
end
end
function c12435193.disspsum(e,c)
......
......@@ -73,7 +73,7 @@ function c21790410.shtg(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK)
end
function c21790410.shop(e,tp,eg,ep,ev,re,r,rp)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND)
local g=Duel.SelectMatchingCard(tp,c21790410.tgfilter,tp,LOCATION_DECK,0,1,1,nil)
if g:GetCount()>0 then
Duel.SendtoHand(g,nil,REASON_EFFECT)
......
......@@ -54,7 +54,7 @@ function c45041488.ccost(e,tp)
Duel.ConfirmCards(1-tp,g)
Duel.ShuffleHand(tp)
else
Duel.Destroy(e:GetHandler(),REASON_RULE)
Duel.Destroy(e:GetHandler(),REASON_COST)
end
end
function c45041488.condition(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -54,7 +54,7 @@ function c49680980.ccost(e,tp)
Duel.ConfirmCards(1-tp,g)
Duel.ShuffleHand(tp)
else
Duel.Destroy(e:GetHandler(),REASON_RULE)
Duel.Destroy(e:GetHandler(),REASON_COST)
end
end
function c49680980.condition(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -12,7 +12,7 @@ function c52823314.initial_effect(c)
c:RegisterEffect(e1)
end
function c52823314.filter(c)
return c:GetCode()~=52823314 and c:IsAbleToDeck()
return c:GetCode()~=52823314 and c:IsType(TYPE_MONSTER) and c:IsAbleToDeck()
end
function c52823314.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsLocation(LOCATION_GRAVE) and c52823314.filter(chkc) end
......
......@@ -8,7 +8,6 @@ function c5973663.initial_effect(c)
--add counter
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e2:SetProperty(EFFECT_FLAG_DELAY)
e2:SetRange(LOCATION_SZONE)
e2:SetCode(EVENT_DESTROY)
e2:SetOperation(c5973663.ctop)
......@@ -48,7 +47,7 @@ function c5973663.initial_effect(c)
c:RegisterEffect(e5)
end
function c5973663.ctfilter(c)
return c:IsLocation(LOCATION_MZONE) and c:IsRace(RACE_PLANT)
return c:IsFaceup() and c:IsLocation(LOCATION_MZONE) and c:IsRace(RACE_PLANT)
end
function c5973663.ctop(e,tp,eg,ep,ev,re,r,rp)
if eg:IsExists(c5973663.ctfilter,1,nil) then
......
......@@ -19,7 +19,7 @@ function c60234913.initial_effect(c)
e2:SetOperation(c60234913.utop)
c:RegisterEffect(e2)
end
function c60234913.filter(c,e,tp,m)
function c60234913.spfilter(c,e,tp,m)
if c:GetCode()~=61757117 or not c:IsCanBeSpecialSummoned(e,SUMMON_TYPE_RITUAL,tp,true,false) then return false end
local result=false
if m:IsContains(c) then
......@@ -35,7 +35,7 @@ function c60234913.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then
if Duel.GetLocationCount(tp,LOCATION_MZONE)==0 then return false end
local mg=Duel.GetRitualMaterial(tp,nil)
return Duel.IsExistingMatchingCard(c60234913.filter,tp,LOCATION_HAND,0,1,nil,e,tp,mg)
return Duel.IsExistingMatchingCard(c60234913.spfilter,tp,LOCATION_HAND,0,1,nil,e,tp,mg)
end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_HAND)
end
......@@ -43,7 +43,7 @@ function c60234913.activate(e,tp,eg,ep,ev,re,r,rp)
if Duel.GetLocationCount(tp,LOCATION_MZONE)==0 then return end
local mg=Duel.GetRitualMaterial(tp,nil)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local tg=Duel.SelectMatchingCard(tp,c60234913.filter,tp,LOCATION_HAND,0,1,1,nil,e,tp,mg)
local tg=Duel.SelectMatchingCard(tp,c60234913.spfilter,tp,LOCATION_HAND,0,1,1,nil,e,tp,mg)
if tg:GetCount()>0 then
local tc=tg:GetFirst()
mg:RemoveCard(tc)
......@@ -66,6 +66,7 @@ end
function c60234913.uttg(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and c60234913.filter(chkc) end
if chk==0 then return Duel.IsExistingTarget(c60234913.filter,tp,LOCATION_MZONE,0,1,nil) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP)
Duel.SelectTarget(tp,c60234913.filter,tp,LOCATION_MZONE,0,1,1,nil)
end
function c60234913.utop(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -54,7 +54,7 @@ function c66816282.ccost(e,tp)
Duel.ConfirmCards(1-tp,g)
Duel.ShuffleHand(tp)
else
Duel.Destroy(e:GetHandler(),REASON_RULE)
Duel.Destroy(e:GetHandler(),REASON_COST)
end
end
function c66816282.condition(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -4,6 +4,7 @@ function c75014062.initial_effect(c)
local e1=Effect.CreateEffect(c)
e1:SetCategory(CATEGORY_COUNTER)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetCost(c75014062.cost)
e1:SetTarget(c75014062.target)
......
......@@ -51,7 +51,7 @@ function c80367387.ccost(e,tp)
Duel.ConfirmCards(1-tp,g)
Duel.ShuffleHand(tp)
else
Duel.Destroy(e:GetHandler(),REASON_RULE)
Duel.Destroy(e:GetHandler(),REASON_COST)
end
end
function c80367387.atcon(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -48,7 +48,7 @@ function c80925836.ccost(e,tp)
Duel.ConfirmCards(1-tp,g)
Duel.ShuffleHand(tp)
else
Duel.Destroy(e:GetHandler(),REASON_RULE)
Duel.Destroy(e:GetHandler(),REASON_COST)
end
end
function c80925836.disop(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -3,9 +3,9 @@
antialias = 2
nickname = Player
gamename = Game
lastdeck = test
lastdeck = tgagent
textfont = c:/windows/fonts/simsun.ttc
numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911
lastip = 192.168.3.235
lastip = 127.0.0.1
lastport = 7911
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