Commit 3014b62d authored by nanahira's avatar nanahira

Merge branch 'patch-event-2.1.12-win' of https://github.com/mercury233/ygopro into develop

parents 2d447dc3 47859b49
......@@ -56,7 +56,6 @@ jobs:
run: |
tar xf ${{ steps.libevent.outputs.filepath }}
move libevent-2.1.12-stable event
xcopy /E event\WIN32-Code event\include
- name: Download freetype
id: freetype
......
......@@ -1262,7 +1262,11 @@ void Game::DrawDeckBd() {
driver->draw2DRectangle(Resize(805, 160, 1020, 630), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(Resize(804, 159, 1020, 630));
}
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
constexpr int MAX_RESULT = 9;
#else
constexpr int MAX_RESULT = 7;
......
#include "image_manager.h"
#include "game.h"
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
#include <thread>
#endif
#ifdef _OPENMP
......@@ -22,7 +26,11 @@ bool ImageManager::Initial() {
tUnknownFit = nullptr;
tUnknownThumb = nullptr;
tBigPicture = nullptr;
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
tLoading = nullptr;
tThumbLoadingThreadRunning = false;
#endif
......@@ -66,7 +74,11 @@ void ImageManager::ClearTexture() {
driver->removeTexture(tit->second);
}
for(auto tit = tThumb.begin(); tit != tThumb.end(); ++tit) {
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
if(tit->second && tit->second != tLoading)
#else
if(tit->second)
......@@ -80,7 +92,11 @@ void ImageManager::ClearTexture() {
tMap[0].clear();
tMap[1].clear();
tThumb.clear();
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
tThumbLoadingMutex.lock();
tThumbLoading.clear();
while(!tThumbLoadingCodes.empty())
......@@ -123,7 +139,11 @@ void ImageManager::ResizeTexture() {
driver->removeTexture(tUnknown);
driver->removeTexture(tUnknownFit);
driver->removeTexture(tUnknownThumb);
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
driver->removeTexture(tLoading);
tLoading = GetTextureFromFile("textures/cover.jpg", imgWidthThumb, imgHeightThumb);
#endif
......@@ -298,7 +318,11 @@ irr::video::ITexture* ImageManager::GetBigPicture(int code, float zoom) {
tBigPicture = texture;
return texture;
}
<<<<<<< HEAD
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
int ImageManager::LoadThumbThread() {
while(true) {
imageManager.tThumbLoadingMutex.lock();
......@@ -354,11 +378,19 @@ int ImageManager::LoadThumbThread() {
imageManager.tThumbLoadingMutex.unlock();
return 0;
}
<<<<<<< HEAD
#endif // YGOPRO_USE_THUMB_LOAD_THERAD
irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
if(code == 0)
return tUnknownThumb;
#ifndef YGOPRO_USE_THUMB_LOAD_THERAD
=======
#endif // YGOPRO_USE_THUMB_LOAD_THREAD
irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
if(code == 0)
return tUnknownThumb;
#ifndef YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
auto tit = tThumb.find(code);
if(tit == tThumb.end()) {
char file[256];
......@@ -381,7 +413,11 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
tThumb[code] = img;
return (img == NULL) ? tUnknownThumb : img;
}
<<<<<<< HEAD
#else // YGOPRO_USE_THUMB_LOAD_THERAD
=======
#else // YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
imageManager.tThumbLoadingMutex.lock();
auto lit = tThumbLoading.find(code);
if(lit != tThumbLoading.end()) {
......@@ -409,7 +445,11 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
imageManager.tThumbLoadingMutex.unlock();
return tLoading;
}
<<<<<<< HEAD
#endif // YGOPRO_USE_THUMB_LOAD_THERAD
=======
#endif // YGOPRO_USE_THUMB_LOAD_THREAD
>>>>>>> 47859b49df470c09130a8ed4cb9922ab8036c538
if(tit->second)
return tit->second;
else
......
......@@ -2,13 +2,13 @@
#define IMAGEMANAGER_H
#ifndef _OPENMP
#define YGOPRO_USE_THUMB_LOAD_THERAD
#define YGOPRO_USE_THUMB_LOAD_THREAD
#endif
#include "config.h"
#include "data_manager.h"
#include <unordered_map>
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
#include <queue>
#include <mutex>
#endif
......@@ -27,14 +27,14 @@ public:
irr::video::ITexture* GetBigPicture(int code, float zoom);
irr::video::ITexture* GetTextureThumb(int code);
irr::video::ITexture* GetTextureField(int code);
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
static int LoadThumbThread();
#endif
std::unordered_map<int, irr::video::ITexture*> tMap[2];
std::unordered_map<int, irr::video::ITexture*> tThumb;
std::unordered_map<int, irr::video::ITexture*> tFields;
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
std::unordered_map<int, irr::video::IImage*> tThumbLoading;
std::queue<int> tThumbLoadingCodes;
std::mutex tThumbLoadingMutex;
......@@ -47,7 +47,7 @@ public:
irr::video::ITexture* tUnknownFit;
irr::video::ITexture* tUnknownThumb;
irr::video::ITexture* tBigPicture;
#ifdef YGOPRO_USE_THUMB_LOAD_THERAD
#ifdef YGOPRO_USE_THUMB_LOAD_THREAD
irr::video::ITexture* tLoading;
#endif
irr::video::ITexture* tAct;
......
......@@ -232,6 +232,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break;
}
case BUTTON_LOAD_REPLAY: {
int start_turn = 1;
if(open_file) {
ReplayMode::cur_replay.OpenReplay(open_file_name);
open_file = false;
......@@ -243,6 +244,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
myswprintf(replay_path, L"./replay/%ls", mainGame->lstReplayList->getListItem(selected));
if (!ReplayMode::cur_replay.OpenReplay(replay_path))
break;
start_turn = std::wcstol(mainGame->ebRepStartTurn->getText(), nullptr, 10);
}
mainGame->ClearCardInfo();
mainGame->wCardImg->setVisible(true);
......@@ -257,7 +259,6 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->dField.Clear();
mainGame->HideElement(mainGame->wReplay);
mainGame->device->setEventReceiver(&mainGame->dField);
unsigned int start_turn = std::wcstol(mainGame->ebRepStartTurn->getText(), nullptr, 10);
if(start_turn == 1)
start_turn = 0;
ReplayMode::StartReplay(start_turn);
......@@ -526,27 +527,27 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break;
wchar_t replay_path[256]{};
myswprintf(replay_path, L"./replay/%ls", mainGame->lstReplayList->getListItem(sel));
if (!ReplayMode::cur_replay.OpenReplay(replay_path)) {
if (!temp_replay.OpenReplay(replay_path)) {
mainGame->stReplayInfo->setText(L"Error");
break;
}
wchar_t infobuf[256]{};
std::wstring repinfo;
time_t curtime;
if(ReplayMode::cur_replay.pheader.flag & REPLAY_UNIFORM)
curtime = ReplayMode::cur_replay.pheader.start_time;
if(temp_replay.pheader.flag & REPLAY_UNIFORM)
curtime = temp_replay.pheader.start_time;
else
curtime = ReplayMode::cur_replay.pheader.seed;
curtime = temp_replay.pheader.seed;
std::wcsftime(infobuf, sizeof infobuf / sizeof infobuf[0], L"%Y/%m/%d %H:%M:%S\n", std::localtime(&curtime));
repinfo.append(infobuf);
if (ReplayMode::cur_replay.pheader.flag & REPLAY_SINGLE_MODE) {
if (temp_replay.pheader.flag & REPLAY_SINGLE_MODE) {
wchar_t path[256]{};
BufferIO::DecodeUTF8(ReplayMode::cur_replay.script_name.c_str(), path);
BufferIO::DecodeUTF8(temp_replay.script_name.c_str(), path);
repinfo.append(path);
repinfo.append(L"\n");
}
const auto& player_names = ReplayMode::cur_replay.players;
if(ReplayMode::cur_replay.pheader.flag & REPLAY_TAG)
const auto& player_names = temp_replay.players;
if(temp_replay.pheader.flag & REPLAY_TAG)
myswprintf(infobuf, L"%ls\n%ls\n===VS===\n%ls\n%ls\n", player_names[0].c_str(), player_names[1].c_str(), player_names[2].c_str(), player_names[3].c_str());
else
myswprintf(infobuf, L"%ls\n===VS===\n%ls\n", player_names[0].c_str(), player_names[1].c_str());
......
......@@ -2,6 +2,7 @@
#define MENU_HANDLER_H
#include <irrlicht.h>
#include "replay.h"
namespace ygo {
......@@ -10,7 +11,7 @@ public:
bool OnEvent(const irr::SEvent& event) override;
irr::s32 prev_operation{ 0 };
int prev_sel{ -1 };
Replay temp_replay;
};
}
......
......@@ -69,7 +69,7 @@ project "YGOPro"
filter "system:windows"
defines { "_IRR_WCHAR_FILESYSTEM" }
files "ygopro.rc"
links { "opengl32", "ws2_32", "winmm", "gdi32", "kernel32", "user32", "imm32" }
links { "opengl32", "ws2_32", "winmm", "gdi32", "kernel32", "user32", "imm32", "iphlpapi" }
if USE_AUDIO and AUDIO_LIB == "irrklang" then
links { "irrKlang" }
if IRRKLANG_PRO then
......
......@@ -227,8 +227,12 @@ void Replay::Reset() {
script_name.clear();
}
void Replay::SkipInfo(){
if (data_position == 0)
data_position += info_offset;
}
bool Replay::IsReplaying() const {
return is_replaying;
}
bool Replay::ReadInfo() {
int player_count = (pheader.flag & REPLAY_TAG) ? 4 : 2;
for (int i = 0; i < player_count; ++i) {
......
......@@ -81,6 +81,7 @@ public:
void Rewind();
void Reset();
void SkipInfo();
bool IsReplaying() const;
FILE* fp{ nullptr };
#ifdef _WIN32
......
......@@ -25,7 +25,6 @@ private:
public:
static Replay cur_replay;
public:
static bool StartReplay(int skipturn);
static void StopReplay(bool is_exiting = false);
static void SwapField();
......
......@@ -8,7 +8,12 @@ project "event"
"evmap.c", "log.c", "evutil.c", "evutil_rand.c", "strlcpy.c", "signal.c",
"event_tagging.c", "http.c", "evdns.c", "evrpc.c" }
if os.isfile("evutil_time.c") then
files { "evutil_time.c" }
end
filter "system:windows"
prebuildcommands { "xcopy /E /Y $(ProjectDir)..\\event\\WIN32-Code $(ProjectDir)..\\event\\include" }
prebuildcommands { "xcopy /E /Y $(ProjectDir)..\\event\\WIN32-Code $(ProjectDir)..\\event\\include",
"xcopy /E /Y $(ProjectDir)..\\event\\WIN32-Code\\nmake $(ProjectDir)..\\event\\include" }
files { "win32select.c", "evthread_win32.c", "buffer_iocp.c", "event_iocp.c", "bufferevent_async.c" }
defines { "WIN32" } -- quirk of old libevent
defines { "UINT32_MAX=0xffffffffui32" } -- quirk of libevent 2.1.2
......@@ -77,6 +77,14 @@ function GetParam(param)
return _OPTIONS[param] or os.getenv(string.upper(string.gsub(param,"-","_")))
end
function FindHeaderWithSubDir(header, subdir)
local result = os.findheader(header)
if result and subdir then
result = path.join(result, subdir)
end
return result
end
if GetParam("build-lua") then
BUILD_LUA = true
elseif GetParam("no-build-lua") then
......@@ -106,7 +114,7 @@ elseif GetParam("no-build-freetype") then
BUILD_FREETYPE = false
end
if not BUILD_FREETYPE then
FREETYPE_INCLUDE_DIR = GetParam("freetype-include-dir") or os.findheader("freetype2/ft2build.h") .. "/freetype2"
FREETYPE_INCLUDE_DIR = GetParam("freetype-include-dir") or FindHeaderWithSubDir("freetype2/ft2build.h", "freetype2")
FREETYPE_LIB_DIR = GetParam("freetype-lib-dir") or os.findlib("freetype")
end
......@@ -163,9 +171,9 @@ if USE_AUDIO then
MINIAUDIO_BUILD_OPUS_VORBIS = true
end
if not MINIAUDIO_BUILD_OPUS_VORBIS then
OPUS_INCLUDE_DIR = GetParam("opus-include-dir") or os.findheader("opus/opus.h") .. "/opus"
OPUS_INCLUDE_DIR = GetParam("opus-include-dir") or FindHeaderWithSubDir("opus/opus.h", "opus")
OPUS_LIB_DIR = GetParam("opus-lib-dir") or os.findlib("opus")
OPUSFILE_INCLUDE_DIR = GetParam("opusfile-include-dir") or os.findheader("opus/opusfile.h") .. "/opus"
OPUSFILE_INCLUDE_DIR = GetParam("opusfile-include-dir") or FindHeaderWithSubDir("opus/opusfile.h", "opus")
OPUSFILE_LIB_DIR = GetParam("opusfile-lib-dir") or os.findlib("opusfile")
VORBIS_INCLUDE_DIR = GetParam("vorbis-include-dir") or os.findheader("vorbis/vorbisfile.h")
VORBIS_LIB_DIR = GetParam("vorbis-lib-dir") or os.findlib("vorbis")
......
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