merge upstream
@@ -201,6 +201,7 @@ CMinecraftApp::CMinecraftApp()
|
||||
InitializeCriticalSection(&csTMSPPDownloadQueue);
|
||||
InitializeCriticalSection(&csAdditionalModelParts);
|
||||
InitializeCriticalSection(&csAdditionalSkinBoxes);
|
||||
InitializeCriticalSection(&csSkinOffsets);
|
||||
InitializeCriticalSection(&csAnimOverrideBitmask);
|
||||
InitializeCriticalSection(&csMemFilesLock);
|
||||
InitializeCriticalSection(&csMemTPDLock);
|
||||
@@ -245,8 +246,7 @@ CMinecraftApp::CMinecraftApp()
|
||||
}
|
||||
|
||||
|
||||
void CMinecraftApp::GetSkinAdjustments(_SkinAdjustments* out,
|
||||
unsigned int skinId)
|
||||
void CMinecraftApp::GetSkinAdjustments(_SkinAdjustments* out, unsigned int skinId)
|
||||
{
|
||||
_SkinAdjustments adj;
|
||||
|
||||
@@ -264,8 +264,7 @@ void CMinecraftApp::GetSkinAdjustments(_SkinAdjustments* out,
|
||||
*out = adj;
|
||||
}
|
||||
|
||||
void CMinecraftApp::SetSkinAdjustments(unsigned int skinId,
|
||||
const _SkinAdjustments& adj)
|
||||
void CMinecraftApp::SetSkinAdjustments(unsigned int skinId, const _SkinAdjustments& adj)
|
||||
{
|
||||
EnterCriticalSection(&csAdditionalSkinBoxes);
|
||||
|
||||
@@ -6960,72 +6959,102 @@ wstring CMinecraftApp::EscapeHTMLString(const wstring& desc)
|
||||
return finalString;
|
||||
}
|
||||
|
||||
wstring CMinecraftApp::FormatChatMessage(const wstring& desc, bool applyStyling)
|
||||
{
|
||||
static std::wregex IDS_Pattern(LR"(\{\*IDS_(\d+)\*\})"); //maybe theres a better way to do translateable IDS
|
||||
static std::wstring_view colorFormatString = L"<font color=\"#%08x\">";
|
||||
|
||||
wstring results = desc;
|
||||
wchar_t replacements[64];
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_0), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A70", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_1), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A71", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_2), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A72", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_3), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A73", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_4), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A74", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_5), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A75", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_6), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A76", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_7), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A77", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_8), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A78", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_9), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A79", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_a), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A7a", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_b), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A7b", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_c), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A7c", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_d), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A7d", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_e), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A7e", replacements);
|
||||
|
||||
swprintf(replacements, 64, (applyStyling ? colorFormatString.data() : L""), GetHTMLColour(eHTMLColor_f), 0xFFFFFFFF);
|
||||
results = replaceAll(results, L"\u00A7f", replacements);
|
||||
results = replaceAll(results, L"\u00A7r", replacements); //we only support color so reset is the same as white color
|
||||
|
||||
if (applyStyling) {
|
||||
std::wsmatch match;
|
||||
while (std::regex_search(results, match, IDS_Pattern)) {
|
||||
results = replaceAll(results, match[0], app.GetString(std::stoi(match[1].str())));
|
||||
}
|
||||
eMinecraftColour GetColorFromCode(wchar_t _char) {
|
||||
switch (_char) {
|
||||
case L'0': return eHTMLColor_0;
|
||||
case L'1': return eHTMLColor_1;
|
||||
case L'2': return eHTMLColor_2;
|
||||
case L'3': return eHTMLColor_3;
|
||||
case L'4': return eHTMLColor_4;
|
||||
case L'5': return eHTMLColor_5;
|
||||
case L'6': return eHTMLColor_6;
|
||||
case L'7': return eHTMLColor_7;
|
||||
case L'8': return eHTMLColor_8;
|
||||
case L'9': return eHTMLColor_9;
|
||||
case L'a': return eHTMLColor_a;
|
||||
case L'b': return eHTMLColor_b;
|
||||
case L'c': return eHTMLColor_c;
|
||||
case L'd': return eHTMLColor_d;
|
||||
case L'e': return eHTMLColor_e;
|
||||
case L'f': return eHTMLColor_f;
|
||||
default: return eMinecraftColour_NOT_SET;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return results;
|
||||
wstring CMinecraftApp::FormatColoredString(const wstring& string) {
|
||||
static constexpr std::wstring_view colorFormatString = L"<font color=\"#%08x\">";
|
||||
|
||||
wstring result;
|
||||
|
||||
bool fontOpen = false;
|
||||
bool italicOpen = false;
|
||||
|
||||
auto CloseItalic = [&]() {
|
||||
if (italicOpen) {
|
||||
result += L"</i>";
|
||||
italicOpen = false;
|
||||
}
|
||||
};
|
||||
|
||||
auto CloseFont = [&]() {
|
||||
if (fontOpen) {
|
||||
result += L"</font>";
|
||||
fontOpen = false;
|
||||
}
|
||||
};
|
||||
|
||||
wchar_t buffer[64];
|
||||
|
||||
for (size_t i = 0; i < string.length(); ++i) {
|
||||
if (string[i] == L'\u00A7' && i + 1 < string.length()) {
|
||||
wchar_t code = towlower(string[i + 1]);
|
||||
|
||||
if (GetColorFromCode(code) != eMinecraftColour_NOT_SET) {
|
||||
bool restoreItalic = italicOpen;
|
||||
|
||||
CloseItalic();
|
||||
CloseFont();
|
||||
|
||||
swprintf(buffer, _countof(buffer), colorFormatString.data(), GetHTMLColour(GetColorFromCode(code)));
|
||||
|
||||
result += buffer;
|
||||
fontOpen = true;
|
||||
|
||||
if (restoreItalic) {
|
||||
result += L"<i>";
|
||||
italicOpen = true;
|
||||
}
|
||||
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (code == L'o') {
|
||||
if (!italicOpen) {
|
||||
result += L"<i>";
|
||||
italicOpen = true;
|
||||
}
|
||||
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (code == L'r') {
|
||||
CloseItalic();
|
||||
CloseFont();
|
||||
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
result += string[i];
|
||||
}
|
||||
|
||||
CloseItalic();
|
||||
CloseFont();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
wstring CMinecraftApp::GetActionReplacement(int iPad, unsigned char ucAction)
|
||||
@@ -9684,7 +9713,14 @@ void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, D
|
||||
{
|
||||
EntityRenderDispatcher *dispatcher = EntityRenderDispatcher::instance;
|
||||
EntityRenderer *renderer = dispatcher ? dispatcher->getRenderer(eTYPE_PLAYER) : nullptr;
|
||||
Model *pModel = renderer ? renderer->getModel() : nullptr;
|
||||
unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID);
|
||||
Model *pModel;
|
||||
if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_SlimModel))
|
||||
pModel = renderer ? renderer->getModel(2) : nullptr;
|
||||
else if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_WideModel))
|
||||
pModel = renderer ? renderer->getModel(1) : nullptr;
|
||||
else
|
||||
pModel = renderer ? renderer->getModel(0) : nullptr;
|
||||
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;
|
||||
vector<SKIN_BOX *> *pvSkinBoxes = new vector<SKIN_BOX *>;
|
||||
|
||||
@@ -9717,7 +9753,14 @@ vector<ModelPart *> * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vect
|
||||
{
|
||||
EntityRenderDispatcher *dispatcher = EntityRenderDispatcher::instance;
|
||||
EntityRenderer *renderer = dispatcher ? dispatcher->getRenderer(eTYPE_PLAYER) : nullptr;
|
||||
Model *pModel = renderer ? renderer->getModel() : nullptr;
|
||||
unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID);
|
||||
Model *pModel;
|
||||
if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_SlimModel))
|
||||
pModel = renderer ? renderer->getModel(2) : nullptr;
|
||||
else if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_WideModel))
|
||||
pModel = renderer ? renderer->getModel(1) : nullptr;
|
||||
else
|
||||
pModel = renderer ? renderer->getModel(0) : nullptr;
|
||||
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;
|
||||
|
||||
EnterCriticalSection( &csAdditionalModelParts );
|
||||
@@ -9742,6 +9785,44 @@ vector<ModelPart *> * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vect
|
||||
return pvModelPart;
|
||||
}
|
||||
|
||||
void CMinecraftApp::SetSkinOffsets(DWORD dwSkinID, SKIN_OFFSET *SkinOffsetA, DWORD dwSkinOffsetC)
|
||||
{
|
||||
vector<SKIN_OFFSET *> *pvSkinOffset = new vector<SKIN_OFFSET *>;
|
||||
|
||||
EnterCriticalSection( &csSkinOffsets );
|
||||
|
||||
app.DebugPrintf("*** SetSkinOffsets - Adding skin offsets for skin %d from array of Skin Offsets\n",dwSkinID&0x0FFFFFFF);
|
||||
|
||||
for(unsigned int i=0;i<dwSkinOffsetC;i++)
|
||||
{
|
||||
pvSkinOffset->push_back(&SkinOffsetA[i]);
|
||||
}
|
||||
|
||||
|
||||
m_SkinOffsets.insert( std::pair<DWORD, vector<SKIN_OFFSET *> *>(dwSkinID, pvSkinOffset) );
|
||||
|
||||
LeaveCriticalSection( &csSkinOffsets );
|
||||
|
||||
}
|
||||
|
||||
vector<SKIN_OFFSET *> * CMinecraftApp::SetSkinOffsets(DWORD dwSkinID, vector<SKIN_OFFSET *> *pvSkinOffsetA)
|
||||
{
|
||||
vector<SKIN_OFFSET *> *pvSkinOffset = new vector<SKIN_OFFSET *>;
|
||||
|
||||
EnterCriticalSection( &csSkinOffsets );
|
||||
app.DebugPrintf("*** SetSkinOffsets - Inserting skin offsets for skin %d from array of Skin Offsets\n",dwSkinID&0x0FFFFFFF);
|
||||
|
||||
for( auto& it : *pvSkinOffsetA )
|
||||
{
|
||||
pvSkinOffset->push_back(it);
|
||||
}
|
||||
|
||||
m_SkinOffsets.emplace(dwSkinID, pvSkinOffsetA);
|
||||
|
||||
LeaveCriticalSection( &csSkinOffsets );
|
||||
return pvSkinOffset;
|
||||
}
|
||||
|
||||
|
||||
vector<ModelPart *> *CMinecraftApp::GetAdditionalModelParts(DWORD dwSkinID)
|
||||
{
|
||||
@@ -9777,6 +9858,23 @@ vector<SKIN_BOX *> *CMinecraftApp::GetAdditionalSkinBoxes(DWORD dwSkinID)
|
||||
return pvSkinBoxes;
|
||||
}
|
||||
|
||||
vector<SKIN_OFFSET *> *CMinecraftApp::GetSkinOffsets(DWORD dwSkinID)
|
||||
{
|
||||
EnterCriticalSection( &csSkinOffsets );
|
||||
vector<SKIN_OFFSET *> *pvSkinOffsets=nullptr;
|
||||
if(m_SkinOffsets.size()>0)
|
||||
{
|
||||
auto it = m_SkinOffsets.find(dwSkinID);
|
||||
if(it!=m_SkinOffsets.end())
|
||||
{
|
||||
pvSkinOffsets = (*it).second;
|
||||
}
|
||||
}
|
||||
|
||||
LeaveCriticalSection( &csSkinOffsets );
|
||||
return pvSkinOffsets;
|
||||
}
|
||||
|
||||
unsigned int CMinecraftApp::GetAnimOverrideBitmask(DWORD dwSkinID)
|
||||
{
|
||||
EnterCriticalSection( &csAnimOverrideBitmask );
|
||||
|
||||
@@ -21,6 +21,7 @@ using namespace std;
|
||||
#include "./GameRules/ConsoleGameRulesConstants.h"
|
||||
#include "./GameRules/GameRuleManager.h"
|
||||
#include "../SkinBox.h"
|
||||
#include "../SkinOffset.h"
|
||||
#include "../ArchiveFile.h"
|
||||
#include "lce_filesystem/FolderFile.h"
|
||||
|
||||
@@ -574,7 +575,7 @@ public:
|
||||
int GetHTMLFontSize(EHTMLFontSize size);
|
||||
wstring FormatHTMLString(int iPad, const wstring& desc, int shadowColour = 0xFFFFFFFF, bool override = false);
|
||||
wstring EscapeHTMLString(const wstring &desc);
|
||||
wstring FormatChatMessage(const wstring& desc, bool applyStyling = true);
|
||||
wstring FormatColoredString(const wstring& desc);
|
||||
wstring GetActionReplacement(int iPad, unsigned char ucAction);
|
||||
wstring GetVKReplacement(unsigned int uiVKey, bool override = false);
|
||||
wstring GetIconReplacement(unsigned int uiIcon);
|
||||
@@ -848,6 +849,7 @@ private:
|
||||
CRITICAL_SECTION csTMSPPDownloadQueue;
|
||||
CRITICAL_SECTION csAdditionalModelParts;
|
||||
CRITICAL_SECTION csAdditionalSkinBoxes;
|
||||
CRITICAL_SECTION csSkinOffsets;
|
||||
CRITICAL_SECTION csAnimOverrideBitmask;
|
||||
bool m_bCorruptSaveDeleted;
|
||||
wstring m_currentSaveFolderName; // 4J Added: for hardcore world deletion on Win64
|
||||
@@ -870,6 +872,9 @@ public:
|
||||
vector<ModelPart *> * SetAdditionalSkinBoxes(DWORD dwSkinID, vector<SKIN_BOX *> *pvSkinBoxA);
|
||||
vector<ModelPart *> *GetAdditionalModelParts(DWORD dwSkinID);
|
||||
vector<SKIN_BOX *> *GetAdditionalSkinBoxes(DWORD dwSkinID);
|
||||
void SetSkinOffsets(DWORD dwSkinID, SKIN_OFFSET *SkinOffsetA, DWORD dwSkinOffsetC);
|
||||
vector<SKIN_OFFSET *> * SetSkinOffsets(DWORD dwSkinID, vector<SKIN_OFFSET *> *pvSkinOffsetA);
|
||||
vector<SKIN_OFFSET *> *GetSkinOffsets(DWORD dwSkinID);
|
||||
void SetAnimOverrideBitmask(DWORD dwSkinID,unsigned int uiAnimOverrideBitmask);
|
||||
unsigned int GetAnimOverrideBitmask(DWORD dwSkinID);
|
||||
|
||||
@@ -900,6 +905,7 @@ private:
|
||||
// vector of additional skin model parts, indexed by the skin texture id
|
||||
unordered_map<DWORD, vector<ModelPart *> *> m_AdditionalModelParts;
|
||||
unordered_map<DWORD, vector<SKIN_BOX *> *> m_AdditionalSkinBoxes;
|
||||
unordered_map<DWORD, vector<SKIN_OFFSET *> *> m_SkinOffsets;
|
||||
unordered_map<DWORD, unsigned int> m_AnimOverrides;
|
||||
|
||||
|
||||
|
||||
@@ -109,6 +109,7 @@ const WCHAR *DLCManager::wchTypeNamesA[]=
|
||||
L"ENCHANTTEXTFOCUSCOLOUR",
|
||||
L"DATAPATH",
|
||||
L"PACKVERSION",
|
||||
L"OFFSET",
|
||||
};
|
||||
|
||||
DLCManager::DLCManager()
|
||||
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
e_DLCParamType_EnchantmentTextFocusColour,
|
||||
e_DLCParamType_DataPath,
|
||||
e_DLCParamType_PackVersion,
|
||||
e_DLCParamType_Offset,
|
||||
|
||||
e_DLCParamType_Max,
|
||||
|
||||
|
||||
@@ -120,9 +120,9 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
||||
|
||||
#ifdef __PS3__
|
||||
// 4J Stu - The Xbox version used swscanf_s which isn't available in GCC.
|
||||
swscanf(value.c_str(), L"%10ls%f%f%f%f%f%f%f%f", wchBodyPart,
|
||||
swscanf(value.c_str(), L"%10ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart,
|
||||
#else
|
||||
swscanf_s(value.c_str(), L"%9ls%f%f%f%f%f%f%f%f", wchBodyPart,10,
|
||||
swscanf_s(value.c_str(), L"%9ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart,10,
|
||||
#endif
|
||||
&pSkinBox->fX,
|
||||
&pSkinBox->fY,
|
||||
@@ -131,7 +131,10 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
||||
&pSkinBox->fH,
|
||||
&pSkinBox->fD,
|
||||
&pSkinBox->fU,
|
||||
&pSkinBox->fV);
|
||||
&pSkinBox->fV,
|
||||
&pSkinBox->fA,
|
||||
&pSkinBox->fM,
|
||||
&pSkinBox->fS);
|
||||
|
||||
if(wcscmp(wchBodyPart,L"HEAD")==0)
|
||||
{
|
||||
@@ -157,11 +160,216 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Leg1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"HEADWEAR")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Headwear;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"JACKET")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Jacket;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SLEEVE0")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Sleeve0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SLEEVE1")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Sleeve1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"PANTS0")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Pants0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"PANTS1")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Pants1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"WAIST")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Waist;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"LEGGING0")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Legging0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"LEGGING1")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Legging1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SOCK0")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Sock0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SOCK1")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Sock1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BOOT0")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Boot0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BOOT1")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Boot1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"ARMARMOR0")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_ArmArmor0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"ARMARMOR1")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_ArmArmor1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BODYARMOR")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_BodyArmor;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BELT")==0)
|
||||
{
|
||||
pSkinBox->ePart=eBodyPart_Belt;
|
||||
}
|
||||
|
||||
// add this to the skin's vector of parts
|
||||
m_AdditionalBoxes.push_back(pSkinBox);
|
||||
}
|
||||
break;
|
||||
case DLCManager::e_DLCParamType_Offset:
|
||||
{
|
||||
WCHAR wchBodyPart[10];
|
||||
wchar_t wchDirection[2];
|
||||
SKIN_OFFSET *pSkinOffset = new SKIN_OFFSET;
|
||||
ZeroMemory(pSkinOffset,sizeof(SKIN_OFFSET));
|
||||
|
||||
#ifdef __PS3__
|
||||
// 4J Stu - The Xbox version used swscanf_s which isn't available in GCC.
|
||||
swscanf(value.c_str(), L"%10ls%2ls%f", wchBodyPart,
|
||||
#else
|
||||
swscanf_s(value.c_str(), L"%9ls%2ls%f", wchBodyPart,10, wchDirection,2,
|
||||
#endif
|
||||
&pSkinOffset->fO);
|
||||
|
||||
if(wcscmp(wchDirection,L"X")==0)
|
||||
{
|
||||
pSkinOffset->fD=eOffsetDirection_X;
|
||||
}
|
||||
else if (wcscmp(wchDirection,L"Y")==0)
|
||||
{
|
||||
pSkinOffset->fD=eOffsetDirection_Y;
|
||||
}
|
||||
else if(wcscmp(wchDirection,L"Z")==0)
|
||||
{
|
||||
pSkinOffset->fD=eOffsetDirection_Z;
|
||||
}
|
||||
|
||||
if(wcscmp(wchBodyPart,L"HEAD")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Head;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BODY")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Body;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"ARM0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Arm0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"ARM1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Arm1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"LEG0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Leg0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"LEG1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Leg1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"HEADWEAR")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Headwear;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"JACKET")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Jacket;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SLEEVE0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Sleeve0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SLEEVE1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Sleeve1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"PANTS0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Pants0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"PANTS1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Pants1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"HELMET")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Helmet;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"WAIST")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Waist;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"LEGGING0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Legging0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"LEGGING1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Legging1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SOCK0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Sock0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"SOCK1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Sock1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BOOT0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Boot0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BOOT1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Boot1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"ARMARMOR1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_ArmArmor1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"ARMARMOR0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_ArmArmor0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BODYARMOR")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_BodyArmor;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"BELT")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Belt;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"TOOL0")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Tool0;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"TOOL1")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Tool1;
|
||||
}
|
||||
|
||||
// add this to the skin's vector of offsets
|
||||
m_Offsets.push_back(pSkinOffset);
|
||||
}
|
||||
break;
|
||||
case DLCManager::e_DLCParamType_Anim:
|
||||
#ifdef __PS3__
|
||||
// 4J Stu - The Xbox version used swscanf_s which isn't available in GCC.
|
||||
@@ -189,6 +397,15 @@ vector<SKIN_BOX *> *DLCSkinFile::getAdditionalBoxes()
|
||||
return &m_AdditionalBoxes;
|
||||
}
|
||||
|
||||
int DLCSkinFile::getOffsetsCount()
|
||||
{
|
||||
return static_cast<int>(m_Offsets.size());
|
||||
}
|
||||
vector<SKIN_OFFSET *> *DLCSkinFile::getOffsets()
|
||||
{
|
||||
return &m_Offsets;
|
||||
}
|
||||
|
||||
wstring DLCSkinFile::getParameterAsString(DLCManager::EDLCParameterType type)
|
||||
{
|
||||
switch(type)
|
||||
|
||||
@@ -13,6 +13,7 @@ private:
|
||||
unsigned int m_uiAnimOverrideBitmask;
|
||||
bool m_bIsFree;
|
||||
vector<SKIN_BOX *> m_AdditionalBoxes;
|
||||
vector<SKIN_OFFSET *> m_Offsets;
|
||||
_SkinAdjustments m_skinAdjustments;
|
||||
|
||||
public:
|
||||
@@ -26,6 +27,8 @@ public:
|
||||
bool getParameterAsBool(DLCManager::EDLCParameterType type) override;
|
||||
vector<SKIN_BOX *> *getAdditionalBoxes();
|
||||
int getAdditionalBoxesCount();
|
||||
vector<SKIN_OFFSET *> *getOffsets();
|
||||
int getOffsetsCount();
|
||||
unsigned int getAnimOverrideBitmask() { return m_uiAnimOverrideBitmask;}
|
||||
bool isFree() {return m_bIsFree;}
|
||||
};
|
||||
@@ -13,6 +13,9 @@
|
||||
#include <iostream>
|
||||
#endif
|
||||
|
||||
#include <codecvt>
|
||||
#include <string>
|
||||
|
||||
CPlatformNetworkManagerStub *g_pPlatformNetworkManager;
|
||||
|
||||
|
||||
@@ -910,14 +913,13 @@ void CPlatformNetworkManagerStub::SearchForGames()
|
||||
if (std::fread(&nameLen, sizeof(uint16_t), 1, file) != 1) break;
|
||||
if (nameLen > 256) break;
|
||||
|
||||
char nameBuf[257] = {};
|
||||
if (nameLen > 0)
|
||||
{
|
||||
if (std::fread(nameBuf, 1, nameLen, file) != nameLen) break;
|
||||
wstring wName = L"";
|
||||
for (int l = 0; l < nameLen; l++) {
|
||||
uint16_t _char = 0;
|
||||
if (std::fread(&_char, 1, 1, file) != 1) break;
|
||||
wName += _char;
|
||||
}
|
||||
|
||||
wstring wName = convStringToWstring(nameBuf);
|
||||
|
||||
FriendSessionInfo* info = new FriendSessionInfo();
|
||||
size_t nLen = wName.length();
|
||||
info->displayLabel = new wchar_t[nLen + 1];
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#include "../../ModelPart.h"
|
||||
#include "../../Options.h"
|
||||
#include "../../../Minecraft.World/net.minecraft.world.entity.player.h"
|
||||
#include "Skins.h"
|
||||
#include "UIControl_PlayerSkinPreview.h"
|
||||
#include <string>
|
||||
|
||||
@@ -108,6 +107,7 @@ UIControl_PlayerSkinPreview::UIControl_PlayerSkinPreview()
|
||||
m_framesAnimatingRotation = 0;
|
||||
m_bAnimatingToFacing = false;
|
||||
m_pvAdditionalModelParts=nullptr;
|
||||
m_pvSkinOffsets=nullptr;
|
||||
m_uiAnimOverrideBitmask=0L;
|
||||
}
|
||||
|
||||
@@ -184,6 +184,7 @@ void UIControl_PlayerSkinPreview::SetTexture(const wstring &url, TEXTURE_NAME ba
|
||||
}
|
||||
|
||||
m_pvAdditionalModelParts=app.GetAdditionalModelParts(app.getSkinIdFromPath(m_customTextureUrl));
|
||||
m_pvSkinOffsets=app.GetSkinOffsets(app.getSkinIdFromPath(m_customTextureUrl));
|
||||
}
|
||||
|
||||
void UIControl_PlayerSkinPreview::SetFacing(ESkinPreviewFacing facing, bool bAnimate /*= false*/)
|
||||
@@ -309,24 +310,8 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou
|
||||
glPushMatrix();
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
HumanoidModel *model = static_cast<HumanoidModel *>(renderer->getModel());
|
||||
Textures *textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = textures->loadMemTexture(m_customTextureUrl, m_backupTexture) - 37;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64)
|
||||
model = static_cast<HumanoidModel *>(renderer->getNewModelSlim());
|
||||
else
|
||||
model = static_cast<HumanoidModel *>(renderer->getModelSlim());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64)
|
||||
model = static_cast<HumanoidModel *>(renderer->getNewModel());
|
||||
else
|
||||
model = static_cast<HumanoidModel *>(renderer->getModel());
|
||||
}
|
||||
Textures *t = Minecraft::GetInstance()->textures;
|
||||
HumanoidModel *model = static_cast<HumanoidModel *>(renderer->getModel(Player::GetModelTypeFromTextureId(t->loadMemTexture(m_customTextureUrl, m_backupTexture)-36)+Player::GetModelTypeFromAnimBitmask(m_uiAnimOverrideBitmask)));
|
||||
|
||||
//getAttackAnim(mob, a);
|
||||
//if (armor != nullptr) armor->attackTime = model->attackTime;
|
||||
@@ -438,7 +423,7 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
|
||||
//model->prepareMobModel(mob, wp, ws, a);
|
||||
model->render(nullptr, wp, ws, bob, headRot - bodyRot, headRotx, _scale, true);
|
||||
model->renderUI(wp, ws, bob, headRot - bodyRot, headRotx, _scale, true, m_pvSkinOffsets);
|
||||
/*for (int i = 0; i < MAX_ARMOR_LAYERS; i++)
|
||||
{
|
||||
if (prepareArmor(mob, i, a))
|
||||
|
||||
@@ -53,6 +53,7 @@ private:
|
||||
ESkinPreviewAnimations m_currentAnimation;
|
||||
//vector<Model::SKIN_BOX *> *m_pvAdditionalBoxes;
|
||||
vector<ModelPart *> *m_pvAdditionalModelParts;
|
||||
vector<SKIN_OFFSET *> *m_pvSkinOffsets;
|
||||
public:
|
||||
enum ESkinPreviewFacing
|
||||
{
|
||||
|
||||
@@ -19,7 +19,10 @@ UIScene_ContainerMenu::UIScene_ContainerMenu(int iPad, void *_initData, UILayer
|
||||
// Setup all the Iggy references we need for this scene
|
||||
initialiseMovie();
|
||||
|
||||
m_labelChest.init(initData->container->getName());
|
||||
IggyValueSetBooleanRS(m_labelChest.getIggyValuePath(), 0, "m_bUseHtmlText", true);
|
||||
|
||||
wstring title = app.EscapeHTMLString(initData->container->getName());
|
||||
m_labelChest.init(app.FormatColoredString(title));
|
||||
|
||||
ContainerMenu* menu = new ContainerMenu( initData->inventory, initData->container );
|
||||
|
||||
|
||||
@@ -21,6 +21,28 @@ UIScene_HUD::UIScene_HUD(int iPad, void *initData, UILayer *parentLayer) : UISce
|
||||
SetDragonLabel( app.GetString( IDS_BOSS_ENDERDRAGON_HEALTH ) );
|
||||
SetSelectedLabel(L"");
|
||||
|
||||
//enable colors for selected item text
|
||||
{
|
||||
IggyValuePath classPath;
|
||||
IggyValuePathMakeNameRef(&classPath, m_rootPath, "SelectedLabel");
|
||||
|
||||
IggyValuePath labelPath;
|
||||
IggyValuePathMakeNameRef(&labelPath, &classPath, "Label");
|
||||
|
||||
IggyValueSetBooleanRS(&labelPath, 0, "m_bUseHtmlText", true);
|
||||
}
|
||||
|
||||
//enable colors for boss bar
|
||||
{
|
||||
IggyValuePath classPath;
|
||||
IggyValuePathMakeNameRef(&classPath, m_rootPath, "m_DragonHealthBar");
|
||||
|
||||
IggyValuePath labelPath;
|
||||
IggyValuePathMakeNameRef(&labelPath, &classPath, "m_DragonHealthLabel");
|
||||
|
||||
IggyValueSetBooleanRS(&labelPath, 0, "m_bUseHtmlText", true);
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < CHAT_LINES_COUNT; ++i)
|
||||
{
|
||||
m_labelChatText[i].init(L"");
|
||||
@@ -263,6 +285,28 @@ void UIScene_HUD::handleReload()
|
||||
SetDragonLabel(BossMobGuiInfo::name[idx]);
|
||||
SetSelectedLabel(L"");
|
||||
|
||||
//enable colors for selected item text
|
||||
{
|
||||
IggyValuePath classPath;
|
||||
IggyValuePathMakeNameRef(&classPath, m_rootPath, "SelectedLabel");
|
||||
|
||||
IggyValuePath labelPath;
|
||||
IggyValuePathMakeNameRef(&labelPath, &classPath, "Label");
|
||||
|
||||
IggyValueSetBooleanRS(&labelPath, 0, "m_bUseHtmlText", true);
|
||||
}
|
||||
|
||||
//enable colors for boss bar
|
||||
{
|
||||
IggyValuePath classPath;
|
||||
IggyValuePathMakeNameRef(&classPath, m_rootPath, "m_DragonHealthBar");
|
||||
|
||||
IggyValuePath labelPath;
|
||||
IggyValuePathMakeNameRef(&labelPath, &classPath, "m_DragonHealthLabel");
|
||||
|
||||
IggyValueSetBooleanRS(&labelPath, 0, "m_bUseHtmlText", true);
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < CHAT_LINES_COUNT; ++i)
|
||||
{
|
||||
m_labelChatText[i].init(L"");
|
||||
@@ -569,11 +613,17 @@ void UIScene_HUD::SetDragonHealth(float health)
|
||||
|
||||
void UIScene_HUD::SetDragonLabel(const wstring &label)
|
||||
{
|
||||
wstring itemName = L"";
|
||||
if (!label.empty()) {
|
||||
itemName = app.EscapeHTMLString(label);
|
||||
itemName = app.FormatColoredString(itemName);
|
||||
}
|
||||
|
||||
IggyDataValue result;
|
||||
IggyDataValue value[1];
|
||||
IggyStringUTF16 stringVal;
|
||||
stringVal.string = (IggyUTF16*)label.c_str();
|
||||
stringVal.length = label.length();
|
||||
stringVal.string = (IggyUTF16*)itemName.c_str();
|
||||
stringVal.length = itemName.length();
|
||||
value[0].type = IGGY_DATATYPE_string_UTF16;
|
||||
value[0].string16 = stringVal;
|
||||
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetDragonLabel , 1 , value );
|
||||
@@ -599,11 +649,17 @@ void UIScene_HUD::SetSelectedLabel(const wstring &label)
|
||||
// 4J Stu - Timing here is kept the same as on Xbox360, even though we do it differently now and do the fade out in Flash rather than directly setting opacity
|
||||
if(!label.empty()) m_uiSelectedItemOpacityCountDown = SharedConstants::TICKS_PER_SECOND * 3;
|
||||
|
||||
wstring itemName = L"";
|
||||
if (!label.empty()) {
|
||||
itemName = app.EscapeHTMLString(label);
|
||||
itemName = app.FormatColoredString(itemName);
|
||||
}
|
||||
|
||||
IggyDataValue result;
|
||||
IggyDataValue value[1];
|
||||
IggyStringUTF16 stringVal;
|
||||
stringVal.string = (IggyUTF16*)label.c_str();
|
||||
stringVal.length = label.length();
|
||||
stringVal.string = (IggyUTF16*)itemName.c_str();
|
||||
stringVal.length = itemName.length();
|
||||
value[0].type = IGGY_DATATYPE_string_UTF16;
|
||||
value[0].string16 = stringVal;
|
||||
IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetSelectedLabel , 1 , value );
|
||||
|
||||
@@ -375,7 +375,7 @@ void UIScene_JoinMenu::updateServerDescription() {
|
||||
wstring testText = L"\nNothing yet...";
|
||||
IggyStringUTF16 iggyStr;
|
||||
wstring formattedText = app.EscapeHTMLString(testText);
|
||||
formattedText = app.FormatChatMessage(formattedText);
|
||||
formattedText = app.FormatColoredString(formattedText);
|
||||
iggyStr.string = (IggyUTF16*)formattedText.c_str();
|
||||
iggyStr.length = (unsigned int)formattedText.length();
|
||||
|
||||
|
||||
@@ -4675,7 +4675,7 @@ void UIScene_LoadCreateJoinMenu::RebuildJoinGamesListVisual(bool syncFocus)
|
||||
m_buttonListGames.getItemCount() - 1,
|
||||
L"lceheadwer.png",
|
||||
L"lceheadwer");
|
||||
|
||||
RefreshServerListHtmlPatch();
|
||||
#endif
|
||||
|
||||
if (m_currentSessions == nullptr || m_currentSessions->empty())
|
||||
@@ -4756,7 +4756,10 @@ void UIScene_LoadCreateJoinMenu::RebuildJoinGamesListVisual(bool syncFocus)
|
||||
}
|
||||
}
|
||||
|
||||
m_buttonListGames.addItem(sessionInfo->displayLabel, modeIconName, tpIconName);
|
||||
wstring htmlLabel = app.EscapeHTMLString(sessionInfo->displayLabel);
|
||||
htmlLabel = app.FormatColoredString(htmlLabel);
|
||||
|
||||
m_buttonListGames.addItem(htmlLabel, modeIconName, tpIconName);
|
||||
|
||||
if (memcmp(&selectedSessionId, &sessionInfo->sessionId, sizeof(SessionID)) == 0)
|
||||
|
||||
@@ -4778,6 +4781,8 @@ void UIScene_LoadCreateJoinMenu::RebuildJoinGamesListVisual(bool syncFocus)
|
||||
|
||||
}
|
||||
|
||||
RefreshServerListHtmlPatch();
|
||||
|
||||
if(syncFocus)
|
||||
m_buttonListGames.updateChildFocus(m_buttonListGames.getCurrentSelection());
|
||||
|
||||
@@ -9208,6 +9213,21 @@ int UIScene_LoadCreateJoinMenu::AddServerKeyboardCallback(LPVOID lpParam, bool b
|
||||
|
||||
}
|
||||
|
||||
void UIScene_LoadCreateJoinMenu::RefreshServerListHtmlPatch() {
|
||||
S32 arrayItems = 0;
|
||||
IggyValueGetArrayLengthRS(m_buttonListGames.getIggyValuePath(), 0, "m_aItems", &arrayItems);
|
||||
|
||||
IggyValuePath listPath;
|
||||
IggyValuePathMakeNameRef(&listPath, m_buttonListGames.getIggyValuePath(), "m_aItems");
|
||||
|
||||
for (int i = 0; i < arrayItems; i++) {
|
||||
IggyValuePath listItem;
|
||||
IggyValuePathMakeArrayRef(&listItem, &listPath, i);
|
||||
|
||||
IggyValueSetBooleanRS(&listItem, 0, "m_bUseHtmlText", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void UIScene_LoadCreateJoinMenu::AppendServerToFile(const wstring& ip, const wstring& port, const wstring& name)
|
||||
|
||||
@@ -270,6 +270,8 @@ private:
|
||||
void BeginAddServer();
|
||||
void AppendServerToFile(const wstring& ip, const wstring& port, const wstring& name);
|
||||
static int AddServerKeyboardCallback(LPVOID lpParam, bool bRes);
|
||||
|
||||
void RefreshServerListHtmlPatch();
|
||||
#endif
|
||||
|
||||
#if defined(__PS3__) || defined(__PSVITA__) || defined(__ORBIS__)
|
||||
|
||||
@@ -24,16 +24,16 @@ const WCHAR *UIScene_SkinSelectMenu::wchDefaultNamesA[]=
|
||||
L"Prisoner Steve",
|
||||
L"Cyclist Steve",
|
||||
L"Boxer Steve",
|
||||
L"Developer Steve",
|
||||
L"Alex",
|
||||
L"Tuxedo Alex",
|
||||
L"Boxer Alex",
|
||||
L"Prisoner Alex",
|
||||
L"Tennis Alex",
|
||||
L"Cyclist Alex",
|
||||
L"Tuxedo Alex",
|
||||
L"Athlete Alex",
|
||||
L"Swedish Alex",
|
||||
L"Prisoner Alex",
|
||||
L"Cyclist Alex",
|
||||
L"Boxer Alex",
|
||||
L"Developer Alex",
|
||||
L"Developer Steve",
|
||||
};
|
||||
|
||||
UIScene_SkinSelectMenu::UIScene_SkinSelectMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
|
||||
@@ -59,6 +59,7 @@ UIScene_SkinSelectMenu::UIScene_SkinSelectMenu(int iPad, void *initData, UILayer
|
||||
m_selectedSkinPath = L"";
|
||||
m_selectedCapePath = L"";
|
||||
m_vAdditionalSkinBoxes = nullptr;
|
||||
m_vSkinOffsets = nullptr;
|
||||
|
||||
m_bSlidingSkins = false;
|
||||
m_bAnimatingMove = false;
|
||||
@@ -662,6 +663,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
m_selectedSkinPath = skinFile->getPath();
|
||||
m_selectedCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape);
|
||||
m_vAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
|
||||
m_vSkinOffsets = skinFile->getOffsets();
|
||||
|
||||
skinName = skinFile->getParameterAsString( DLCManager::e_DLCParamType_DisplayName );
|
||||
skinOrigin = skinFile->getParameterAsString( DLCManager::e_DLCParamType_ThemeName );
|
||||
@@ -684,6 +686,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
m_selectedSkinPath = L"";
|
||||
m_selectedCapePath = L"";
|
||||
m_vAdditionalSkinBoxes = nullptr;
|
||||
m_vSkinOffsets = nullptr;
|
||||
|
||||
switch(m_packIndex)
|
||||
{
|
||||
@@ -726,6 +729,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
m_selectedSkinPath = skinFile->getPath();
|
||||
m_selectedCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape);
|
||||
m_vAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
|
||||
m_vSkinOffsets = skinFile->getOffsets();
|
||||
|
||||
skinName = skinFile->getParameterAsString( DLCManager::e_DLCParamType_DisplayName );
|
||||
skinOrigin = skinFile->getParameterAsString( DLCManager::e_DLCParamType_ThemeName );
|
||||
@@ -773,6 +777,17 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
pAdditionalModelParts = app.SetAdditionalSkinBoxes(skinFile->getSkinID(),m_vAdditionalSkinBoxes);
|
||||
}
|
||||
}
|
||||
|
||||
if(m_vSkinOffsets && m_vSkinOffsets->size()!=0)
|
||||
{
|
||||
// add the skin Offsets to the humanoid model, but only if we've not done this already
|
||||
|
||||
vector<SKIN_OFFSET *> *pSkinOffsets = app.GetSkinOffsets(skinFile->getSkinID());
|
||||
if(pSkinOffsets==nullptr)
|
||||
{
|
||||
pSkinOffsets = app.SetSkinOffsets(skinFile->getSkinID(),m_vSkinOffsets);
|
||||
}
|
||||
}
|
||||
|
||||
if(skinFile!=nullptr)
|
||||
{
|
||||
@@ -790,6 +805,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
wstring otherSkinPath = L"";
|
||||
wstring otherCapePath = L"";
|
||||
vector<SKIN_BOX *> *othervAdditionalSkinBoxes=nullptr;
|
||||
vector<SKIN_OFFSET *> *othervSkinOffsets=nullptr;
|
||||
wchar_t chars[256];
|
||||
|
||||
// turn off all displays
|
||||
@@ -844,6 +860,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
otherSkinPath = skinFile->getPath();
|
||||
otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape);
|
||||
othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
|
||||
othervSkinOffsets = skinFile->getOffsets();
|
||||
backupTexture = TN_MOB_CHAR;
|
||||
}
|
||||
else
|
||||
@@ -851,6 +868,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
otherSkinPath = L"";
|
||||
otherCapePath = L"";
|
||||
othervAdditionalSkinBoxes=nullptr;
|
||||
othervSkinOffsets=nullptr;
|
||||
switch(m_packIndex)
|
||||
{
|
||||
case SKIN_SELECT_PACK_DEFAULT:
|
||||
@@ -870,6 +888,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
otherSkinPath = skinFile->getPath();
|
||||
otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape);
|
||||
othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
|
||||
othervSkinOffsets = skinFile->getOffsets();
|
||||
backupTexture = TN_MOB_CHAR;
|
||||
}
|
||||
}
|
||||
@@ -887,6 +906,14 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
pAdditionalModelParts = app.SetAdditionalSkinBoxes(skinFile->getSkinID(),othervAdditionalSkinBoxes);
|
||||
}
|
||||
}
|
||||
if(othervSkinOffsets && othervSkinOffsets->size()!=0)
|
||||
{
|
||||
vector<SKIN_OFFSET *> *pSkinOffsets = app.GetSkinOffsets(skinFile->getSkinID());
|
||||
if(pSkinOffsets==nullptr)
|
||||
{
|
||||
pSkinOffsets = app.SetSkinOffsets(skinFile->getSkinID(),othervSkinOffsets);
|
||||
}
|
||||
}
|
||||
// 4J-PB - anim override needs set before SetTexture
|
||||
if(skinFile!=nullptr)
|
||||
{
|
||||
@@ -915,6 +942,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
otherSkinPath = skinFile->getPath();
|
||||
otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape);
|
||||
othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
|
||||
othervSkinOffsets = skinFile->getOffsets();
|
||||
backupTexture = TN_MOB_CHAR;
|
||||
}
|
||||
else
|
||||
@@ -922,6 +950,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
otherSkinPath = L"";
|
||||
otherCapePath = L"";
|
||||
othervAdditionalSkinBoxes=nullptr;
|
||||
othervSkinOffsets=nullptr;
|
||||
switch(m_packIndex)
|
||||
{
|
||||
case SKIN_SELECT_PACK_DEFAULT:
|
||||
@@ -941,6 +970,7 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
otherSkinPath = skinFile->getPath();
|
||||
otherCapePath = skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape);
|
||||
othervAdditionalSkinBoxes = skinFile->getAdditionalBoxes();
|
||||
othervSkinOffsets = skinFile->getOffsets();
|
||||
backupTexture = TN_MOB_CHAR;
|
||||
}
|
||||
}
|
||||
@@ -958,6 +988,14 @@ void UIScene_SkinSelectMenu::handleSkinIndexChanged()
|
||||
pAdditionalModelParts = app.SetAdditionalSkinBoxes(skinFile->getSkinID(),othervAdditionalSkinBoxes);
|
||||
}
|
||||
}
|
||||
if(othervSkinOffsets && othervSkinOffsets->size()!=0)
|
||||
{
|
||||
vector<SKIN_OFFSET *> *pSkinOffsets = app.GetSkinOffsets(skinFile->getSkinID());
|
||||
if(pSkinOffsets==nullptr)
|
||||
{
|
||||
pSkinOffsets = app.SetSkinOffsets(skinFile->getSkinID(),othervSkinOffsets);
|
||||
}
|
||||
}
|
||||
// 4J-PB - anim override needs set before SetTexture
|
||||
if(skinFile)
|
||||
{
|
||||
@@ -1004,34 +1042,34 @@ TEXTURE_NAME UIScene_SkinSelectMenu::getTextureId(int skinIndex)
|
||||
texture = TN_MOB_CHAR7;
|
||||
break;
|
||||
case eDefaultSkins_Skin8:
|
||||
texture = TN_MOB_CHAR8;
|
||||
texture = TN_MOB_ALEX;
|
||||
break;
|
||||
case eDefaultSkins_Skin9:
|
||||
texture = TN_MOB_CHAR9;
|
||||
texture = TN_MOB_ALEX1;
|
||||
break;
|
||||
case eDefaultSkins_Skin10:
|
||||
texture = TN_MOB_CHAR10;
|
||||
texture = TN_MOB_ALEX2;
|
||||
break;
|
||||
case eDefaultSkins_Skin11:
|
||||
texture = TN_MOB_CHAR11;
|
||||
texture = TN_MOB_ALEX3;
|
||||
break;
|
||||
case eDefaultSkins_Skin12:
|
||||
texture = TN_MOB_CHAR12;
|
||||
texture = TN_MOB_ALEX4;
|
||||
break;
|
||||
case eDefaultSkins_Skin13:
|
||||
texture = TN_MOB_CHAR13;
|
||||
texture = TN_MOB_ALEX5;
|
||||
break;
|
||||
case eDefaultSkins_Skin14:
|
||||
texture = TN_MOB_CHAR14;
|
||||
texture = TN_MOB_ALEX6;
|
||||
break;
|
||||
case eDefaultSkins_Skin15:
|
||||
texture = TN_MOB_CHAR15;
|
||||
texture = TN_MOB_ALEX7;
|
||||
break;
|
||||
case eDefaultSkins_Skin16:
|
||||
texture = TN_MOB_CHAR16;
|
||||
texture = TN_MOB_DEVALEX;
|
||||
break;
|
||||
case eDefaultSkins_Skin17:
|
||||
texture = TN_MOB_CHAR17;
|
||||
texture = TN_MOB_DEVSTEVE;
|
||||
break;
|
||||
};
|
||||
|
||||
|
||||
@@ -104,6 +104,7 @@ private:
|
||||
DWORD m_originalSkinId;
|
||||
wstring m_currentSkinPath, m_selectedSkinPath, m_selectedCapePath;
|
||||
vector<SKIN_BOX *> *m_vAdditionalSkinBoxes;
|
||||
vector<SKIN_OFFSET *> *m_vSkinOffsets;
|
||||
|
||||
bool m_bSlidingSkins, m_bAnimatingMove;
|
||||
ESkinSelectNavigation m_currentNavigation;
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |