Converted all wide strings to utf8 strings
Fixed exception throwing to be standard
This commit is contained in:
parent
e70448820c
commit
e7e77ccfa7
52 changed files with 701 additions and 492 deletions
|
@ -1,5 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "APU.h"
|
||||
#include "CPU.h"
|
||||
|
|
|
@ -27,7 +27,7 @@ class BaseMapper : public IMemoryHandler, public Snapshotable, public INotificat
|
|||
|
||||
bool _hasCHRRAM;
|
||||
bool _hasBattery;
|
||||
wstring _romFilename;
|
||||
string _romFilename;
|
||||
|
||||
MirroringType _mirroringType;
|
||||
|
||||
|
@ -109,9 +109,9 @@ class BaseMapper : public IMemoryHandler, public Snapshotable, public INotificat
|
|||
return (addr >> _chrShift) & _chrSlotMaxIndex;
|
||||
}
|
||||
|
||||
wstring GetBatteryFilename()
|
||||
string GetBatteryFilename()
|
||||
{
|
||||
return FolderUtilities::GetSaveFolder() + _romFilename + L".sav";
|
||||
return FolderUtilities::GetSaveFolder() + _romFilename + ".sav";
|
||||
}
|
||||
|
||||
void RestoreOriginalPrgRam()
|
||||
|
|
|
@ -34,14 +34,14 @@ public:
|
|||
return _type;
|
||||
}
|
||||
|
||||
wstring GetTypeText()
|
||||
string GetTypeText()
|
||||
{
|
||||
switch(_type) {
|
||||
case BreakpointType::Execute: return L"Exec";
|
||||
case BreakpointType::Read: return L"Read";
|
||||
case BreakpointType::Write: return L"Write";
|
||||
case BreakpointType::Execute: return "Exec";
|
||||
case BreakpointType::Read: return "Read";
|
||||
case BreakpointType::Write: return "Write";
|
||||
}
|
||||
return L"";
|
||||
return "";
|
||||
}
|
||||
|
||||
bool IsEnabled()
|
||||
|
|
|
@ -214,7 +214,7 @@ private:
|
|||
case AddrMode::AbsY: return GetAbsYAddr(false);
|
||||
case AddrMode::AbsYW: return GetAbsYAddr(true);
|
||||
}
|
||||
throw new exception();
|
||||
throw std::runtime_error("invalid addressing mode");
|
||||
}
|
||||
|
||||
uint16_t GetOperand()
|
||||
|
|
|
@ -8,11 +8,11 @@ public:
|
|||
string Host;
|
||||
uint16_t Port;
|
||||
|
||||
wstring PlayerName;
|
||||
string PlayerName;
|
||||
uint8_t* AvatarData;
|
||||
uint32_t AvatarSize;
|
||||
|
||||
ClientConnectionData(string host, uint16_t port, wstring playerName, uint8_t* avatarData, uint32_t avatarSize) :
|
||||
ClientConnectionData(string host, uint16_t port, string playerName, uint8_t* avatarData, uint32_t avatarSize) :
|
||||
Host(host), Port(port), PlayerName(playerName), AvatarSize(avatarSize)
|
||||
{
|
||||
if(avatarSize > 0) {
|
||||
|
|
|
@ -26,7 +26,7 @@ shared_ptr<Console> Console::GetInstance()
|
|||
return Console::Instance;
|
||||
}
|
||||
|
||||
void Console::Initialize(wstring filename)
|
||||
void Console::Initialize(string filename)
|
||||
{
|
||||
MessageManager::SendNotification(ConsoleNotificationType::GameStopped);
|
||||
shared_ptr<BaseMapper> mapper = MapperFactory::InitializeFromFile(filename);
|
||||
|
@ -51,23 +51,23 @@ void Console::Initialize(wstring filename)
|
|||
_initialized = true;
|
||||
|
||||
FolderUtilities::AddKnowGameFolder(FolderUtilities::GetFolderName(filename));
|
||||
MessageManager::DisplayMessage(L"Game loaded", FolderUtilities::GetFilename(filename, false));
|
||||
MessageManager::DisplayMessage("Game loaded", FolderUtilities::GetFilename(filename, false));
|
||||
} else {
|
||||
MessageManager::DisplayMessage(L"Error", wstring(L"Could not load file: ") + FolderUtilities::GetFilename(filename, true));
|
||||
MessageManager::DisplayMessage("Error", string("Could not load file: ") + FolderUtilities::GetFilename(filename, true));
|
||||
}
|
||||
}
|
||||
|
||||
void Console::LoadROM(wstring filepath)
|
||||
void Console::LoadROM(string filepath)
|
||||
{
|
||||
Console::Pause();
|
||||
Instance->Initialize(filepath);
|
||||
Console::Resume();
|
||||
}
|
||||
|
||||
bool Console::LoadROM(wstring filename, uint32_t crc32Hash)
|
||||
bool Console::LoadROM(string filename, uint32_t crc32Hash)
|
||||
{
|
||||
wstring currentRomFilepath = Console::GetROMPath();
|
||||
wstring currentFolder = FolderUtilities::GetFolderName(currentRomFilepath);
|
||||
string currentRomFilepath = Console::GetROMPath();
|
||||
string currentFolder = FolderUtilities::GetFolderName(currentRomFilepath);
|
||||
if(!currentRomFilepath.empty()) {
|
||||
if(ROMLoader::GetCRC32(Console::GetROMPath()) == crc32Hash) {
|
||||
//Current game matches, no need to do anything
|
||||
|
@ -75,16 +75,16 @@ bool Console::LoadROM(wstring filename, uint32_t crc32Hash)
|
|||
}
|
||||
|
||||
//Try to find the game in the same folder as the current game's folder
|
||||
wstring match = ROMLoader::FindMatchingRomInFolder(currentFolder, filename, crc32Hash);
|
||||
string match = ROMLoader::FindMatchingRomInFolder(currentFolder, filename, crc32Hash);
|
||||
if(!match.empty()) {
|
||||
Console::LoadROM(match);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
for(wstring folder : FolderUtilities::GetKnowGameFolders()) {
|
||||
for(string folder : FolderUtilities::GetKnowGameFolders()) {
|
||||
if(folder != currentFolder) {
|
||||
wstring match = ROMLoader::FindMatchingRomInFolder(folder, filename, crc32Hash);
|
||||
string match = ROMLoader::FindMatchingRomInFolder(folder, filename, crc32Hash);
|
||||
if(!match.empty()) {
|
||||
Console::LoadROM(match);
|
||||
return true;
|
||||
|
@ -94,13 +94,9 @@ bool Console::LoadROM(wstring filename, uint32_t crc32Hash)
|
|||
return false;
|
||||
}
|
||||
|
||||
wstring Console::GetROMPath()
|
||||
string Console::GetROMPath()
|
||||
{
|
||||
wstring filepath;
|
||||
if(Instance->_initialized) {
|
||||
filepath = Instance->_romFilepath;
|
||||
}
|
||||
return filepath;
|
||||
return Instance->_romFilepath;
|
||||
}
|
||||
|
||||
void Console::Reset(bool softReset)
|
||||
|
|
|
@ -34,7 +34,7 @@ class Console
|
|||
unique_ptr<ControlManager> _controlManager;
|
||||
shared_ptr<MemoryManager> _memoryManager;
|
||||
|
||||
wstring _romFilepath;
|
||||
string _romFilepath;
|
||||
|
||||
bool _stop = false;
|
||||
bool _reset = false;
|
||||
|
@ -42,7 +42,7 @@ class Console
|
|||
bool _initialized = false;
|
||||
|
||||
void ResetComponents(bool softReset);
|
||||
void Initialize(wstring filename);
|
||||
void Initialize(string filename);
|
||||
|
||||
public:
|
||||
Console();
|
||||
|
@ -63,10 +63,10 @@ class Console
|
|||
static void LoadState(istream &loadStream);
|
||||
static void LoadState(uint8_t *buffer, uint32_t bufferSize);
|
||||
|
||||
static void LoadROM(wstring filepath);
|
||||
static bool LoadROM(wstring romName, uint32_t crc32Hash);
|
||||
static wstring FindMatchingRomInFolder(wstring folder, wstring romFilename, uint32_t crc32Hash);
|
||||
static wstring GetROMPath();
|
||||
static void LoadROM(string filepath);
|
||||
static bool LoadROM(string romName, uint32_t crc32Hash);
|
||||
static string FindMatchingRomInFolder(string folder, string romFilename, uint32_t crc32Hash);
|
||||
static string GetROMPath();
|
||||
|
||||
static bool CheckFlag(int flag);
|
||||
static void SetFlags(int flags);
|
||||
|
|
|
@ -34,7 +34,7 @@ uint32_t ControlManager::GetPressedKey()
|
|||
return 0;
|
||||
}
|
||||
|
||||
wchar_t* ControlManager::GetKeyName(uint32_t keyCode)
|
||||
string ControlManager::GetKeyName(uint32_t keyCode)
|
||||
{
|
||||
if(_keyManager != nullptr) {
|
||||
return _keyManager->GetKeyName(keyCode);
|
||||
|
@ -42,7 +42,7 @@ wchar_t* ControlManager::GetKeyName(uint32_t keyCode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t ControlManager::GetKeyCode(wchar_t* keyName)
|
||||
uint32_t ControlManager::GetKeyCode(string keyName)
|
||||
{
|
||||
if(_keyManager != nullptr) {
|
||||
return _keyManager->GetKeyCode(keyName);
|
||||
|
@ -146,7 +146,7 @@ bool ControlManager::HasFourScoreAdapter()
|
|||
void ControlManager::RefreshStateBuffer(uint8_t port)
|
||||
{
|
||||
if(port >= 2) {
|
||||
throw exception("Invalid port");
|
||||
throw std::runtime_error("Invalid port");
|
||||
}
|
||||
|
||||
//First 8 bits : Gamepad 1/2
|
||||
|
@ -170,7 +170,7 @@ void ControlManager::RefreshStateBuffer(uint8_t port)
|
|||
uint8_t ControlManager::GetPortValue(uint8_t port)
|
||||
{
|
||||
if(port >= 2) {
|
||||
throw exception("Invalid port");
|
||||
throw std::runtime_error("Invalid port");
|
||||
}
|
||||
|
||||
if(_refreshState) {
|
||||
|
|
|
@ -39,8 +39,8 @@ class ControlManager : public Snapshotable, public IMemoryHandler
|
|||
static void RegisterKeyManager(IKeyManager* keyManager);
|
||||
static bool IsKeyPressed(uint32_t keyCode);
|
||||
static uint32_t GetPressedKey();
|
||||
static wchar_t* GetKeyName(uint32_t keyCode);
|
||||
static uint32_t GetKeyCode(wchar_t* keyName);
|
||||
static string GetKeyName(uint32_t keyCode);
|
||||
static uint32_t GetKeyCode(string keyName);
|
||||
|
||||
static void BackupControlDevices();
|
||||
static void RestoreControlDevices();
|
||||
|
|
|
@ -140,6 +140,8 @@
|
|||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -162,6 +164,8 @@
|
|||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -184,6 +188,8 @@
|
|||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -204,6 +210,8 @@
|
|||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -224,6 +232,8 @@
|
|||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -244,6 +254,8 @@
|
|||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
|
|
@ -52,7 +52,7 @@ void GameClient::PrivateConnect(shared_ptr<ClientConnectionData> connectionData)
|
|||
_connection.reset(new GameClientConnection(_socket, connectionData));
|
||||
_connected = true;
|
||||
} else {
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Could not connect to server.");
|
||||
MessageManager::DisplayMessage("Net Play", "Could not connect to server.");
|
||||
_connected = false;
|
||||
_socket.reset();
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ GameClientConnection::GameClientConnection(shared_ptr<Socket> socket, shared_ptr
|
|||
_controlDevice = ControlManager::GetControlDevice(0);
|
||||
ControlManager::BackupControlDevices();
|
||||
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Connected to server.");
|
||||
MessageManager::DisplayMessage("Net Play", "Connected to server.");
|
||||
|
||||
SendHandshake();
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ GameClientConnection::~GameClientConnection()
|
|||
{
|
||||
_virtualControllers.clear();
|
||||
ControlManager::RestoreControlDevices();
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Connection to server lost.");
|
||||
MessageManager::DisplayMessage("Net Play", "Connection to server lost.");
|
||||
}
|
||||
|
||||
void GameClientConnection::SendHandshake()
|
||||
|
@ -77,7 +77,7 @@ void GameClientConnection::ProcessMessage(NetMessage* message)
|
|||
gameInfo = (GameInformationMessage*)message;
|
||||
if(gameInfo->GetPort() != _controllerPort) {
|
||||
_controllerPort = gameInfo->GetPort();
|
||||
MessageManager::DisplayMessage(wstring(L"Connected as player ") + std::to_wstring(_controllerPort + 1));
|
||||
MessageManager::DisplayMessage(string("Connected as player ") + std::to_string(_controllerPort + 1));
|
||||
}
|
||||
|
||||
DisposeVirtualControllers();
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
class GameInformationMessage : public NetMessage
|
||||
{
|
||||
private:
|
||||
wchar_t *_romFilename = nullptr;
|
||||
char* _romFilename = nullptr;
|
||||
uint32_t _romFilenameLength = 0;
|
||||
uint32_t _crc32Hash = 0;
|
||||
uint8_t _controllerPort = 0;
|
||||
|
@ -27,7 +27,7 @@ protected:
|
|||
public:
|
||||
GameInformationMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
|
||||
GameInformationMessage(wstring filepath, uint8_t port, bool paused) : NetMessage(MessageType::GameInformation)
|
||||
GameInformationMessage(string filepath, uint8_t port, bool paused) : NetMessage(MessageType::GameInformation)
|
||||
{
|
||||
CopyString(&_romFilename, _romFilenameLength, FolderUtilities::GetFilename(filepath, true));
|
||||
_crc32Hash = ROMLoader::GetCRC32(filepath);
|
||||
|
@ -37,12 +37,12 @@ public:
|
|||
|
||||
bool AttemptLoadGame()
|
||||
{
|
||||
wstring filename = _romFilename;
|
||||
string filename = _romFilename;
|
||||
if(filename.size() > 0) {
|
||||
if(Console::LoadROM(filename, _crc32Hash)) {
|
||||
return true;
|
||||
} else {
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Could not find matching game ROM.");
|
||||
MessageManager::DisplayMessage("Net Play", "Could not find matching game ROM.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ void GameServer::Exec()
|
|||
_listener->Listen(10);
|
||||
_stop = false;
|
||||
_initialized = true;
|
||||
MessageManager::DisplayMessage(L"Net Play" , L"Server started (Port: " + std::to_wstring(_port) + L")");
|
||||
MessageManager::DisplayMessage("Net Play" , "Server started (Port: " + std::to_string(_port) + ")");
|
||||
|
||||
while(!_stop) {
|
||||
AcceptConnections();
|
||||
|
@ -76,7 +76,7 @@ void GameServer::Stop()
|
|||
{
|
||||
_initialized = false;
|
||||
_listener.reset();
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Server stopped");
|
||||
MessageManager::DisplayMessage("Net Play", "Server stopped");
|
||||
}
|
||||
|
||||
void GameServer::StartServer(uint16_t port)
|
||||
|
|
|
@ -25,9 +25,9 @@ GameServerConnection::GameServerConnection(shared_ptr<Socket> socket, int contro
|
|||
GameServerConnection::~GameServerConnection()
|
||||
{
|
||||
if(_connectionData) {
|
||||
MessageManager::DisplayToast(L"Net Play", _connectionData->PlayerName + L" (Player " + std::to_wstring(_controllerPort + 1) + L") disconnected.", _connectionData->AvatarData, _connectionData->AvatarSize);
|
||||
MessageManager::DisplayToast("Net Play", _connectionData->PlayerName + " (Player " + std::to_string(_controllerPort + 1) + ") disconnected.", _connectionData->AvatarData, _connectionData->AvatarSize);
|
||||
} else {
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Player " + std::to_wstring(_controllerPort + 1) + L" disconnected.");
|
||||
MessageManager::DisplayMessage("Net Play", "Player " + std::to_string(_controllerPort + 1) + " disconnected.");
|
||||
}
|
||||
|
||||
ControlManager::RestoreControlDevices();
|
||||
|
@ -88,7 +88,7 @@ void GameServerConnection::ProcessMessage(NetMessage* message)
|
|||
if(((HandShakeMessage*)message)->IsValid()) {
|
||||
_connectionData.reset(new ClientConnectionData("", 0, ((HandShakeMessage*)message)->GetPlayerName(), ((HandShakeMessage*)message)->GetAvatarData(), ((HandShakeMessage*)message)->GetAvatarSize()));
|
||||
|
||||
MessageManager::DisplayToast(L"Net Play", _connectionData->PlayerName + L" (Player " + std::to_wstring(_controllerPort + 1) + L") connected.", _connectionData->AvatarData, _connectionData->AvatarSize);
|
||||
MessageManager::DisplayToast("Net Play", _connectionData->PlayerName + " (Player " + std::to_string(_controllerPort + 1) + ") connected.", _connectionData->AvatarData, _connectionData->AvatarSize);
|
||||
SendGameInformation();
|
||||
SendGameState();
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ class HandShakeMessage : public NetMessage
|
|||
private:
|
||||
const static int CurrentVersion = 1;
|
||||
uint32_t _protocolVersion = CurrentVersion;
|
||||
wchar_t *_playerName = nullptr;
|
||||
char* _playerName = nullptr;
|
||||
uint32_t _playerNameLength = 0;
|
||||
void* _avatarData = nullptr;
|
||||
uint32_t _avatarSize = 0;
|
||||
|
@ -22,7 +22,7 @@ protected:
|
|||
|
||||
public:
|
||||
HandShakeMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
HandShakeMessage(wstring playerName, uint8_t* avatarData, uint32_t avatarSize) : NetMessage(MessageType::HandShake)
|
||||
HandShakeMessage(string playerName, uint8_t* avatarData, uint32_t avatarSize) : NetMessage(MessageType::HandShake)
|
||||
{
|
||||
_protocolVersion = 1;
|
||||
CopyString(&_playerName, _playerNameLength, playerName);
|
||||
|
@ -30,9 +30,9 @@ public:
|
|||
_avatarData = avatarData;
|
||||
}
|
||||
|
||||
wstring GetPlayerName()
|
||||
string GetPlayerName()
|
||||
{
|
||||
return wstring(_playerName);
|
||||
return string(_playerName);
|
||||
}
|
||||
|
||||
uint8_t* GetAvatarData()
|
||||
|
|
|
@ -8,6 +8,6 @@ public:
|
|||
virtual void RefreshState() = 0;
|
||||
virtual bool IsKeyPressed(uint32_t keyCode) = 0;
|
||||
virtual uint32_t GetPressedKey() = 0;
|
||||
virtual wchar_t* GetKeyName(uint32_t keyCode) = 0;
|
||||
virtual uint32_t GetKeyCode(wchar_t* keyName) = 0;
|
||||
virtual string GetKeyName(uint32_t keyCode) = 0;
|
||||
virtual uint32_t GetKeyCode(string keyName) = 0;
|
||||
};
|
|
@ -60,6 +60,6 @@ public:
|
|||
virtual void GetMemoryRanges(MemoryRanges &ranges) = 0;
|
||||
virtual uint8_t ReadRAM(uint16_t addr) = 0;
|
||||
virtual void WriteRAM(uint16_t addr, uint8_t value) = 0;
|
||||
virtual uint8_t ReadVRAM(uint16_t addr) { throw exception("Operation not implemented"); }
|
||||
virtual void WriteVRAM(uint16_t addr, uint8_t value) { throw exception("Operation not implemented"); }
|
||||
virtual uint8_t ReadVRAM(uint16_t addr) { throw std::runtime_error("Operation not implemented"); }
|
||||
virtual void WriteVRAM(uint16_t addr, uint8_t value) { throw std::runtime_error("Operation not implemented"); }
|
||||
};
|
|
@ -8,21 +8,21 @@ class ToastInfo;
|
|||
class IMessageManager
|
||||
{
|
||||
public:
|
||||
virtual void DisplayMessage(wstring title, wstring message) = 0;
|
||||
virtual void DisplayMessage(string title, string message) = 0;
|
||||
virtual void DisplayToast(shared_ptr<ToastInfo> toast) = 0;
|
||||
};
|
||||
|
||||
class ToastInfo
|
||||
{
|
||||
private:
|
||||
wstring _title;
|
||||
wstring _message;
|
||||
string _title;
|
||||
string _message;
|
||||
uint8_t* _icon;
|
||||
uint32_t _iconSize;
|
||||
uint64_t _endTime;
|
||||
uint64_t _startTime;
|
||||
|
||||
uint8_t* ReadFile(wstring filename, uint32_t &fileSize)
|
||||
uint8_t* ReadFile(string filename, uint32_t &fileSize)
|
||||
{
|
||||
ifstream file(filename, ios::in | ios::binary);
|
||||
if(file) {
|
||||
|
@ -43,7 +43,7 @@ private:
|
|||
}
|
||||
|
||||
public:
|
||||
ToastInfo(wstring title, wstring message, int displayDuration, wstring iconFile)
|
||||
ToastInfo(string title, string message, int displayDuration, string iconFile)
|
||||
{
|
||||
_title = title;
|
||||
_message = message;
|
||||
|
@ -54,7 +54,7 @@ public:
|
|||
_endTime = _startTime + displayDuration;
|
||||
}
|
||||
|
||||
ToastInfo(wstring title, wstring message, int displayDuration, uint8_t* iconData, uint32_t iconSize)
|
||||
ToastInfo(string title, string message, int displayDuration, uint8_t* iconData, uint32_t iconSize)
|
||||
{
|
||||
_title = title;
|
||||
_message = message;
|
||||
|
@ -74,12 +74,12 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
wstring GetToastTitle()
|
||||
string GetToastTitle()
|
||||
{
|
||||
return _title;
|
||||
}
|
||||
|
||||
wstring GetToastMessage()
|
||||
string GetToastMessage()
|
||||
{
|
||||
return _message;
|
||||
}
|
||||
|
|
|
@ -37,13 +37,13 @@ BaseMapper* MapperFactory::GetMapperFromID(uint8_t mapperID)
|
|||
case 71: return new UNROM(); //TODO: "It's largely a clone of UNROM, and Camerica games were initially emulated under iNES Mapper 002 before 071 was assigned."
|
||||
case 163: return new Nanjing();
|
||||
case 189: return new MMC3_189();
|
||||
default: MessageManager::DisplayMessage(L"Error", L"Unsupported mapper, cannot load game.");
|
||||
default: MessageManager::DisplayMessage("Error", "Unsupported mapper, cannot load game.");
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
shared_ptr<BaseMapper> MapperFactory::InitializeFromFile(wstring filename)
|
||||
shared_ptr<BaseMapper> MapperFactory::InitializeFromFile(string filename)
|
||||
{
|
||||
ROMLoader loader;
|
||||
|
||||
|
|
|
@ -7,5 +7,5 @@ class MapperFactory
|
|||
static BaseMapper* GetMapperFromID(uint8_t mapperID);
|
||||
|
||||
public:
|
||||
static shared_ptr<BaseMapper> InitializeFromFile(wstring filename);
|
||||
static shared_ptr<BaseMapper> InitializeFromFile(string filename);
|
||||
};
|
||||
|
|
|
@ -78,7 +78,7 @@ void MemoryManager::InitializeMemoryHandlers(IMemoryHandler** memoryHandlers, IM
|
|||
{
|
||||
for(uint16_t address : *addresses) {
|
||||
if(memoryHandlers[address] != nullptr) {
|
||||
throw exception("Not supported");
|
||||
throw std::runtime_error("Not supported");
|
||||
}
|
||||
memoryHandlers[address] = handler;
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ void MemoryManager::WriteVRAM(uint16_t addr, uint8_t value)
|
|||
break;
|
||||
|
||||
default:
|
||||
throw exception("Not implemented yet");
|
||||
throw std::runtime_error("Not implemented yet");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,15 +10,14 @@ void MessageManager::RegisterMessageManager(IMessageManager* messageManager)
|
|||
MessageManager::_messageManager = messageManager;
|
||||
}
|
||||
|
||||
void MessageManager::DisplayMessage(wstring title, wstring message)
|
||||
void MessageManager::DisplayMessage(string title, string message)
|
||||
{
|
||||
std::wcout << message << std::endl;
|
||||
if(MessageManager::_messageManager) {
|
||||
MessageManager::_messageManager->DisplayMessage(title, message);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageManager::DisplayToast(wstring title, wstring message, uint8_t* iconData, uint32_t iconSize)
|
||||
void MessageManager::DisplayToast(string title, string message, uint8_t* iconData, uint32_t iconSize)
|
||||
{
|
||||
if(MessageManager::_messageManager) {
|
||||
MessageManager::_messageManager->DisplayToast(shared_ptr<ToastInfo>(new ToastInfo(title, message, 4000, iconData, iconSize)));
|
||||
|
|
|
@ -13,8 +13,8 @@ private:
|
|||
|
||||
public:
|
||||
static void RegisterMessageManager(IMessageManager* messageManager);
|
||||
static void DisplayMessage(wstring title, wstring message = L"");
|
||||
static void DisplayToast(wstring title, wstring message, uint8_t* iconData, uint32_t iconSize);
|
||||
static void DisplayMessage(string title, string message = "");
|
||||
static void DisplayToast(string title, string message, uint8_t* iconData, uint32_t iconSize);
|
||||
|
||||
static void RegisterNotificationListener(INotificationListener* notificationListener);
|
||||
static void UnregisterNotificationListener(INotificationListener* notificationListener);
|
||||
|
|
|
@ -46,7 +46,7 @@ uint8_t Movie::GetState(uint8_t port)
|
|||
|
||||
if(_readPosition[port] >= _data.DataSize[port]) {
|
||||
//End of movie file
|
||||
MessageManager::DisplayMessage(L"Movies", L"Movie ended.");
|
||||
MessageManager::DisplayMessage("Movies", "Movie ended.");
|
||||
_playing = false;
|
||||
}
|
||||
|
||||
|
@ -68,10 +68,10 @@ void Movie::Reset()
|
|||
_playing = false;
|
||||
}
|
||||
|
||||
void Movie::StartRecording(wstring filename, bool reset)
|
||||
void Movie::StartRecording(string filename, bool reset)
|
||||
{
|
||||
_filename = filename;
|
||||
_file = ofstream(filename, ios::out | ios::binary);
|
||||
_file.open(filename, ios::out | ios::binary);
|
||||
|
||||
if(_file) {
|
||||
Console::Pause();
|
||||
|
@ -88,7 +88,7 @@ void Movie::StartRecording(wstring filename, bool reset)
|
|||
|
||||
Console::Resume();
|
||||
|
||||
MessageManager::DisplayMessage(L"Movies", L"Recording to: " + FolderUtilities::GetFilename(filename, true));
|
||||
MessageManager::DisplayMessage("Movies", "Recording to: " + FolderUtilities::GetFilename(filename, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,12 +102,12 @@ void Movie::StopAll()
|
|||
Save();
|
||||
}
|
||||
if(_playing) {
|
||||
MessageManager::DisplayMessage(L"Movies", L"Movie stopped.");
|
||||
MessageManager::DisplayMessage("Movies", "Movie stopped.");
|
||||
_playing = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Movie::PlayMovie(wstring filename)
|
||||
void Movie::PlayMovie(string filename)
|
||||
{
|
||||
StopAll();
|
||||
|
||||
|
@ -123,16 +123,16 @@ void Movie::PlayMovie(wstring filename)
|
|||
}
|
||||
_playing = true;
|
||||
Console::Resume();
|
||||
MessageManager::DisplayMessage(L"Movies", L"Playing movie: " + FolderUtilities::GetFilename(filename, true));
|
||||
MessageManager::DisplayMessage("Movies", "Playing movie: " + FolderUtilities::GetFilename(filename, true));
|
||||
}
|
||||
}
|
||||
|
||||
void Movie::Record(wstring filename, bool reset)
|
||||
void Movie::Record(string filename, bool reset)
|
||||
{
|
||||
Instance->StartRecording(filename, reset);
|
||||
}
|
||||
|
||||
void Movie::Play(wstring filename)
|
||||
void Movie::Play(string filename)
|
||||
{
|
||||
Instance->PlayMovie(filename);
|
||||
}
|
||||
|
@ -157,15 +157,15 @@ bool Movie::Save()
|
|||
_file.write("MMO", 3);
|
||||
_data.SaveStateSize = (uint32_t)_startState.tellp();
|
||||
|
||||
wstring romFilepath = Console::GetROMPath();
|
||||
wstring romFilename = FolderUtilities::GetFilename(romFilepath, true);
|
||||
string romFilepath = Console::GetROMPath();
|
||||
string romFilename = FolderUtilities::GetFilename(romFilepath, true);
|
||||
|
||||
uint32_t romCrc32 = ROMLoader::GetCRC32(romFilepath);
|
||||
_file.write((char*)&romCrc32, sizeof(romCrc32));
|
||||
|
||||
uint32_t romNameSize = (uint32_t)romFilename.size();
|
||||
_file.write((char*)&romNameSize, sizeof(uint32_t));
|
||||
_file.write((char*)romFilename.c_str(), romNameSize * sizeof(wchar_t));
|
||||
_file.write((char*)romFilename.c_str(), romNameSize);
|
||||
|
||||
_file.write((char*)&_data.SaveStateSize, sizeof(uint32_t));
|
||||
|
||||
|
@ -187,12 +187,12 @@ bool Movie::Save()
|
|||
|
||||
_file.close();
|
||||
|
||||
MessageManager::DisplayMessage(L"Movies", L"Movie saved to file: " + FolderUtilities::GetFilename(_filename, true));
|
||||
MessageManager::DisplayMessage("Movies", "Movie saved to file: " + FolderUtilities::GetFilename(_filename, true));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Movie::Load(wstring filename)
|
||||
bool Movie::Load(string filename)
|
||||
{
|
||||
ifstream file(filename, ios::in | ios::binary);
|
||||
|
||||
|
@ -211,11 +211,11 @@ bool Movie::Load(wstring filename)
|
|||
uint32_t romNameSize;
|
||||
file.read((char*)&romNameSize, sizeof(uint32_t));
|
||||
|
||||
wchar_t* romFilename = new wchar_t[romNameSize + 1];
|
||||
memset(romFilename, 0, (romNameSize+1)*sizeof(wchar_t));
|
||||
file.read((char*)romFilename, romNameSize * sizeof(wchar_t));
|
||||
char* romFilename = new char[romNameSize + 1];
|
||||
memset(romFilename, 0, (romNameSize+1));
|
||||
file.read((char*)romFilename, romNameSize);
|
||||
|
||||
wstring currentRom = Console::GetROMPath();
|
||||
string currentRom = Console::GetROMPath();
|
||||
bool loadedGame = true;
|
||||
if(currentRom.empty() || romCrc32 != ROMLoader::GetCRC32(currentRom)) {
|
||||
//Loaded game isn't the same as the game used for the movie, attempt to load the correct game
|
||||
|
@ -241,7 +241,7 @@ bool Movie::Load(wstring filename)
|
|||
delete[] readBuffer;
|
||||
}
|
||||
} else {
|
||||
MessageManager::DisplayMessage(L"Movies", L"Missing ROM required (" + wstring(romFilename) + L") to play movie.");
|
||||
MessageManager::DisplayMessage("Movies", "Missing ROM required (" + string(romFilename) + ") to play movie.");
|
||||
}
|
||||
file.close();
|
||||
|
||||
|
|
12
Core/Movie.h
12
Core/Movie.h
|
@ -21,14 +21,14 @@ class Movie
|
|||
uint8_t _lastState[4];
|
||||
uint32_t _readPosition[4];
|
||||
ofstream _file;
|
||||
wstring _filename;
|
||||
string _filename;
|
||||
stringstream _startState;
|
||||
MovieData _data;
|
||||
|
||||
private:
|
||||
void PushState(uint8_t port);
|
||||
void StartRecording(wstring filename, bool reset);
|
||||
void PlayMovie(wstring filename);
|
||||
void StartRecording(string filename, bool reset);
|
||||
void PlayMovie(string filename);
|
||||
void StopAll();
|
||||
void Reset();
|
||||
|
||||
|
@ -36,11 +36,11 @@ class Movie
|
|||
uint8_t GetState(uint8_t port);
|
||||
|
||||
bool Save();
|
||||
bool Load(wstring filename);
|
||||
bool Load(string filename);
|
||||
|
||||
public:
|
||||
static void Record(wstring filename, bool reset);
|
||||
static void Play(wstring filename);
|
||||
static void Record(string filename, bool reset);
|
||||
static void Play(string filename);
|
||||
static void Stop();
|
||||
static bool Playing();
|
||||
static bool Recording();
|
||||
|
|
|
@ -95,10 +95,10 @@ public:
|
|||
socket.SendBuffer();
|
||||
}
|
||||
|
||||
void CopyString(wchar_t** dest, uint32_t &length, wstring src)
|
||||
void CopyString(char** dest, uint32_t &length, string src)
|
||||
{
|
||||
length = (uint32_t)(src.length() + 1)*sizeof(wchar_t);
|
||||
*dest = (wchar_t*)new uint8_t[length];
|
||||
length = (uint32_t)(src.length() + 1);
|
||||
*dest = new char[length];
|
||||
memcpy(*dest, src.c_str(), length);
|
||||
_pointersToRelease.push_back(*dest);
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ class ROMLoader
|
|||
{
|
||||
private:
|
||||
NESHeader _header;
|
||||
wstring _filename;
|
||||
string _filename;
|
||||
uint8_t* _prgRAM = nullptr;
|
||||
uint8_t* _chrRAM = nullptr;
|
||||
uint32_t _crc32;
|
||||
|
@ -156,7 +156,7 @@ class ROMLoader
|
|||
}
|
||||
}
|
||||
|
||||
bool LoadFile(wstring filename)
|
||||
bool LoadFile(string filename)
|
||||
{
|
||||
bool result = false;
|
||||
ifstream file(filename, ios::in | ios::binary);
|
||||
|
@ -218,12 +218,12 @@ class ROMLoader
|
|||
return _header.HasBattery();
|
||||
}
|
||||
|
||||
wstring GetFilename()
|
||||
string GetFilename()
|
||||
{
|
||||
return _filename;
|
||||
}
|
||||
|
||||
static uint32_t GetCRC32(wstring filename)
|
||||
static uint32_t GetCRC32(string filename)
|
||||
{
|
||||
ROMLoader loader;
|
||||
uint32_t crc = 0;
|
||||
|
@ -233,13 +233,13 @@ class ROMLoader
|
|||
return crc;
|
||||
}
|
||||
|
||||
static wstring FindMatchingRomInFolder(wstring folder, wstring romFilename, uint32_t crc32Hash)
|
||||
static string FindMatchingRomInFolder(string folder, string romFilename, uint32_t crc32Hash)
|
||||
{
|
||||
vector<wstring> romFiles = FolderUtilities::GetFilesInFolder(folder, L"*.nes", true);
|
||||
for(wstring zipFile : FolderUtilities::GetFilesInFolder(folder, L"*.zip", true)) {
|
||||
vector<string> romFiles = FolderUtilities::GetFilesInFolder(folder, "*.nes", true);
|
||||
for(string zipFile : FolderUtilities::GetFilesInFolder(folder, "*.zip", true)) {
|
||||
romFiles.push_back(zipFile);
|
||||
}
|
||||
for(wstring romFile : romFiles) {
|
||||
for(string romFile : romFiles) {
|
||||
//Quick search by filename
|
||||
if(FolderUtilities::GetFilename(romFile, true).compare(romFilename) == 0) {
|
||||
if(ROMLoader::GetCRC32(romFile) == crc32Hash) {
|
||||
|
@ -248,7 +248,7 @@ class ROMLoader
|
|||
}
|
||||
}
|
||||
|
||||
for(wstring romFile : romFiles) {
|
||||
for(string romFile : romFiles) {
|
||||
//Slower search by CRC value
|
||||
if(ROMLoader::GetCRC32(romFile) == crc32Hash) {
|
||||
//Matching ROM found
|
||||
|
@ -256,7 +256,7 @@ class ROMLoader
|
|||
}
|
||||
}
|
||||
|
||||
return L"";
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
#include "Console.h"
|
||||
#include "../Utilities/FolderUtilities.h"
|
||||
|
||||
wstring SaveStateManager::GetStateFilepath(int stateIndex)
|
||||
string SaveStateManager::GetStateFilepath(int stateIndex)
|
||||
{
|
||||
wstring folder = FolderUtilities::GetSaveStateFolder();
|
||||
wstring filename = FolderUtilities::GetFilename(Console::GetROMPath(), false) + L"_" + std::to_wstring(stateIndex) + L".mst";
|
||||
string folder = FolderUtilities::GetSaveStateFolder();
|
||||
string filename = FolderUtilities::GetFilename(Console::GetROMPath(), false) + "_" + std::to_string(stateIndex) + ".mst";
|
||||
return FolderUtilities::CombinePath(folder, filename);
|
||||
}
|
||||
|
||||
uint64_t SaveStateManager::GetStateInfo(int stateIndex)
|
||||
{
|
||||
wstring filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
string filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
ifstream file(filepath, ios::in | ios::binary);
|
||||
|
||||
if(file) {
|
||||
|
@ -26,7 +26,7 @@ uint64_t SaveStateManager::GetStateInfo(int stateIndex)
|
|||
|
||||
void SaveStateManager::SaveState(int stateIndex)
|
||||
{
|
||||
wstring filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
string filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
ofstream file(filepath, ios::out | ios::binary);
|
||||
|
||||
if(file) {
|
||||
|
@ -34,13 +34,13 @@ void SaveStateManager::SaveState(int stateIndex)
|
|||
Console::SaveState(file);
|
||||
Console::Resume();
|
||||
file.close();
|
||||
MessageManager::DisplayMessage(L"Game States", L"State #" + std::to_wstring(stateIndex) + L" saved.");
|
||||
MessageManager::DisplayMessage("Game States", "State #" + std::to_string(stateIndex) + " saved.");
|
||||
}
|
||||
}
|
||||
|
||||
bool SaveStateManager::LoadState(int stateIndex)
|
||||
{
|
||||
wstring filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
string filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
ifstream file(filepath, ios::in | ios::binary);
|
||||
|
||||
if(file) {
|
||||
|
@ -48,10 +48,10 @@ bool SaveStateManager::LoadState(int stateIndex)
|
|||
Console::LoadState(file);
|
||||
Console::Resume();
|
||||
file.close();
|
||||
MessageManager::DisplayMessage(L"Game States", L"State #" + std::to_wstring(stateIndex) + L" loaded.");
|
||||
MessageManager::DisplayMessage("Game States", "State #" + std::to_string(stateIndex) + " loaded.");
|
||||
return true;
|
||||
}
|
||||
|
||||
MessageManager::DisplayMessage(L"Game States", L"Slot is empty.");
|
||||
MessageManager::DisplayMessage("Game States", "Slot is empty.");
|
||||
return false;
|
||||
}
|
|
@ -5,11 +5,11 @@
|
|||
class SaveStateManager
|
||||
{
|
||||
private:
|
||||
static wstring SaveStateManager::GetStateFilepath(int stateIndex);
|
||||
static string GetStateFilepath(int stateIndex);
|
||||
|
||||
public:
|
||||
static uint64_t SaveStateManager::GetStateInfo(int stateIndex);
|
||||
static void SaveStateManager::SaveState(int stateIndex);
|
||||
static bool SaveStateManager::LoadState(int stateIndex);
|
||||
static uint64_t GetStateInfo(int stateIndex);
|
||||
static void SaveState(int stateIndex);
|
||||
static bool LoadState(int stateIndex);
|
||||
|
||||
};
|
|
@ -41,7 +41,7 @@ ButtonState StandardController::GetButtonState()
|
|||
|
||||
//Turbo buttons - need to be applied for at least 2 reads in a row (some games require this)
|
||||
uint8_t turboFreq = 1 << (4 - keyMapping.TurboSpeed);
|
||||
bool turboOn = PPU::GetFrameCount() % turboFreq < turboFreq / 2;
|
||||
bool turboOn = (uint8_t)(PPU::GetFrameCount() % turboFreq) < turboFreq / 2;
|
||||
if(turboOn) {
|
||||
state.A |= ControlManager::IsKeyPressed(keyMapping.TurboA);
|
||||
state.B |= ControlManager::IsKeyPressed(keyMapping.TurboB);
|
||||
|
|
|
@ -166,7 +166,7 @@ class VRC2_4 : public BaseMapper
|
|||
A1 |= (addr >> 3) & 0x01;
|
||||
break;
|
||||
default:
|
||||
throw exception("not supported");
|
||||
throw std::runtime_error("not supported");
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <SDKDDKVer.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <memory>
|
||||
|
@ -20,17 +17,17 @@
|
|||
#include <list>
|
||||
#include <atomic>
|
||||
|
||||
#include "../Utilities/UTF8Util.h"
|
||||
|
||||
using std::vector;
|
||||
using std::shared_ptr;
|
||||
using std::unique_ptr;
|
||||
using std::ios;
|
||||
using std::ifstream;
|
||||
using std::istream;
|
||||
using std::ostream;
|
||||
using std::stringstream;
|
||||
using std::ofstream;
|
||||
using std::wstring;
|
||||
using std::exception;
|
||||
using utf8::ifstream;
|
||||
using utf8::ofstream;
|
||||
using std::list;
|
||||
using std::max;
|
||||
using std::string;
|
||||
|
|
|
@ -33,13 +33,13 @@ namespace Mesen.GUI.Forms.NetPlay
|
|||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
protected override void UpdateConfig()
|
||||
{
|
||||
PlayerProfile profile = new PlayerProfile();
|
||||
profile.PlayerName = this.txtPlayerName.Text;
|
||||
profile.SetAvatar(this.picAvatar.Image);
|
||||
ConfigManager.Config.Profile = profile;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,16 +12,16 @@ namespace Mesen.GUI
|
|||
public class InteropEmu
|
||||
{
|
||||
private const string DLLPath = "WinMesen.dll";
|
||||
[DllImport(DLLPath)] public static extern void InitializeEmu([MarshalAs(UnmanagedType.LPWStr)]string homeFolder, IntPtr windowHandle, IntPtr dxViewerHandle);
|
||||
[DllImport(DLLPath)] public static extern void InitializeEmu([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string homeFolder, IntPtr windowHandle, IntPtr dxViewerHandle);
|
||||
[DllImport(DLLPath)] public static extern void Release();
|
||||
|
||||
[DllImport(DLLPath)] public static extern void LoadROM([MarshalAs(UnmanagedType.LPWStr)]string filename);
|
||||
[DllImport(DLLPath)] public static extern void AddKnowGameFolder([MarshalAs(UnmanagedType.LPWStr)]string folder);
|
||||
[DllImport(DLLPath)] public static extern void LoadROM([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string filename);
|
||||
[DllImport(DLLPath)] public static extern void AddKnowGameFolder([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string folder);
|
||||
|
||||
[DllImport(DLLPath)] public static extern void AddKeyMappings(int port, KeyMapping mapping);
|
||||
[DllImport(DLLPath)] public static extern void ClearKeyMappings(int port);
|
||||
[DllImport(DLLPath)] public static extern UInt32 GetPressedKey();
|
||||
[DllImport(DLLPath)] public static extern UInt32 GetKeyCode([MarshalAs(UnmanagedType.LPWStr)]string keyName);
|
||||
[DllImport(DLLPath)] public static extern UInt32 GetKeyCode([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string keyName);
|
||||
[DllImport(DLLPath, EntryPoint="GetKeyName")] private static extern IntPtr GetKeyNameWrapper(UInt32 key);
|
||||
|
||||
[DllImport(DLLPath)] public static extern void Run();
|
||||
|
@ -36,7 +36,7 @@ namespace Mesen.GUI
|
|||
[DllImport(DLLPath)] public static extern void StartServer(UInt16 port);
|
||||
[DllImport(DLLPath)] public static extern void StopServer();
|
||||
[DllImport(DLLPath)] public static extern bool IsServerRunning();
|
||||
[DllImport(DLLPath)] public static extern void Connect(string host, UInt16 port, [MarshalAs(UnmanagedType.LPWStr)]string playerName, byte[] avatarData, UInt32 avatarSize);
|
||||
[DllImport(DLLPath)] public static extern void Connect(string host, UInt16 port, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string playerName, byte[] avatarData, UInt32 avatarSize);
|
||||
[DllImport(DLLPath)] public static extern void Disconnect();
|
||||
[DllImport(DLLPath)] public static extern bool IsConnected();
|
||||
|
||||
|
@ -46,10 +46,10 @@ namespace Mesen.GUI
|
|||
[DllImport(DLLPath)] public static extern IntPtr RegisterNotificationCallback(NotificationListener.NotificationCallback callback);
|
||||
[DllImport(DLLPath)] public static extern void UnregisterNotificationCallback(IntPtr notificationListener);
|
||||
|
||||
[DllImport(DLLPath)] public static extern void DisplayMessage([MarshalAs(UnmanagedType.LPWStr)]string title, [MarshalAs(UnmanagedType.LPWStr)]string message);
|
||||
[DllImport(DLLPath)] public static extern void DisplayMessage([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string title, [MarshalAs(UnmanagedType.LPWStr)]string message);
|
||||
|
||||
[DllImport(DLLPath)] public static extern void MoviePlay([MarshalAs(UnmanagedType.LPWStr)]string filename);
|
||||
[DllImport(DLLPath)] public static extern void MovieRecord([MarshalAs(UnmanagedType.LPWStr)]string filename, bool reset);
|
||||
[DllImport(DLLPath)] public static extern void MoviePlay([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string filename);
|
||||
[DllImport(DLLPath)] public static extern void MovieRecord([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(UTF8Marshaler))]string filename, bool reset);
|
||||
[DllImport(DLLPath)] public static extern void MovieStop();
|
||||
[DllImport(DLLPath)] public static extern bool MoviePlaying();
|
||||
[DllImport(DLLPath)] public static extern bool MovieRecording();
|
||||
|
@ -77,10 +77,29 @@ namespace Mesen.GUI
|
|||
[DllImport(DLLPath)] public static extern Byte DebugGetMemoryValue(UInt32 addr);
|
||||
[DllImport(DLLPath)] public static extern UInt32 DebugGetRelativeAddress(UInt32 addr);
|
||||
|
||||
|
||||
public static string GetROMPath() { return Marshal.PtrToStringAuto(InteropEmu.GetROMPathWrapper()); }
|
||||
public static string GetKeyName(UInt32 key) { return Marshal.PtrToStringAuto(InteropEmu.GetKeyNameWrapper(key)); }
|
||||
|
||||
public static string GetROMPath() { return PtrToStringUtf8(InteropEmu.GetROMPathWrapper()); }
|
||||
public static string GetKeyName(UInt32 key) { return PtrToStringUtf8(InteropEmu.GetKeyNameWrapper(key)); }
|
||||
|
||||
private static string PtrToStringUtf8(IntPtr ptr)
|
||||
{
|
||||
if(ptr == IntPtr.Zero) {
|
||||
return "";
|
||||
}
|
||||
|
||||
int len = 0;
|
||||
while(System.Runtime.InteropServices.Marshal.ReadByte(ptr, len) != 0) {
|
||||
len++;
|
||||
}
|
||||
|
||||
if(len == 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
byte[] array = new byte[len];
|
||||
System.Runtime.InteropServices.Marshal.Copy(ptr, array, 0, len);
|
||||
return System.Text.Encoding.UTF8.GetString(array);
|
||||
}
|
||||
|
||||
public enum ConsoleNotificationType
|
||||
{
|
||||
|
@ -252,4 +271,68 @@ namespace Mesen.GUI
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class UTF8Marshaler : ICustomMarshaler
|
||||
{
|
||||
static UTF8Marshaler _instance;
|
||||
|
||||
public IntPtr MarshalManagedToNative(object managedObj)
|
||||
{
|
||||
if(managedObj == null) {
|
||||
return IntPtr.Zero;
|
||||
}
|
||||
if(!(managedObj is string)) {
|
||||
throw new MarshalDirectiveException("UTF8Marshaler must be used on a string.");
|
||||
}
|
||||
|
||||
// not null terminated
|
||||
byte[] strbuf = Encoding.UTF8.GetBytes((string)managedObj);
|
||||
IntPtr buffer = Marshal.AllocHGlobal(strbuf.Length + 1);
|
||||
Marshal.Copy(strbuf, 0, buffer, strbuf.Length);
|
||||
|
||||
// write the terminating null
|
||||
Marshal.WriteByte(buffer + strbuf.Length, 0);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public unsafe object MarshalNativeToManaged(IntPtr pNativeData)
|
||||
{
|
||||
byte* walk = (byte*)pNativeData;
|
||||
|
||||
// find the end of the string
|
||||
while(*walk != 0) {
|
||||
walk++;
|
||||
}
|
||||
int length = (int)(walk - (byte*)pNativeData);
|
||||
|
||||
// should not be null terminated
|
||||
byte[] strbuf = new byte[length];
|
||||
// skip the trailing null
|
||||
Marshal.Copy((IntPtr)pNativeData, strbuf, 0, length);
|
||||
string data = Encoding.UTF8.GetString(strbuf);
|
||||
return data;
|
||||
}
|
||||
|
||||
public void CleanUpNativeData(IntPtr pNativeData)
|
||||
{
|
||||
Marshal.FreeHGlobal(pNativeData);
|
||||
}
|
||||
|
||||
public void CleanUpManagedData(object managedObj)
|
||||
{
|
||||
}
|
||||
|
||||
public int GetNativeDataSize()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static ICustomMarshaler GetInstance(string cookie)
|
||||
{
|
||||
if(_instance == null) {
|
||||
return _instance = new UTF8Marshaler();
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ static SoundManager *_soundManager = nullptr;
|
|||
static vector<shared_ptr<StandardController>> _inputDevices;
|
||||
static HWND _windowHandle = nullptr;
|
||||
static HWND _viewerHandle = nullptr;
|
||||
static wstring _romFilename;
|
||||
static string _returnString;
|
||||
|
||||
typedef void (__stdcall *NotificationListenerCallback)(int);
|
||||
|
||||
|
@ -38,7 +38,7 @@ namespace InteropEmu {
|
|||
};
|
||||
|
||||
extern "C" {
|
||||
DllExport void __stdcall InitializeEmu(wchar_t* homeFolder, HWND windowHandle, HWND dxViewerHandle)
|
||||
DllExport void __stdcall InitializeEmu(char* homeFolder, HWND windowHandle, HWND dxViewerHandle)
|
||||
{
|
||||
FolderUtilities::SetHomeFolder(homeFolder);
|
||||
|
||||
|
@ -58,15 +58,19 @@ namespace InteropEmu {
|
|||
}
|
||||
}
|
||||
|
||||
DllExport void __stdcall LoadROM(wchar_t* filename) { Console::LoadROM(filename); }
|
||||
DllExport void __stdcall AddKnowGameFolder(wchar_t* folder) { FolderUtilities::AddKnowGameFolder(folder); }
|
||||
DllExport void __stdcall LoadROM(char* filename) { Console::LoadROM(filename); }
|
||||
DllExport void __stdcall AddKnowGameFolder(char* folder) { FolderUtilities::AddKnowGameFolder(folder); }
|
||||
|
||||
DllExport void __stdcall AddKeyMappings(uint32_t port, KeyMapping mapping) { _inputDevices[port]->AddKeyMappings(mapping); }
|
||||
DllExport void __stdcall ClearKeyMappings(uint32_t port) { _inputDevices[port]->ClearKeyMappings(); }
|
||||
|
||||
DllExport uint32_t __stdcall GetPressedKey() { return ControlManager::GetPressedKey(); }
|
||||
DllExport wchar_t* __stdcall GetKeyName(uint32_t keyCode) { return ControlManager::GetKeyName(keyCode); }
|
||||
DllExport uint32_t __stdcall GetKeyCode(wchar_t* keyName) { return ControlManager::GetKeyCode(keyName); }
|
||||
DllExport const char* __stdcall GetKeyName(uint32_t keyCode)
|
||||
{
|
||||
_returnString = ControlManager::GetKeyName(keyCode);
|
||||
return _returnString.c_str();
|
||||
}
|
||||
DllExport uint32_t __stdcall GetKeyCode(char* keyName) { return ControlManager::GetKeyCode(keyName); }
|
||||
|
||||
DllExport void __stdcall Run()
|
||||
{
|
||||
|
@ -83,10 +87,10 @@ namespace InteropEmu {
|
|||
Console::GetInstance()->Stop();
|
||||
}
|
||||
}
|
||||
DllExport const wchar_t* __stdcall GetROMPath()
|
||||
DllExport const char* __stdcall GetROMPath()
|
||||
{
|
||||
_romFilename = Console::GetROMPath();
|
||||
return _romFilename.c_str();
|
||||
_returnString = Console::GetROMPath();
|
||||
return _returnString.c_str();
|
||||
}
|
||||
|
||||
DllExport void __stdcall Reset() { Console::Reset(); }
|
||||
|
@ -97,7 +101,7 @@ namespace InteropEmu {
|
|||
DllExport void __stdcall StopServer() { GameServer::StopServer(); }
|
||||
DllExport int __stdcall IsServerRunning() { return GameServer::Started(); }
|
||||
|
||||
DllExport void __stdcall Connect(char* host, uint16_t port, wchar_t* playerName, uint8_t* avatarData, uint32_t avatarSize)
|
||||
DllExport void __stdcall Connect(char* host, uint16_t port, char* playerName, uint8_t* avatarData, uint32_t avatarSize)
|
||||
{
|
||||
shared_ptr<ClientConnectionData> connectionData(new ClientConnectionData(
|
||||
host,
|
||||
|
@ -140,14 +144,14 @@ namespace InteropEmu {
|
|||
}
|
||||
DllExport void __stdcall UnregisterNotificationCallback(INotificationListener *listener) { MessageManager::UnregisterNotificationListener(listener); }
|
||||
|
||||
DllExport void __stdcall DisplayMessage(wchar_t* title, wchar_t* message) { MessageManager::DisplayMessage(title, message); }
|
||||
DllExport void __stdcall DisplayMessage(char* title, char* message) { MessageManager::DisplayMessage(title, message); }
|
||||
|
||||
DllExport void __stdcall SaveState(uint32_t stateIndex) { SaveStateManager::SaveState(stateIndex); }
|
||||
DllExport uint32_t __stdcall LoadState(uint32_t stateIndex) { return SaveStateManager::LoadState(stateIndex); }
|
||||
DllExport int64_t __stdcall GetStateInfo(uint32_t stateIndex) { return SaveStateManager::GetStateInfo(stateIndex); }
|
||||
|
||||
DllExport void __stdcall MoviePlay(wchar_t* filename) { Movie::Play(filename); }
|
||||
DllExport void __stdcall MovieRecord(wchar_t* filename, int reset) { Movie::Record(filename, reset != 0); }
|
||||
DllExport void __stdcall MoviePlay(char* filename) { Movie::Play(filename); }
|
||||
DllExport void __stdcall MovieRecord(char* filename, int reset) { Movie::Record(filename, reset != 0); }
|
||||
DllExport void __stdcall MovieStop() { Movie::Stop(); }
|
||||
DllExport int __stdcall MoviePlaying() { return Movie::Playing(); }
|
||||
DllExport int __stdcall MovieRecording() { return Movie::Recording(); }
|
||||
|
|
|
@ -137,6 +137,8 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -151,6 +153,8 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -166,6 +170,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -183,6 +189,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -200,6 +208,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -217,6 +227,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
|
|
@ -131,6 +131,8 @@
|
|||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -144,6 +146,8 @@
|
|||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -159,6 +163,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -176,6 +182,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -193,6 +201,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -210,6 +220,8 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
|
|
@ -91,7 +91,7 @@ public:
|
|||
return crc._crc;
|
||||
}
|
||||
|
||||
static uint32_t GetCRC(wstring filename)
|
||||
static uint32_t GetCRC(string filename)
|
||||
{
|
||||
uint32_t crc = 0;
|
||||
|
||||
|
|
|
@ -2,17 +2,18 @@
|
|||
#include <commdlg.h>
|
||||
#include <shlobj.h>
|
||||
#include "FolderUtilities.h"
|
||||
#include "UTF8Util.h"
|
||||
|
||||
wstring FolderUtilities::_homeFolder = L"";
|
||||
vector<wstring> FolderUtilities::_gameFolders = vector<wstring>();
|
||||
string FolderUtilities::_homeFolder = "";
|
||||
vector<string> FolderUtilities::_gameFolders = vector<string>();
|
||||
|
||||
void FolderUtilities::SetHomeFolder(wstring homeFolder)
|
||||
void FolderUtilities::SetHomeFolder(string homeFolder)
|
||||
{
|
||||
_homeFolder = homeFolder;
|
||||
CreateDirectory(homeFolder.c_str(), nullptr);
|
||||
CreateFolder(homeFolder);
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetHomeFolder()
|
||||
string FolderUtilities::GetHomeFolder()
|
||||
{
|
||||
if(_homeFolder.size() == 0) {
|
||||
throw std::exception("Home folder not specified");
|
||||
|
@ -20,10 +21,10 @@ wstring FolderUtilities::GetHomeFolder()
|
|||
return _homeFolder;
|
||||
}
|
||||
|
||||
void FolderUtilities::AddKnowGameFolder(wstring gameFolder)
|
||||
void FolderUtilities::AddKnowGameFolder(string gameFolder)
|
||||
{
|
||||
bool alreadyExists = false;
|
||||
for(wstring folder : _gameFolders) {
|
||||
for(string folder : _gameFolders) {
|
||||
if(folder.compare(gameFolder) == 0) {
|
||||
alreadyExists = true;
|
||||
break;
|
||||
|
@ -35,53 +36,59 @@ void FolderUtilities::AddKnowGameFolder(wstring gameFolder)
|
|||
}
|
||||
}
|
||||
|
||||
vector<wstring> FolderUtilities::GetKnowGameFolders()
|
||||
vector<string> FolderUtilities::GetKnowGameFolders()
|
||||
{
|
||||
return _gameFolders;
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetSaveFolder()
|
||||
string FolderUtilities::GetSaveFolder()
|
||||
{
|
||||
wstring folder = CombinePath(GetHomeFolder(), L"Saves\\");
|
||||
CreateDirectory(folder.c_str(), nullptr);
|
||||
string folder = CombinePath(GetHomeFolder(), "Saves\\");
|
||||
CreateFolder(folder);
|
||||
return folder;
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetSaveStateFolder()
|
||||
string FolderUtilities::GetSaveStateFolder()
|
||||
{
|
||||
wstring folder = CombinePath(GetHomeFolder(), L"SaveStates\\");
|
||||
CreateDirectory(folder.c_str(), nullptr);
|
||||
string folder = CombinePath(GetHomeFolder(), "SaveStates\\");
|
||||
CreateFolder(folder);
|
||||
return folder;
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetMovieFolder()
|
||||
string FolderUtilities::GetMovieFolder()
|
||||
{
|
||||
wstring folder = CombinePath(GetHomeFolder(), + L"Movies\\");
|
||||
CreateDirectory(folder.c_str(), nullptr);
|
||||
string folder = CombinePath(GetHomeFolder(), + "Movies\\");
|
||||
CreateFolder(folder);
|
||||
return folder;
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetScreenshotFolder()
|
||||
string FolderUtilities::GetScreenshotFolder()
|
||||
{
|
||||
wstring folder = CombinePath(GetHomeFolder(), L"Screenshots\\");
|
||||
CreateDirectory(folder.c_str(), nullptr);
|
||||
string folder = CombinePath(GetHomeFolder(), "Screenshots\\");
|
||||
CreateFolder(folder);
|
||||
return folder;
|
||||
}
|
||||
|
||||
vector<wstring> FolderUtilities::GetFolders(wstring rootFolder)
|
||||
void FolderUtilities::CreateFolder(string folder)
|
||||
{
|
||||
CreateDirectory(utf8::utf8::decode(folder).c_str(), nullptr);
|
||||
}
|
||||
|
||||
vector<string> FolderUtilities::GetFolders(string rootFolder)
|
||||
{
|
||||
vector<string> folders;
|
||||
#ifdef _WIN32
|
||||
HANDLE hFind;
|
||||
WIN32_FIND_DATA data;
|
||||
|
||||
vector<wstring> folders;
|
||||
|
||||
hFind = FindFirstFile((rootFolder + L"*").c_str(), &data);
|
||||
hFind = FindFirstFile(utf8::utf8::decode(rootFolder + "*").c_str(), &data);
|
||||
if(hFind != INVALID_HANDLE_VALUE) {
|
||||
do {
|
||||
if(data.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && wcscmp(data.cFileName, L".") != 0 && wcscmp(data.cFileName, L"..") != 0) {
|
||||
wstring subfolder = rootFolder + data.cFileName + L"\\";
|
||||
string filename = utf8::utf8::encode(data.cFileName);
|
||||
if(data.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && filename.compare(".") != 0 && filename.compare("..") != 0) {
|
||||
string subfolder = rootFolder + filename + "\\";
|
||||
folders.push_back(subfolder);
|
||||
for(wstring folderName : GetFolders(subfolder.c_str())) {
|
||||
for(string folderName : GetFolders(subfolder.c_str())) {
|
||||
folders.push_back(folderName);
|
||||
}
|
||||
}
|
||||
|
@ -89,34 +96,34 @@ vector<wstring> FolderUtilities::GetFolders(wstring rootFolder)
|
|||
while(FindNextFile(hFind, &data));
|
||||
FindClose(hFind);
|
||||
}
|
||||
|
||||
#endif
|
||||
return folders;
|
||||
}
|
||||
|
||||
vector<wstring> FolderUtilities::GetFilesInFolder(wstring rootFolder, wstring mask, bool recursive)
|
||||
vector<string> FolderUtilities::GetFilesInFolder(string rootFolder, string mask, bool recursive)
|
||||
{
|
||||
HANDLE hFind;
|
||||
WIN32_FIND_DATA data;
|
||||
|
||||
vector<wstring> folders;
|
||||
vector<wstring> files;
|
||||
vector<string> folders;
|
||||
vector<string> files;
|
||||
if(rootFolder[rootFolder.size() - 1] != '/' && rootFolder[rootFolder.size() - 1] != '\\') {
|
||||
rootFolder += L"/";
|
||||
rootFolder += "/";
|
||||
}
|
||||
|
||||
folders.push_back(rootFolder);
|
||||
|
||||
if(recursive) {
|
||||
for(wstring subFolder : GetFolders(rootFolder)) {
|
||||
for(string subFolder : GetFolders(rootFolder)) {
|
||||
folders.push_back(subFolder);
|
||||
}
|
||||
}
|
||||
|
||||
for(wstring folder : folders) {
|
||||
hFind = FindFirstFile((folder + mask).c_str(), &data);
|
||||
for(string folder : folders) {
|
||||
hFind = FindFirstFile(utf8::utf8::decode(folder + mask).c_str(), &data);
|
||||
if(hFind != INVALID_HANDLE_VALUE) {
|
||||
do {
|
||||
files.push_back(folder + data.cFileName);
|
||||
files.push_back(folder + utf8::utf8::encode(data.cFileName));
|
||||
} while(FindNextFile(hFind, &data));
|
||||
FindClose(hFind);
|
||||
}
|
||||
|
@ -125,28 +132,28 @@ vector<wstring> FolderUtilities::GetFilesInFolder(wstring rootFolder, wstring ma
|
|||
return files;
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetFilename(wstring filepath, bool includeExtension)
|
||||
string FolderUtilities::GetFilename(string filepath, bool includeExtension)
|
||||
{
|
||||
size_t index = filepath.find_last_of(L"/\\");
|
||||
wstring filename = (index == std::string::basic_string::npos) ? filepath : filepath.substr(index + 1);
|
||||
size_t index = filepath.find_last_of("/\\");
|
||||
string filename = (index == std::string::basic_string::npos) ? filepath : filepath.substr(index + 1);
|
||||
if(!includeExtension) {
|
||||
filename = filename.substr(0, filename.find_last_of(L"."));
|
||||
filename = filename.substr(0, filename.find_last_of("."));
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
|
||||
wstring FolderUtilities::GetFolderName(wstring filepath)
|
||||
string FolderUtilities::GetFolderName(string filepath)
|
||||
{
|
||||
size_t index = filepath.find_last_of(L"/\\");
|
||||
size_t index = filepath.find_last_of("/\\");
|
||||
return filepath.substr(0, index);
|
||||
}
|
||||
|
||||
wstring FolderUtilities::CombinePath(wstring folder, wstring filename)
|
||||
string FolderUtilities::CombinePath(string folder, string filename)
|
||||
{
|
||||
#ifdef WIN32
|
||||
wstring separator = L"\\";
|
||||
string separator = "\\";
|
||||
#else
|
||||
wstring separator = L"/";
|
||||
string separator = "/";
|
||||
#endif
|
||||
|
||||
if(folder.find_last_of(separator) != folder.length() - 1) {
|
||||
|
@ -156,9 +163,9 @@ wstring FolderUtilities::CombinePath(wstring folder, wstring filename)
|
|||
return folder + filename;
|
||||
}
|
||||
|
||||
int64_t FolderUtilities::GetFileModificationTime(wstring filepath)
|
||||
int64_t FolderUtilities::GetFileModificationTime(string filepath)
|
||||
{
|
||||
WIN32_FILE_ATTRIBUTE_DATA fileAttrData = {0};
|
||||
GetFileAttributesEx(filepath.c_str(), GetFileExInfoStandard, &fileAttrData);
|
||||
GetFileAttributesEx(utf8::utf8::decode(filepath).c_str(), GetFileExInfoStandard, &fileAttrData);
|
||||
return ((int64_t)fileAttrData.ftLastWriteTime.dwHighDateTime << 32) | (int64_t)fileAttrData.ftLastWriteTime.dwLowDateTime;
|
||||
}
|
|
@ -5,28 +5,30 @@
|
|||
class FolderUtilities
|
||||
{
|
||||
private:
|
||||
static wstring _homeFolder;
|
||||
static vector<wstring> _gameFolders;
|
||||
static string _homeFolder;
|
||||
static vector<string> _gameFolders;
|
||||
|
||||
public:
|
||||
static void SetHomeFolder(wstring homeFolder);
|
||||
static wstring GetHomeFolder();
|
||||
static void SetHomeFolder(string homeFolder);
|
||||
static string GetHomeFolder();
|
||||
|
||||
static void AddKnowGameFolder(wstring gameFolder);
|
||||
static vector<wstring> GetKnowGameFolders();
|
||||
static void AddKnowGameFolder(string gameFolder);
|
||||
static vector<string> GetKnowGameFolders();
|
||||
|
||||
static wstring GetSaveFolder();
|
||||
static wstring GetSaveStateFolder();
|
||||
static wstring GetMovieFolder();
|
||||
static wstring GetScreenshotFolder();
|
||||
static string GetSaveFolder();
|
||||
static string GetSaveStateFolder();
|
||||
static string GetMovieFolder();
|
||||
static string GetScreenshotFolder();
|
||||
|
||||
static vector<wstring> GetFolders(wstring rootFolder);
|
||||
static vector<wstring> GetFilesInFolder(wstring rootFolder, wstring mask, bool recursive);
|
||||
static vector<string> GetFolders(string rootFolder);
|
||||
static vector<string> GetFilesInFolder(string rootFolder, string mask, bool recursive);
|
||||
|
||||
static wstring GetFilename(wstring filepath, bool includeExtension);
|
||||
static wstring GetFolderName(wstring filepath);
|
||||
static string GetFilename(string filepath, bool includeExtension);
|
||||
static string GetFolderName(string filepath);
|
||||
|
||||
static int64_t GetFileModificationTime(wstring filepath);
|
||||
static void CreateFolder(string folder);
|
||||
|
||||
static wstring CombinePath(wstring folder, wstring filename);
|
||||
static int64_t GetFileModificationTime(string filepath);
|
||||
|
||||
static string CombinePath(string folder, string filename);
|
||||
};
|
|
@ -1,12 +1,11 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "miniz.h"
|
||||
using std::ofstream;
|
||||
|
||||
class PNGWriter
|
||||
{
|
||||
public:
|
||||
static bool WritePNG(wstring filename, uint8_t* buffer, uint32_t xSize, uint32_t ySize, uint32_t bitsPerPixel = 32)
|
||||
static bool WritePNG(string filename, uint8_t* buffer, uint32_t xSize, uint32_t ySize, uint32_t bitsPerPixel = 32)
|
||||
{
|
||||
size_t pngSize = 0;
|
||||
void *pngData = tdefl_write_image_to_png_file_in_memory_ex(buffer, xSize, ySize, bitsPerPixel/8, &pngSize, MZ_DEFAULT_LEVEL, MZ_FALSE);
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#include <natupnp.h>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
using std::wstring;
|
||||
|
||||
enum class IPProtocol
|
||||
{
|
||||
TCP = 0,
|
||||
|
|
70
Utilities/UTF8Util.h
Normal file
70
Utilities/UTF8Util.h
Normal file
|
@ -0,0 +1,70 @@
|
|||
#pragma once
|
||||
|
||||
#include <fstream>
|
||||
#ifdef _MSC_VER
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
namespace utf8 {
|
||||
#ifdef _WIN32
|
||||
class utf8
|
||||
{
|
||||
public:
|
||||
static std::wstring decode(const std::string &str)
|
||||
{
|
||||
if(str.empty()) return std::wstring();
|
||||
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
|
||||
std::wstring wstrTo(size_needed, 0);
|
||||
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
|
||||
return wstrTo;
|
||||
}
|
||||
|
||||
static std::string encode(const std::wstring &wstr)
|
||||
{
|
||||
if(wstr.empty()) return std::string();
|
||||
int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);
|
||||
std::string strTo(size_needed, 0);
|
||||
WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL);
|
||||
return strTo;
|
||||
}
|
||||
};
|
||||
|
||||
class ifstream : public std::ifstream
|
||||
{
|
||||
public:
|
||||
ifstream(const std::string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = (int)ios_base::_Openprot) : std::ifstream(utf8::decode(_Str), _Mode, _Prot)
|
||||
{
|
||||
}
|
||||
|
||||
ifstream() : std::ifstream()
|
||||
{
|
||||
}
|
||||
|
||||
void open(const std::string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = (int)ios_base::_Openprot)
|
||||
{
|
||||
std::ifstream::open(utf8::decode(_Str), _Mode, _Prot);
|
||||
}
|
||||
};
|
||||
|
||||
class ofstream : public std::ofstream
|
||||
{
|
||||
public:
|
||||
ofstream(const std::string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = (int)ios_base::_Openprot) : std::ofstream(utf8::decode(_Str), _Mode, _Prot)
|
||||
{
|
||||
}
|
||||
|
||||
ofstream() : std::ofstream()
|
||||
{
|
||||
}
|
||||
|
||||
void open(const std::string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = (int)ios_base::_Openprot)
|
||||
{
|
||||
std::ofstream::open(utf8::decode(_Str), _Mode, _Prot);
|
||||
}
|
||||
};
|
||||
#else
|
||||
using std::ifstream;
|
||||
using std::ofstream;
|
||||
#endif
|
||||
}
|
|
@ -126,6 +126,8 @@
|
|||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -140,6 +142,8 @@
|
|||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -155,6 +159,8 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -172,6 +178,8 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -189,6 +197,8 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -206,6 +216,8 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>
|
||||
</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -225,6 +237,7 @@
|
|||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="targetver.h" />
|
||||
<ClInclude Include="Timer.h" />
|
||||
<ClInclude Include="UTF8Util.h" />
|
||||
<ClInclude Include="ZIPReader.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -44,6 +44,9 @@
|
|||
<ClInclude Include="PNGWriter.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="UTF8Util.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
|
|
|
@ -1,23 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include <SDKDDKVer.h>
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <windows.h>
|
||||
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <atomic>
|
||||
|
||||
#include "UTF8Util.h"
|
||||
|
||||
using std::shared_ptr;
|
||||
using std::ifstream;
|
||||
using utf8::ifstream;
|
||||
using std::string;
|
||||
using std::wstring;
|
||||
using std::vector;
|
||||
using std::atomic;
|
||||
using std::atomic_flag;
|
|
@ -1,12 +1,13 @@
|
|||
#include "stdafx.h"
|
||||
#include "Renderer.h"
|
||||
#include "DirectXTK\SpriteBatch.h"
|
||||
#include "DirectXTK\SpriteFont.h"
|
||||
#include "DirectXTK\DDSTextureLoader.h"
|
||||
#include "DirectXTK\WICTextureLoader.h"
|
||||
#include "..\Core\PPU.h"
|
||||
#include "..\Core\Console.h"
|
||||
#include "..\Core\MessageManager.h"
|
||||
#include "DirectXTK/SpriteBatch.h"
|
||||
#include "DirectXTK/SpriteFont.h"
|
||||
#include "DirectXTK/DDSTextureLoader.h"
|
||||
#include "DirectXTK/WICTextureLoader.h"
|
||||
#include "../Core/PPU.h"
|
||||
#include "../Core/Console.h"
|
||||
#include "../Core/MessageManager.h"
|
||||
#include "../Utilities/UTF8Util.h"
|
||||
|
||||
using namespace DirectX;
|
||||
|
||||
|
@ -328,9 +329,9 @@ namespace NES
|
|||
return shaderResourceView;
|
||||
}
|
||||
|
||||
void Renderer::DisplayMessage(wstring title, wstring message)
|
||||
void Renderer::DisplayMessage(string title, string message)
|
||||
{
|
||||
shared_ptr<ToastInfo> toast(new ToastInfo(title, message, 4000, L"Resources\\MesenIcon.bmp"));
|
||||
shared_ptr<ToastInfo> toast(new ToastInfo(title, message, 4000, "Resources\\MesenIcon.bmp"));
|
||||
DisplayToast(toast);
|
||||
}
|
||||
|
||||
|
@ -339,24 +340,25 @@ namespace NES
|
|||
_toasts.push_front(toast);
|
||||
}
|
||||
|
||||
void Renderer::DrawOutlinedString(wstring message, float x, float y, DirectX::FXMVECTOR color, float scale)
|
||||
void Renderer::DrawOutlinedString(string message, float x, float y, DirectX::FXMVECTOR color, float scale)
|
||||
{
|
||||
SpriteBatch* spritebatch = _spriteBatch.get();
|
||||
const wchar_t* msg = message.c_str();
|
||||
std::wstring textStr = utf8::utf8::decode(message);
|
||||
const wchar_t *text = textStr.c_str();
|
||||
|
||||
for(uint8_t offsetX = 2; offsetX > 0; offsetX--) {
|
||||
for(uint8_t offsetY = 2; offsetY > 0; offsetY--) {
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x + offsetX, y + offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x - offsetX, y + offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x + offsetX, y - offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x - offsetX, y - offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x + offsetX, y), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x - offsetX, y), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x, y + offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x, y - offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x + offsetX, y + offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x - offsetX, y + offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x + offsetX, y - offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x - offsetX, y - offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x + offsetX, y), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x - offsetX, y), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x, y + offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x, y - offsetY), Colors::Black, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
}
|
||||
}
|
||||
_font->DrawString(spritebatch, msg, XMFLOAT2(x, y), color, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
_font->DrawString(spritebatch, text, XMFLOAT2(x, y), color, 0.0f, XMFLOAT2(0, 0), scale);
|
||||
}
|
||||
|
||||
void Renderer::DrawNESScreen()
|
||||
|
@ -411,7 +413,7 @@ namespace NES
|
|||
_spriteBatch->Draw(shaderResourceView, destRect); // , position, &sourceRect, Colors::White, 0.0f, position, 4.0f);
|
||||
shaderResourceView->Release();
|
||||
|
||||
DrawOutlinedString(L"PAUSED", (float)_hdScreenWidth / 2 - 145, (float)_hdScreenHeight / 2 - 47, Colors::AntiqueWhite, 4.5f);
|
||||
DrawOutlinedString("PAUSED", (float)_hdScreenWidth / 2 - 145, (float)_hdScreenHeight / 2 - 47, Colors::AntiqueWhite, 4.5f);
|
||||
}
|
||||
|
||||
void Renderer::Render()
|
||||
|
@ -437,7 +439,7 @@ namespace NES
|
|||
} else {
|
||||
//Draw FPS counter
|
||||
if(CheckFlag(UIFlags::ShowFPS)) {
|
||||
wstring fpsString = wstring(L"FPS: ") + std::to_wstring(Console::GetFPS());
|
||||
string fpsString = string("FPS: ") + std::to_string(Console::GetFPS());
|
||||
DrawOutlinedString(fpsString, 256 * 4 - 80, 13, Colors::AntiqueWhite, 1.0f);
|
||||
}
|
||||
}
|
||||
|
@ -471,8 +473,10 @@ namespace NES
|
|||
}
|
||||
}
|
||||
|
||||
wstring Renderer::WrapText(wstring text, SpriteFont* font, float maxLineWidth)
|
||||
std::wstring Renderer::WrapText(string utf8Text, SpriteFont* font, float maxLineWidth)
|
||||
{
|
||||
using std::wstring;
|
||||
wstring text = utf8::utf8::decode(utf8Text);
|
||||
wstring wrappedText;
|
||||
list<wstring> words;
|
||||
wstring currentWord;
|
||||
|
@ -493,6 +497,11 @@ namespace NES
|
|||
float spaceWidth = font->MeasureString(L" ").m128_f32[0];
|
||||
float lineWidth = 0.0f;
|
||||
for(wstring word : words) {
|
||||
for(unsigned int i = 0; i < word.size(); i++) {
|
||||
if(!font->ContainsCharacter(word[i])) {
|
||||
word[i] = L'?';
|
||||
}
|
||||
}
|
||||
float wordWidth = font->MeasureString(word.c_str()).m128_f32[0];
|
||||
|
||||
if(lineWidth + wordWidth < maxLineWidth) {
|
||||
|
@ -549,7 +558,7 @@ namespace NES
|
|||
_frameLock.Release();
|
||||
}
|
||||
|
||||
void Renderer::TakeScreenshot(wstring romFilename)
|
||||
void Renderer::TakeScreenshot(string romFilename)
|
||||
{
|
||||
uint32_t* frameBuffer = new uint32_t[256 * 240];
|
||||
|
||||
|
@ -563,14 +572,14 @@ namespace NES
|
|||
}
|
||||
|
||||
int counter = 0;
|
||||
wstring baseFilename = FolderUtilities::GetScreenshotFolder() + FolderUtilities::GetFilename(romFilename, false);
|
||||
wstring ssFilename;
|
||||
string baseFilename = FolderUtilities::GetScreenshotFolder() + FolderUtilities::GetFilename(romFilename, false);
|
||||
string ssFilename;
|
||||
while(true) {
|
||||
wstring counterStr = std::to_wstring(counter);
|
||||
string counterStr = std::to_string(counter);
|
||||
while(counterStr.length() < 3) {
|
||||
counterStr = L"0" + counterStr;
|
||||
counterStr = "0" + counterStr;
|
||||
}
|
||||
ssFilename = baseFilename + L"_" + counterStr + L".png";
|
||||
ssFilename = baseFilename + "_" + counterStr + ".png";
|
||||
ifstream file(ssFilename, ios::in);
|
||||
if(file) {
|
||||
file.close();
|
||||
|
@ -581,7 +590,7 @@ namespace NES
|
|||
}
|
||||
|
||||
PNGWriter::WritePNG(ssFilename, (uint8_t*)frameBuffer, 256, 240);
|
||||
MessageManager::DisplayMessage(L"Screenshot saved", FolderUtilities::GetFilename(ssFilename, true));
|
||||
MessageManager::DisplayMessage("Screenshot saved", FolderUtilities::GetFilename(ssFilename, true));
|
||||
}
|
||||
|
||||
}
|
|
@ -78,22 +78,20 @@ namespace NES {
|
|||
void DrawNESScreen();
|
||||
void DrawPauseScreen();
|
||||
|
||||
wstring WrapText(wstring text, SpriteFont* font, float maxLineWidth);
|
||||
void DrawOutlinedString(wstring message, float x, float y, DirectX::FXMVECTOR color, float scale);
|
||||
std::wstring WrapText(string text, SpriteFont* font, float maxLineWidth);
|
||||
void DrawOutlinedString(string message, float x, float y, DirectX::FXMVECTOR color, float scale);
|
||||
|
||||
void DrawToasts();
|
||||
void DrawToast(shared_ptr<ToastInfo> toast, int posIndex);
|
||||
void RemoveOldToasts();
|
||||
|
||||
//HRESULT CompileShader(wstring filename, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut);
|
||||
|
||||
|
||||
public:
|
||||
Renderer(HWND hWnd);
|
||||
~Renderer();
|
||||
|
||||
void Render();
|
||||
|
||||
void DisplayMessage(wstring title, wstring message);
|
||||
void DisplayMessage(string title, string message);
|
||||
|
||||
void SetFlags(uint32_t flags)
|
||||
{
|
||||
|
@ -113,6 +111,6 @@ namespace NES {
|
|||
void UpdateFrame(uint8_t* frameBuffer);
|
||||
void DisplayToast(shared_ptr<ToastInfo> toast);
|
||||
|
||||
void TakeScreenshot(wstring romFilename);
|
||||
void TakeScreenshot(string romFilename);
|
||||
};
|
||||
}
|
|
@ -56,7 +56,7 @@ uint32_t WindowsKeyManager::GetPressedKey()
|
|||
return 0;
|
||||
}
|
||||
|
||||
wchar_t* WindowsKeyManager::GetKeyName(uint32_t key)
|
||||
string WindowsKeyManager::GetKeyName(uint32_t key)
|
||||
{
|
||||
for(KeyDefinition keyDef : _keyDefinitions) {
|
||||
if(keyDef.keyCode == key) {
|
||||
|
@ -66,11 +66,10 @@ wchar_t* WindowsKeyManager::GetKeyName(uint32_t key)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
uint32_t WindowsKeyManager::GetKeyCode(wchar_t* keyName)
|
||||
uint32_t WindowsKeyManager::GetKeyCode(string keyName)
|
||||
{
|
||||
wstring name(keyName);
|
||||
for(KeyDefinition keyDef : _keyDefinitions) {
|
||||
if(name.compare(keyDef.description) == 0) {
|
||||
if(keyName.compare(keyDef.description) == 0) {
|
||||
return keyDef.keyCode;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,222 +5,222 @@
|
|||
#include "GamePad.h"
|
||||
|
||||
struct KeyDefinition {
|
||||
char* name;
|
||||
string name;
|
||||
uint32_t keyCode;
|
||||
wchar_t* description;
|
||||
string description;
|
||||
};
|
||||
|
||||
const KeyDefinition _keyDefinitions[] = {
|
||||
//{ "VK_LBUTTON", 0x01, L"Left mouse button" },
|
||||
//{ "VK_RBUTTON", 0x02, L"Right mouse button" },
|
||||
{ "VK_CANCEL", 0x03, L"Control-break processing" },
|
||||
//{ "VK_MBUTTON", 0x04, L"Middle mouse button (three-button mouse)" },
|
||||
//{ "VK_XBUTTON1", 0x05, L"X1 mouse button" },
|
||||
//{ "VK_XBUTTON2", 0x06, L"X2 mouse button" },
|
||||
{ "-", 0x07, L"Undefined" },
|
||||
{ "VK_BACK", 0x08, L"Backspace" },
|
||||
{ "VK_TAB", 0x09, L"Tab" },
|
||||
//{ "-", 0x0A - 0B, L"Reserved" },
|
||||
{ "VK_CLEAR", 0x0C, L"Clear" },
|
||||
{ "VK_RETURN", 0x0D, L"Enter" },
|
||||
//{ "-", 0x0E - 0F, L"Undefined" },
|
||||
{ "VK_SHIFT", 0x10, L"Shift" },
|
||||
{ "VK_CONTROL", 0x11, L"Ctrl" },
|
||||
{ "VK_MENU", 0x12, L"Alt" },
|
||||
{ "VK_PAUSE", 0x13, L"Pause" },
|
||||
{ "VK_CAPITAL", 0x14, L"Caps Lock" },
|
||||
{ "VK_KANA", 0x15, L"IME Kana mode" },
|
||||
{ "VK_HANGUEL", 0x15, L"IME Hanguel mode" },
|
||||
{ "VK_HANGUL", 0x15, L"IME Hangul mode" },
|
||||
//{ "-", 0x16, L"Undefined" },
|
||||
{ "VK_JUNJA", 0x17, L"IME Junja mode" },
|
||||
{ "VK_FINAL", 0x18, L"IME final mode" },
|
||||
{ "VK_HANJA", 0x19, L"IME Hanja mode" },
|
||||
{ "VK_KANJI", 0x19, L"IME Kanji mode" },
|
||||
//{ "-", 0x1A, L"Undefined" },
|
||||
{ "VK_ESCAPE", 0x1B, L"Esc" },
|
||||
{ "VK_CONVERT", 0x1C, L"IME convert" },
|
||||
{ "VK_NONCONVERT", 0x1D, L"IME nonconvert" },
|
||||
{ "VK_ACCEPT", 0x1E, L"IME accept" },
|
||||
{ "VK_MODECHANGE", 0x1F, L"IME mode change request" },
|
||||
{ "VK_SPACE", 0x20, L"Spacebar" },
|
||||
{ "VK_PRIOR", 0x21, L"Page Up" },
|
||||
{ "VK_NEXT", 0x22, L"Page Down" },
|
||||
{ "VK_END", 0x23, L"End" },
|
||||
{ "VK_HOME", 0x24, L"Home" },
|
||||
{ "VK_LEFT", 0x25, L"Left Arrow" },
|
||||
{ "VK_UP", 0x26, L"Up Arrow" },
|
||||
{ "VK_RIGHT", 0x27, L"Right Arrow" },
|
||||
{ "VK_DOWN", 0x28, L"Down Arrow" },
|
||||
{ "VK_SELECT", 0x29, L"Select" },
|
||||
{ "VK_PRINT", 0x2A, L"Print" },
|
||||
{ "VK_EXECUTE", 0x2B, L"Execute" },
|
||||
{ "VK_SNAPSHOT", 0x2C, L"Print Screen" },
|
||||
{ "VK_INSERT", 0x2D, L"Ins" },
|
||||
{ "VK_DELETE", 0x2E, L"Del" },
|
||||
{ "VK_HELP", 0x2F, L"Help" },
|
||||
{ "0", 0x30, L"0" },
|
||||
{ "1", 0x31, L"1" },
|
||||
{ "2", 0x32, L"2" },
|
||||
{ "3", 0x33, L"3" },
|
||||
{ "4", 0x34, L"4" },
|
||||
{ "5", 0x35, L"5" },
|
||||
{ "6", 0x36, L"6" },
|
||||
{ "7", 0x37, L"7" },
|
||||
{ "8", 0x38, L"8" },
|
||||
{ "9", 0x39, L"9" },
|
||||
//{ "undefined", 0x3A - 40, L"undefined" },
|
||||
{ "A", 0x41, L"A" },
|
||||
{ "B", 0x42, L"B" },
|
||||
{ "C", 0x43, L"C" },
|
||||
{ "D", 0x44, L"D" },
|
||||
{ "E", 0x45, L"E" },
|
||||
{ "F", 0x46, L"F" },
|
||||
{ "G", 0x47, L"G" },
|
||||
{ "H", 0x48, L"H" },
|
||||
{ "I", 0x49, L"I" },
|
||||
{ "J", 0x4A, L"J" },
|
||||
{ "K", 0x4B, L"K" },
|
||||
{ "L", 0x4C, L"L" },
|
||||
{ "M", 0x4D, L"M" },
|
||||
{ "N", 0x4E, L"N" },
|
||||
{ "O", 0x4F, L"O" },
|
||||
{ "P", 0x50, L"P" },
|
||||
{ "Q", 0x51, L"Q" },
|
||||
{ "R", 0x52, L"R" },
|
||||
{ "S", 0x53, L"S" },
|
||||
{ "T", 0x54, L"T" },
|
||||
{ "U", 0x55, L"U" },
|
||||
{ "V", 0x56, L"V" },
|
||||
{ "W", 0x57, L"W" },
|
||||
{ "X", 0x58, L"X" },
|
||||
{ "Y", 0x59, L"Y" },
|
||||
{ "Z", 0x5A, L"Z" },
|
||||
{ "VK_LWIN", 0x5B, L"Left Windows" },
|
||||
{ "VK_RWIN", 0x5C, L"Right Windows" },
|
||||
{ "VK_APPS", 0x5D, L"Applications Key" },
|
||||
//{ "-", 0x5E, L"Reserved" },
|
||||
{ "VK_SLEEP", 0x5F, L"Computer Sleep" },
|
||||
{ "VK_NUMPAD0", 0x60, L"Keypad 0" },
|
||||
{ "VK_NUMPAD1", 0x61, L"Keypad 1" },
|
||||
{ "VK_NUMPAD2", 0x62, L"Keypad 2" },
|
||||
{ "VK_NUMPAD3", 0x63, L"Keypad 3" },
|
||||
{ "VK_NUMPAD4", 0x64, L"Keypad 4" },
|
||||
{ "VK_NUMPAD5", 0x65, L"Keypad 5" },
|
||||
{ "VK_NUMPAD6", 0x66, L"Keypad 6" },
|
||||
{ "VK_NUMPAD7", 0x67, L"Keypad 7" },
|
||||
{ "VK_NUMPAD8", 0x68, L"Keypad 8" },
|
||||
{ "VK_NUMPAD9", 0x69, L"Keypad 9" },
|
||||
{ "VK_MULTIPLY", 0x6A, L"Multiply" },
|
||||
{ "VK_ADD", 0x6B, L"Add" },
|
||||
{ "VK_SEPARATOR", 0x6C, L"Separator" },
|
||||
{ "VK_SUBTRACT", 0x6D, L"Subtract" },
|
||||
{ "VK_DECIMAL", 0x6E, L"Decimal" },
|
||||
{ "VK_DIVIDE", 0x6F, L"Divide" },
|
||||
{ "VK_F1", 0x70, L"F1" },
|
||||
{ "VK_F2", 0x71, L"F2" },
|
||||
{ "VK_F3", 0x72, L"F3" },
|
||||
{ "VK_F4", 0x73, L"F4" },
|
||||
{ "VK_F5", 0x74, L"F5" },
|
||||
{ "VK_F6", 0x75, L"F6" },
|
||||
{ "VK_F7", 0x76, L"F7" },
|
||||
{ "VK_F8", 0x77, L"F8" },
|
||||
{ "VK_F9", 0x78, L"F9" },
|
||||
{ "VK_F10", 0x79, L"F10" },
|
||||
{ "VK_F11", 0x7A, L"F11" },
|
||||
{ "VK_F12", 0x7B, L"F12" },
|
||||
{ "VK_F13", 0x7C, L"F13" },
|
||||
{ "VK_F14", 0x7D, L"F14" },
|
||||
{ "VK_F15", 0x7E, L"F15" },
|
||||
{ "VK_F16", 0x7F, L"F16" },
|
||||
{ "VK_F17", 0x80, L"F17" },
|
||||
{ "VK_F18", 0x81, L"F18" },
|
||||
{ "VK_F19", 0x82, L"F19" },
|
||||
{ "VK_F20", 0x83, L"F20" },
|
||||
{ "VK_F21", 0x84, L"F21" },
|
||||
{ "VK_F22", 0x85, L"F22" },
|
||||
{ "VK_F23", 0x86, L"F23" },
|
||||
{ "VK_F24", 0x87, L"F24" },
|
||||
//{ "-", 0x88 - 8F, L"Unassigned" },
|
||||
{ "VK_NUMLOCK", 0x90, L"Num Lock" },
|
||||
{ "VK_SCROLL", 0x91, L"Scroll Lock" },
|
||||
//{ "VK_LBUTTON", 0x01, "Left mouse button" },
|
||||
//{ "VK_RBUTTON", 0x02, "Right mouse button" },
|
||||
{ "VK_CANCEL", 0x03, "Control-break processing" },
|
||||
//{ "VK_MBUTTON", 0x04, "Middle mouse button (three-button mouse)" },
|
||||
//{ "VK_XBUTTON1", 0x05, "X1 mouse button" },
|
||||
//{ "VK_XBUTTON2", 0x06, "X2 mouse button" },
|
||||
{ "-", 0x07, "Undefined" },
|
||||
{ "VK_BACK", 0x08, "Backspace" },
|
||||
{ "VK_TAB", 0x09, "Tab" },
|
||||
//{ "-", 0x0A - 0B, "Reserved" },
|
||||
{ "VK_CLEAR", 0x0C, "Clear" },
|
||||
{ "VK_RETURN", 0x0D, "Enter" },
|
||||
//{ "-", 0x0E - 0F, "Undefined" },
|
||||
{ "VK_SHIFT", 0x10, "Shift" },
|
||||
{ "VK_CONTROL", 0x11, "Ctrl" },
|
||||
{ "VK_MENU", 0x12, "Alt" },
|
||||
{ "VK_PAUSE", 0x13, "Pause" },
|
||||
{ "VK_CAPITAL", 0x14, "Caps Lock" },
|
||||
{ "VK_KANA", 0x15, "IME Kana mode" },
|
||||
{ "VK_HANGUEL", 0x15, "IME Hanguel mode" },
|
||||
{ "VK_HANGUL", 0x15, "IME Hangul mode" },
|
||||
//{ "-", 0x16, "Undefined" },
|
||||
{ "VK_JUNJA", 0x17, "IME Junja mode" },
|
||||
{ "VK_FINAL", 0x18, "IME final mode" },
|
||||
{ "VK_HANJA", 0x19, "IME Hanja mode" },
|
||||
{ "VK_KANJI", 0x19, "IME Kanji mode" },
|
||||
//{ "-", 0x1A, "Undefined" },
|
||||
{ "VK_ESCAPE", 0x1B, "Esc" },
|
||||
{ "VK_CONVERT", 0x1C, "IME convert" },
|
||||
{ "VK_NONCONVERT", 0x1D, "IME nonconvert" },
|
||||
{ "VK_ACCEPT", 0x1E, "IME accept" },
|
||||
{ "VK_MODECHANGE", 0x1F, "IME mode change request" },
|
||||
{ "VK_SPACE", 0x20, "Spacebar" },
|
||||
{ "VK_PRIOR", 0x21, "Page Up" },
|
||||
{ "VK_NEXT", 0x22, "Page Down" },
|
||||
{ "VK_END", 0x23, "End" },
|
||||
{ "VK_HOME", 0x24, "Home" },
|
||||
{ "VK_LEFT", 0x25, "Left Arrow" },
|
||||
{ "VK_UP", 0x26, "Up Arrow" },
|
||||
{ "VK_RIGHT", 0x27, "Right Arrow" },
|
||||
{ "VK_DOWN", 0x28, "Down Arrow" },
|
||||
{ "VK_SELECT", 0x29, "Select" },
|
||||
{ "VK_PRINT", 0x2A, "Print" },
|
||||
{ "VK_EXECUTE", 0x2B, "Execute" },
|
||||
{ "VK_SNAPSHOT", 0x2C, "Print Screen" },
|
||||
{ "VK_INSERT", 0x2D, "Ins" },
|
||||
{ "VK_DELETE", 0x2E, "Del" },
|
||||
{ "VK_HELP", 0x2F, "Help" },
|
||||
{ "0", 0x30, "0" },
|
||||
{ "1", 0x31, "1" },
|
||||
{ "2", 0x32, "2" },
|
||||
{ "3", 0x33, "3" },
|
||||
{ "4", 0x34, "4" },
|
||||
{ "5", 0x35, "5" },
|
||||
{ "6", 0x36, "6" },
|
||||
{ "7", 0x37, "7" },
|
||||
{ "8", 0x38, "8" },
|
||||
{ "9", 0x39, "9" },
|
||||
//{ "undefined", 0x3A - 40, "undefined" },
|
||||
{ "A", 0x41, "A" },
|
||||
{ "B", 0x42, "B" },
|
||||
{ "C", 0x43, "C" },
|
||||
{ "D", 0x44, "D" },
|
||||
{ "E", 0x45, "E" },
|
||||
{ "F", 0x46, "F" },
|
||||
{ "G", 0x47, "G" },
|
||||
{ "H", 0x48, "H" },
|
||||
{ "I", 0x49, "I" },
|
||||
{ "J", 0x4A, "J" },
|
||||
{ "K", 0x4B, "K" },
|
||||
{ "L", 0x4C, "L" },
|
||||
{ "M", 0x4D, "M" },
|
||||
{ "N", 0x4E, "N" },
|
||||
{ "O", 0x4F, "O" },
|
||||
{ "P", 0x50, "P" },
|
||||
{ "Q", 0x51, "Q" },
|
||||
{ "R", 0x52, "R" },
|
||||
{ "S", 0x53, "S" },
|
||||
{ "T", 0x54, "T" },
|
||||
{ "U", 0x55, "U" },
|
||||
{ "V", 0x56, "V" },
|
||||
{ "W", 0x57, "W" },
|
||||
{ "X", 0x58, "X" },
|
||||
{ "Y", 0x59, "Y" },
|
||||
{ "Z", 0x5A, "Z" },
|
||||
{ "VK_LWIN", 0x5B, "Left Windows" },
|
||||
{ "VK_RWIN", 0x5C, "Right Windows" },
|
||||
{ "VK_APPS", 0x5D, "Applications Key" },
|
||||
//{ "-", 0x5E, "Reserved" },
|
||||
{ "VK_SLEEP", 0x5F, "Computer Sleep" },
|
||||
{ "VK_NUMPAD0", 0x60, "Keypad 0" },
|
||||
{ "VK_NUMPAD1", 0x61, "Keypad 1" },
|
||||
{ "VK_NUMPAD2", 0x62, "Keypad 2" },
|
||||
{ "VK_NUMPAD3", 0x63, "Keypad 3" },
|
||||
{ "VK_NUMPAD4", 0x64, "Keypad 4" },
|
||||
{ "VK_NUMPAD5", 0x65, "Keypad 5" },
|
||||
{ "VK_NUMPAD6", 0x66, "Keypad 6" },
|
||||
{ "VK_NUMPAD7", 0x67, "Keypad 7" },
|
||||
{ "VK_NUMPAD8", 0x68, "Keypad 8" },
|
||||
{ "VK_NUMPAD9", 0x69, "Keypad 9" },
|
||||
{ "VK_MULTIPLY", 0x6A, "Multiply" },
|
||||
{ "VK_ADD", 0x6B, "Add" },
|
||||
{ "VK_SEPARATOR", 0x6C, "Separator" },
|
||||
{ "VK_SUBTRACT", 0x6D, "Subtract" },
|
||||
{ "VK_DECIMAL", 0x6E, "Decimal" },
|
||||
{ "VK_DIVIDE", 0x6F, "Divide" },
|
||||
{ "VK_F1", 0x70, "F1" },
|
||||
{ "VK_F2", 0x71, "F2" },
|
||||
{ "VK_F3", 0x72, "F3" },
|
||||
{ "VK_F4", 0x73, "F4" },
|
||||
{ "VK_F5", 0x74, "F5" },
|
||||
{ "VK_F6", 0x75, "F6" },
|
||||
{ "VK_F7", 0x76, "F7" },
|
||||
{ "VK_F8", 0x77, "F8" },
|
||||
{ "VK_F9", 0x78, "F9" },
|
||||
{ "VK_F10", 0x79, "F10" },
|
||||
{ "VK_F11", 0x7A, "F11" },
|
||||
{ "VK_F12", 0x7B, "F12" },
|
||||
{ "VK_F13", 0x7C, "F13" },
|
||||
{ "VK_F14", 0x7D, "F14" },
|
||||
{ "VK_F15", 0x7E, "F15" },
|
||||
{ "VK_F16", 0x7F, "F16" },
|
||||
{ "VK_F17", 0x80, "F17" },
|
||||
{ "VK_F18", 0x81, "F18" },
|
||||
{ "VK_F19", 0x82, "F19" },
|
||||
{ "VK_F20", 0x83, "F20" },
|
||||
{ "VK_F21", 0x84, "F21" },
|
||||
{ "VK_F22", 0x85, "F22" },
|
||||
{ "VK_F23", 0x86, "F23" },
|
||||
{ "VK_F24", 0x87, "F24" },
|
||||
//{ "-", 0x88 - 8F, "Unassigned" },
|
||||
{ "VK_NUMLOCK", 0x90, "Num Lock" },
|
||||
{ "VK_SCROLL", 0x91, "Scroll Lock" },
|
||||
//{"-", 0x92-96,"OEM specific"},
|
||||
//{ "-", 0x97 - 9F, L"Unassigned" },
|
||||
{ "VK_LSHIFT", 0xA0, L"Left Shift" },
|
||||
{ "VK_RSHIFT", 0xA1, L"Right Shift" },
|
||||
{ "VK_LCONTROL", 0xA2, L"Left Control" },
|
||||
{ "VK_RCONTROL", 0xA3, L"Right Control" },
|
||||
{ "VK_LMENU", 0xA4, L"Left Menu" },
|
||||
{ "VK_RMENU", 0xA5, L"Right Menu" },
|
||||
{ "VK_BROWSER_BACK", 0xA6, L"Browser Back" },
|
||||
{ "VK_BROWSER_FORWARD", 0xA7, L"Browser Forward" },
|
||||
{ "VK_BROWSER_REFRESH", 0xA8, L"Browser Refresh" },
|
||||
{ "VK_BROWSER_STOP", 0xA9, L"Browser Stop" },
|
||||
{ "VK_BROWSER_SEARCH", 0xAA, L"Browser Search" },
|
||||
{ "VK_BROWSER_FAVORITES", 0xAB, L"Browser Favorites" },
|
||||
{ "VK_BROWSER_HOME", 0xAC, L"Browser Start and Home" },
|
||||
{ "VK_VOLUME_MUTE", 0xAD, L"Volume Mute" },
|
||||
{ "VK_VOLUME_DOWN", 0xAE, L"Volume Down" },
|
||||
{ "VK_VOLUME_UP", 0xAF, L"Volume Up" },
|
||||
{ "VK_MEDIA_NEXT_TRACK", 0xB0, L"Next Track" },
|
||||
{ "VK_MEDIA_PREV_TRACK", 0xB1, L"Previous Track" },
|
||||
{ "VK_MEDIA_STOP", 0xB2, L"Stop Media" },
|
||||
{ "VK_MEDIA_PLAY_PAUSE", 0xB3, L"Play/Pause Media" },
|
||||
{ "VK_LAUNCH_MAIL", 0xB4, L"Start Mail" },
|
||||
{ "VK_LAUNCH_MEDIA_SELECT", 0xB5, L"Select Media" },
|
||||
{ "VK_LAUNCH_APP1", 0xB6, L"Start Application 1" },
|
||||
{ "VK_LAUNCH_APP2", 0xB7, L"Start Application 2" },
|
||||
//{ "-", 0xB8 - B9, L"Reserved" },
|
||||
{ "VK_OEM_1", 0xBA, L"Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \';:\' key VK_OEM_PLUS" },
|
||||
{ "VK_OEM_PLUS", 0xBB, L"+" },
|
||||
{ "VK_OEM_COMMA", 0xBC, L"," },
|
||||
{ "VK_OEM_MINUS", 0xBD, L"-" },
|
||||
{ "VK_OEM_PERIOD", 0xBE, L"." },
|
||||
{ "VK_OEM_2", 0xBF, L"/" },
|
||||
{ "VK_OEM_3", 0xC0, L"`" },
|
||||
//{ "-", 0xC1 - D7, L"Reserved" },
|
||||
//{ "-", 0xD8 - DA, L"Unassigned" },
|
||||
{ "VK_OEM_4", 0xDB, L"[" },
|
||||
{ "VK_OEM_5", 0xDC, L"\\" },
|
||||
{ "VK_OEM_6", 0xDD, L"]" },
|
||||
{ "VK_OEM_7", 0xDE, L"'" },
|
||||
{ "VK_OEM_8", 0xDF, L"Used for miscellaneous characters; it can vary by keyboard." },
|
||||
//{ "-", 0xE0, L"Reserved" },
|
||||
//{ "-", 0xE1, L"OEM specific" },
|
||||
{ "VK_OEM_102", 0xE2, L"Either the angle bracket key or the backslash key on the RT 102-key keyboard" },
|
||||
//{ "-", 0xE3 - E4, L"OEM specific" },
|
||||
{ "VK_PROCESSKEY", 0xE5, L"IME PROCESS" },
|
||||
//{ "-", 0xE6, L"OEM specific" },
|
||||
{ "VK_PACKET", 0xE7, L"Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP" },
|
||||
//{ "-", 0xE8, L"Unassigned" },
|
||||
//{ "-", 0x97 - 9F, "Unassigned" },
|
||||
{ "VK_LSHIFT", 0xA0, "Left Shift" },
|
||||
{ "VK_RSHIFT", 0xA1, "Right Shift" },
|
||||
{ "VK_LCONTROL", 0xA2, "Left Control" },
|
||||
{ "VK_RCONTROL", 0xA3, "Right Control" },
|
||||
{ "VK_LMENU", 0xA4, "Left Menu" },
|
||||
{ "VK_RMENU", 0xA5, "Right Menu" },
|
||||
{ "VK_BROWSER_BACK", 0xA6, "Browser Back" },
|
||||
{ "VK_BROWSER_FORWARD", 0xA7, "Browser Forward" },
|
||||
{ "VK_BROWSER_REFRESH", 0xA8, "Browser Refresh" },
|
||||
{ "VK_BROWSER_STOP", 0xA9, "Browser Stop" },
|
||||
{ "VK_BROWSER_SEARCH", 0xAA, "Browser Search" },
|
||||
{ "VK_BROWSER_FAVORITES", 0xAB, "Browser Favorites" },
|
||||
{ "VK_BROWSER_HOME", 0xAC, "Browser Start and Home" },
|
||||
{ "VK_VOLUME_MUTE", 0xAD, "Volume Mute" },
|
||||
{ "VK_VOLUME_DOWN", 0xAE, "Volume Down" },
|
||||
{ "VK_VOLUME_UP", 0xAF, "Volume Up" },
|
||||
{ "VK_MEDIA_NEXT_TRACK", 0xB0, "Next Track" },
|
||||
{ "VK_MEDIA_PREV_TRACK", 0xB1, "Previous Track" },
|
||||
{ "VK_MEDIA_STOP", 0xB2, "Stop Media" },
|
||||
{ "VK_MEDIA_PLAY_PAUSE", 0xB3, "Play/Pause Media" },
|
||||
{ "VK_LAUNCH_MAIL", 0xB4, "Start Mail" },
|
||||
{ "VK_LAUNCH_MEDIA_SELECT", 0xB5, "Select Media" },
|
||||
{ "VK_LAUNCH_APP1", 0xB6, "Start Application 1" },
|
||||
{ "VK_LAUNCH_APP2", 0xB7, "Start Application 2" },
|
||||
//{ "-", 0xB8 - B9, "Reserved" },
|
||||
{ "VK_OEM_1", 0xBA, "Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the \';:\' key VK_OEM_PLUS" },
|
||||
{ "VK_OEM_PLUS", 0xBB, "+" },
|
||||
{ "VK_OEM_COMMA", 0xBC, "," },
|
||||
{ "VK_OEM_MINUS", 0xBD, "-" },
|
||||
{ "VK_OEM_PERIOD", 0xBE, "." },
|
||||
{ "VK_OEM_2", 0xBF, "/" },
|
||||
{ "VK_OEM_3", 0xC0, "`" },
|
||||
//{ "-", 0xC1 - D7, "Reserved" },
|
||||
//{ "-", 0xD8 - DA, "Unassigned" },
|
||||
{ "VK_OEM_4", 0xDB, "[" },
|
||||
{ "VK_OEM_5", 0xDC, "\\" },
|
||||
{ "VK_OEM_6", 0xDD, "]" },
|
||||
{ "VK_OEM_7", 0xDE, "'" },
|
||||
{ "VK_OEM_8", 0xDF, "Used for miscellaneous characters; it can vary by keyboard." },
|
||||
//{ "-", 0xE0, "Reserved" },
|
||||
//{ "-", 0xE1, "OEM specific" },
|
||||
{ "VK_OEM_102", 0xE2, "Either the angle bracket key or the backslash key on the RT 102-key keyboard" },
|
||||
//{ "-", 0xE3 - E4, "OEM specific" },
|
||||
{ "VK_PROCESSKEY", 0xE5, "IME PROCESS" },
|
||||
//{ "-", 0xE6, "OEM specific" },
|
||||
{ "VK_PACKET", 0xE7, "Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP" },
|
||||
//{ "-", 0xE8, "Unassigned" },
|
||||
// {"-",0xE6,"OEM specific"},
|
||||
{ "VK_PACKET", 0xE7, L"Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP" },
|
||||
{ "VK_PACKET", 0xE7, "Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP" },
|
||||
// {"-",0xE8,"Unassigned"},
|
||||
//{ "-", 0xE9 - F5, L"OEM specific" },
|
||||
{ "VK_ATTN", 0xF6, L"Attn" },
|
||||
{ "VK_CRSEL", 0xF7, L"CrSel" },
|
||||
{ "VK_EXSEL", 0xF8, L"ExSel" },
|
||||
{ "VK_EREOF", 0xF9, L"Erase EOF" },
|
||||
{ "VK_PLAY", 0xFA, L"Play" },
|
||||
{ "VK_ZOOM", 0xFB, L"Zoom" },
|
||||
{ "VK_NONAME", 0xFC, L"Reserved" },
|
||||
{ "VK_PA1", 0xFD, L"PA1" },
|
||||
{ "VK_OEM_CLEAR", 0xFE, L"Clear" },
|
||||
//{ "-", 0xE9 - F5, "OEM specific" },
|
||||
{ "VK_ATTN", 0xF6, "Attn" },
|
||||
{ "VK_CRSEL", 0xF7, "CrSel" },
|
||||
{ "VK_EXSEL", 0xF8, "ExSel" },
|
||||
{ "VK_EREOF", 0xF9, "Erase EOF" },
|
||||
{ "VK_PLAY", 0xFA, "Play" },
|
||||
{ "VK_ZOOM", 0xFB, "Zoom" },
|
||||
{ "VK_NONAME", 0xFC, "Reserved" },
|
||||
{ "VK_PA1", 0xFD, "PA1" },
|
||||
{ "VK_OEM_CLEAR", 0xFE, "Clear" },
|
||||
|
||||
{ "", 0xFFFF + 0x01, L"Pad1 Up" },
|
||||
{ "", 0xFFFF + 0x02, L"Pad1 Down" },
|
||||
{ "", 0xFFFF + 0x03, L"Pad1 Left" },
|
||||
{ "", 0xFFFF + 0x04, L"Pad1 Right" },
|
||||
{ "", 0xFFFF + 0x05, L"Pad1 Start" },
|
||||
{ "", 0xFFFF + 0x06, L"Pad1 Back" },
|
||||
{ "", 0xFFFF + 0x07, L"Pad1 Left Thumb" },
|
||||
{ "", 0xFFFF + 0x08, L"Pad1 Right Thumb" },
|
||||
{ "", 0xFFFF + 0x09, L"Pad1 Left Bumper" },
|
||||
{ "", 0xFFFF + 0x0A, L"Pad1 Right Bumper" },
|
||||
{ "", 0xFFFF + 0x0D, L"Pad1 A" },
|
||||
{ "", 0xFFFF + 0x0E, L"Pad1 B" },
|
||||
{ "", 0xFFFF + 0x0F, L"Pad1 X" },
|
||||
{ "", 0xFFFF + 0x10, L"Pad1 Y" }
|
||||
{ "", 0xFFFF + 0x01, "Pad1 Up" },
|
||||
{ "", 0xFFFF + 0x02, "Pad1 Down" },
|
||||
{ "", 0xFFFF + 0x03, "Pad1 Left" },
|
||||
{ "", 0xFFFF + 0x04, "Pad1 Right" },
|
||||
{ "", 0xFFFF + 0x05, "Pad1 Start" },
|
||||
{ "", 0xFFFF + 0x06, "Pad1 Back" },
|
||||
{ "", 0xFFFF + 0x07, "Pad1 Left Thumb" },
|
||||
{ "", 0xFFFF + 0x08, "Pad1 Right Thumb" },
|
||||
{ "", 0xFFFF + 0x09, "Pad1 Left Bumper" },
|
||||
{ "", 0xFFFF + 0x0A, "Pad1 Right Bumper" },
|
||||
{ "", 0xFFFF + 0x0D, "Pad1 A" },
|
||||
{ "", 0xFFFF + 0x0E, "Pad1 B" },
|
||||
{ "", 0xFFFF + 0x0F, "Pad1 X" },
|
||||
{ "", 0xFFFF + 0x10, "Pad1 Y" }
|
||||
};
|
||||
|
||||
class WindowsKeyManager : public IKeyManager
|
||||
|
@ -238,6 +238,6 @@ class WindowsKeyManager : public IKeyManager
|
|||
void RefreshState();
|
||||
bool IsKeyPressed(uint32_t key);
|
||||
uint32_t GetPressedKey();
|
||||
wchar_t* GetKeyName(uint32_t key);
|
||||
uint32_t GetKeyCode(wchar_t* keyName);
|
||||
string GetKeyName(uint32_t key);
|
||||
uint32_t GetKeyCode(string keyName);
|
||||
};
|
||||
|
|
|
@ -43,5 +43,4 @@
|
|||
using std::list;
|
||||
using std::vector;
|
||||
using std::shared_ptr;
|
||||
using std::wstring;
|
||||
using std::string;
|
Loading…
Add table
Reference in a new issue