diff --git a/.hgignore b/.hgignore index 83dadf1d..f842fecf 100644 --- a/.hgignore +++ b/.hgignore @@ -9,6 +9,6 @@ Release*/ Debug*/ ipch/ syntax: regexp -^MOULOpenSourceClientPlugin/Plasma20/tools/ ^MOULOpenSourceClientPlugin/Plasma20/test/ +^MOULOpenSourceClientPlugin/Plasma20/tools/ ^MOULOpenSourceClientPlugin/StaticSDKs/ diff --git a/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/AllClient/AllClient.sln b/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/AllClient/AllClient.sln index 19ca25f6..aa8d71bb 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/AllClient/AllClient.sln +++ b/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/AllClient/AllClient.sln @@ -135,6 +135,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClient", "..\plClient\plC {89316659-F4A9-4E92-8200-C36288A61B9B} = {89316659-F4A9-4E92-8200-C36288A61B9B} {1599855E-CC20-4C3A-A382-5290C40BE08E} = {1599855E-CC20-4C3A-A382-5290C40BE08E} {5C9C6E61-02D6-4BA6-A4F5-6E6AE440E477} = {5C9C6E61-02D6-4BA6-A4F5-6E6AE440E477} + {CA2D4E65-EA68-465F-843A-4AF75243B474} = {CA2D4E65-EA68-465F-843A-4AF75243B474} {8E44FB70-5EA0-4D33-B829-E4D16D7C11E3} = {8E44FB70-5EA0-4D33-B829-E4D16D7C11E3} {CA208971-6C77-47F6-AA4B-FB6ECC071132} = {CA208971-6C77-47F6-AA4B-FB6ECC071132} {7D83F872-F06C-4D42-A8F2-D77DC22C5981} = {7D83F872-F06C-4D42-A8F2-D77DC22C5981} @@ -500,6 +501,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plPageOptimizer", "..\plPag {1599855E-CC20-4C3A-A382-5290C40BE08E} = {1599855E-CC20-4C3A-A382-5290C40BE08E} {A10FCF60-7425-48D7-9153-CB9D8AD94C8F} = {A10FCF60-7425-48D7-9153-CB9D8AD94C8F} {5C9C6E61-02D6-4BA6-A4F5-6E6AE440E477} = {5C9C6E61-02D6-4BA6-A4F5-6E6AE440E477} + {CA2D4E65-EA68-465F-843A-4AF75243B474} = {CA2D4E65-EA68-465F-843A-4AF75243B474} {8E44FB70-5EA0-4D33-B829-E4D16D7C11E3} = {8E44FB70-5EA0-4D33-B829-E4D16D7C11E3} {CA208971-6C77-47F6-AA4B-FB6ECC071132} = {CA208971-6C77-47F6-AA4B-FB6ECC071132} {7D83F872-F06C-4D42-A8F2-D77DC22C5981} = {7D83F872-F06C-4D42-A8F2-D77DC22C5981} @@ -596,6 +598,39 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClientPatcher", "..\plCli ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plClipboard", "..\..\PubUtilLib\plClipboard\plClipboard.vcproj", "{CA2D4E65-EA68-465F-843A-4AF75243B474}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plFileEncrypt", "..\plFileEncrypt\plFileEncrypt.vcproj", "{728CE37F-B032-45D1-B3B5-EF94D4B8A919}" + ProjectSection(ProjectDependencies) = postProject + {677C542F-9027-418D-9D9E-2D526E9FCD09} = {677C542F-9027-418D-9D9E-2D526E9FCD09} + {8444A94C-FD1E-47D2-B978-B42ED198F234} = {8444A94C-FD1E-47D2-B978-B42ED198F234} + {4054C94F-866A-4AA7-874B-2AFCFEF23A71} = {4054C94F-866A-4AA7-874B-2AFCFEF23A71} + {89316659-F4A9-4E92-8200-C36288A61B9B} = {89316659-F4A9-4E92-8200-C36288A61B9B} + {CA208971-6C77-47F6-AA4B-FB6ECC071132} = {CA208971-6C77-47F6-AA4B-FB6ECC071132} + {032566E8-A751-4863-89E3-CEC33703B3C1} = {032566E8-A751-4863-89E3-CEC33703B3C1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plFileSecure", "..\plFileSecure\plFileSecure.vcproj", "{E5F40B98-A55E-486D-9A93-8008BF153495}" + ProjectSection(ProjectDependencies) = postProject + {677C542F-9027-418D-9D9E-2D526E9FCD09} = {677C542F-9027-418D-9D9E-2D526E9FCD09} + {8444A94C-FD1E-47D2-B978-B42ED198F234} = {8444A94C-FD1E-47D2-B978-B42ED198F234} + {4054C94F-866A-4AA7-874B-2AFCFEF23A71} = {4054C94F-866A-4AA7-874B-2AFCFEF23A71} + {89316659-F4A9-4E92-8200-C36288A61B9B} = {89316659-F4A9-4E92-8200-C36288A61B9B} + {CA208971-6C77-47F6-AA4B-FB6ECC071132} = {CA208971-6C77-47F6-AA4B-FB6ECC071132} + {032566E8-A751-4863-89E3-CEC33703B3C1} = {032566E8-A751-4863-89E3-CEC33703B3C1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plPythonPack", "..\plPythonPack\plPythonPack.vcproj", "{84868043-5563-435A-A176-76A059653D5C}" + ProjectSection(ProjectDependencies) = postProject + {677C542F-9027-418D-9D9E-2D526E9FCD09} = {677C542F-9027-418D-9D9E-2D526E9FCD09} + {8444A94C-FD1E-47D2-B978-B42ED198F234} = {8444A94C-FD1E-47D2-B978-B42ED198F234} + {4054C94F-866A-4AA7-874B-2AFCFEF23A71} = {4054C94F-866A-4AA7-874B-2AFCFEF23A71} + {A32201A8-0255-4863-97B8-4A569C18C624} = {A32201A8-0255-4863-97B8-4A569C18C624} + {A47A0DF4-F080-42B4-BC3B-865A02387089} = {A47A0DF4-F080-42B4-BC3B-865A02387089} + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -605,8 +640,6 @@ Global Release_Patcher = Release_Patcher Release_Server = Release_Server EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {0736D624-C5F6-4B44-96FC-B27C2841D2F9}.Debug.ActiveCfg = Debug|Win32 {0736D624-C5F6-4B44-96FC-B27C2841D2F9}.Debug.Build.0 = Debug|Win32 @@ -1796,6 +1829,54 @@ Global {F1DC998F-6B75-48FF-8446-D59AF448678E}.Release_Patcher.Build.0 = Release_Patcher|Win32 {F1DC998F-6B75-48FF-8446-D59AF448678E}.Release_Server.ActiveCfg = Release_Patcher|Win32 {F1DC998F-6B75-48FF-8446-D59AF448678E}.Release_Server.Build.0 = Release_Patcher|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Debug.ActiveCfg = Debug|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Debug.Build.0 = Debug|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Debug_Patcher.ActiveCfg = Debug|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Debug_Patcher.Build.0 = Debug|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Debug_Server.ActiveCfg = Debug|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Debug_Server.Build.0 = Debug|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Release.ActiveCfg = Release|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Release.Build.0 = Release|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Release_Patcher.ActiveCfg = Release|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Release_Patcher.Build.0 = Release|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Release_Server.ActiveCfg = Release|Win32 + {CA2D4E65-EA68-465F-843A-4AF75243B474}.Release_Server.Build.0 = Release|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Debug.ActiveCfg = Debug|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Debug.Build.0 = Debug|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Debug_Patcher.ActiveCfg = Debug|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Debug_Patcher.Build.0 = Debug|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Debug_Server.ActiveCfg = Debug|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Debug_Server.Build.0 = Debug|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Release.ActiveCfg = Release|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Release.Build.0 = Release|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Release_Patcher.ActiveCfg = Release|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Release_Patcher.Build.0 = Release|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Release_Server.ActiveCfg = Release|Win32 + {728CE37F-B032-45D1-B3B5-EF94D4B8A919}.Release_Server.Build.0 = Release|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Debug.ActiveCfg = Debug|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Debug.Build.0 = Debug|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Debug_Patcher.ActiveCfg = Debug|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Debug_Patcher.Build.0 = Debug|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Debug_Server.ActiveCfg = Debug|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Debug_Server.Build.0 = Debug|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Release.ActiveCfg = Release|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Release.Build.0 = Release|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Release_Patcher.ActiveCfg = Release|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Release_Patcher.Build.0 = Release|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Release_Server.ActiveCfg = Release|Win32 + {E5F40B98-A55E-486D-9A93-8008BF153495}.Release_Server.Build.0 = Release|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Debug.ActiveCfg = Debug|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Debug.Build.0 = Debug|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Debug_Patcher.ActiveCfg = Debug|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Debug_Patcher.Build.0 = Debug|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Debug_Server.ActiveCfg = Debug|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Debug_Server.Build.0 = Debug|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Release.ActiveCfg = Release|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Release.Build.0 = Release|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Release_Patcher.ActiveCfg = Release|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Release_Patcher.Build.0 = Release|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Release_Server.ActiveCfg = Release|Win32 + {84868043-5563-435A-A176-76A059653D5C}.Release_Server.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/plFileEncrypt/plFileEncrypt.vcproj b/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/plFileEncrypt/plFileEncrypt.vcproj index 582630e9..62e079f8 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/plFileEncrypt/plFileEncrypt.vcproj +++ b/MOULOpenSourceClientPlugin/Plasma20/MsDevProjects/Plasma/Apps/plFileEncrypt/plFileEncrypt.vcproj @@ -3,6 +3,7 @@ ProjectType="Visual C++" Version="7.10" Name="plFileEncrypt" + ProjectGUID="{728CE37F-B032-45D1-B3B5-EF94D4B8A919}" SccProjectName="" SccLocalPath=""> @@ -51,7 +52,9 @@ TypeLibraryName=".\Debug/plFileEncrypt.tlb" HeaderFileName=""/> + Name="VCPostBuildEventTool" + Description="Copy to Tools directory" + CommandLine="xcopy /Y "$(TargetPath)" ..\..\..\..\tools\"/> + Name="VCPostBuildEventTool" + Description="Copy to Tools directory" + CommandLine="xcopy /Y "$(TargetPath)" ..\..\..\..\tools\"/> + Name="VCPostBuildEventTool" + Description="Copy to Tools directory" + CommandLine="xcopy /Y "$(TargetPath)" ..\..\..\..\tools\"/> + Name="VCPostBuildEventTool" + Description="Copy to Tools directory" + CommandLine="xcopy /Y "$(TargetPath)" ..\..\..\..\tools\"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/plClient.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/plClient.cpp index 396bca6d..7307e124 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/plClient.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/plClient.cpp @@ -1635,7 +1635,7 @@ void plClient::ShutdownDLLs() hsBool plClient::MainLoop() { -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) if (PythonInterface::UsePythonDebugger()) { PythonInterface::PythonDebugger()->Update(); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.cpp index 8c7c4353..64d6c18e 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.cpp @@ -65,14 +65,14 @@ hsQuat::hsQuat(hsScalar rad, const hsVector3* axis) fZ = axis->fZ*s; } -hsQuat hsQuat::Inverse() +hsQuat hsQuat::Inverse() const { hsQuat q2 = Conjugate(); hsScalar msInv = 1.0f/q2.MagnitudeSquared(); return (q2 * msInv); } -hsPoint3 hsQuat::Rotate(const hsScalarTriple* v) +hsPoint3 hsQuat::Rotate(const hsScalarTriple* v) const { hsQuat qInv = Inverse(); hsQuat qVec(v->fX, v->fY, v->fZ, 0); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.h index 8fe5afda..7d4cb54f 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/CoreLib/hsQuat.h @@ -71,7 +71,7 @@ public: { fX = X; fY = Y; fZ = Z; fW = W; } void GetAngleAxis(hsScalar *rad, hsVector3 *axis) const; void SetAngleAxis(const hsScalar rad, const hsVector3 &axis); - hsPoint3 Rotate(const hsScalarTriple* v); + hsPoint3 Rotate(const hsScalarTriple* v) const; // Access operators hsScalar& operator[](int i) { return (&fX)[i]; } @@ -94,7 +94,7 @@ public: hsScalar MagnitudeSquared(); hsQuat Conjugate() const { return hsQuat(-fX,-fY,-fZ,fW); } - hsQuat Inverse(); + hsQuat Inverse() const; // Binary operators hsQuat operator-(const hsQuat&) const; hsQuat operator+(const hsQuat&) const; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfCamera/plCameraBrain.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfCamera/plCameraBrain.cpp index 8f79f14d..8bbfb3f9 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfCamera/plCameraBrain.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfCamera/plCameraBrain.cpp @@ -71,13 +71,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "../plAvatar/plArmatureMod.h" #include "../plAvatar/plAvBrainHuman.h" #include "../plNetClient/plNetClientMgr.h" -//#define aspect_HDTV // maybe someday we'll be on the xbox... - -#ifdef aspect_HDTV -#define FOV_RATIO 1.78 -#else -#define FOV_RATIO 1.33333333 -#endif hsBool plCameraBrain1_FirstPerson::fDontFade = false; hsScalar plCameraBrain1::fFallAccel = 20.0f; @@ -257,7 +250,7 @@ void plCameraBrain1::IAnimateFOV(double time) dH = fFOVGoal; } - fCamera->SetFOVw( (hsScalar)(dH * FOV_RATIO) ); + fCamera->SetFOVw( (hsScalar)(dH * plVirtualCam1::GetAspectRatio()) ); fCamera->SetFOVh( dH ); } diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommands.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommands.cpp index 4ec123a1..35cd6304 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommands.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommands.cpp @@ -7040,6 +7040,7 @@ PF_CONSOLE_CMD( Python, // Group name } #ifndef LIMIT_CONSOLE_COMMANDS +#ifdef HAVE_CYPYTHONIDE PF_CONSOLE_CMD( Python, UsePythonDebugger, "", @@ -7047,6 +7048,7 @@ PF_CONSOLE_CMD( Python, { PythonInterface::UsePythonDebugger(true); } +#endif #include "../pfMessage/pfBackdoorMsg.h" diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIEditBoxMod.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIEditBoxMod.cpp index dcddf468..10083906 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIEditBoxMod.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIEditBoxMod.cpp @@ -61,6 +61,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "plgDispatch.h" #include "hsResMgr.h" #include "../pnInputCore/plKeyMap.h" +#include "../plClipboard/plClipboard.h" #include @@ -501,6 +502,34 @@ hsBool pfGUIEditBoxMod::HandleKeyEvent( pfGameGUIMgr::EventType event, plKeyDef DoSomething(); // Query WasEscaped() to see if it was escape vs enter return true; } + else if (modifiers & pfGameGUIMgr::kCtrlDown) + { + if (key == KEY_C) + { + plClipboard::GetInstance().SetClipboardText(fBuffer); + } + else if (key == KEY_V) + { + wchar_t* contents = plClipboard::GetInstance().GetClipboardText(); + if (contents != nil) + { + size_t len = wcslen(contents); + if (len > 0) + { + wchar_t* insertTarget = fBuffer + fCursorPos; + size_t bufferTailLen = wcslen(insertTarget) + 1; //include terminating \0 + if (fCursorPos + len + bufferTailLen < fBufferSize) + { + memmove(insertTarget + len, insertTarget, bufferTailLen * sizeof(wchar_t)); + memcpy(insertTarget, contents, len * sizeof(wchar_t)); + fCursorPos += len; + HandleExtendedEvent( kValueChanging ); + } + } + delete contents; + } + } + } else { fIgnoreNextKey = false; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIMultiLineEditCtrl.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIMultiLineEditCtrl.cpp index 72e7863d..9d5df62a 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIMultiLineEditCtrl.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfGameGUIMgr/pfGUIMultiLineEditCtrl.cpp @@ -60,6 +60,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "../plGImage/plDynamicTextMap.h" #include "plgDispatch.h" #include "hsResMgr.h" +#include "../plClipboard/plClipboard.h" //// Tiny Helper Class /////////////////////////////////////////////////////// @@ -1172,9 +1173,6 @@ hsBool pfGUIMultiLineEditCtrl::HandleKeyEvent( pfGameGUIMgr::EventType event, pl if ((fPrevCtrl || fNextCtrl) && (fLineStarts.GetCount() <= GetFirstVisibleLine())) return true; // we're ignoring if we can't actually edit our visible frame (and we're linked) - if (modifiers & pfGameGUIMgr::kCtrlDown) - return true; // we're ignoring ctrl key events - if( event == pfGameGUIMgr::kKeyDown || event == pfGameGUIMgr::kKeyRepeat ) { // Use arrow keys to do our dirty work @@ -1219,6 +1217,22 @@ hsBool pfGUIMultiLineEditCtrl::HandleKeyEvent( pfGameGUIMgr::EventType event, pl // fEscapedFlag = true; DoSomething(); // Query WasEscaped() to see if it was escape vs enter } + else if (modifiers & pfGameGUIMgr::kCtrlDown) + { + if (key == KEY_C) + { + plClipboard::GetInstance().SetClipboardText(fBuffer.AcquireArray()); + } + else if (key == KEY_V) + { + wchar_t* contents = plClipboard::GetInstance().GetClipboardText(); + if (contents != nil) + { + InsertString(contents); + delete contents; + } + } + } else { fIgnoreNextKey = false; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp index 02aa1f9e..beca03b2 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp @@ -649,25 +649,25 @@ UInt32 cyMisc::ConvertGMTtoDni(UInt32 gtime) plUnifiedTime utime = plUnifiedTime(); utime.SetSecs(dtime); // check for daylight savings time in New Mexico and adjust - if ( utime.GetMonth() >= 4 && utime.GetMonth() < 11 ) + if ( utime.GetMonth() >= 3 && utime.GetMonth() <= 11 ) { plUnifiedTime dstStart = plUnifiedTime(); - dstStart.SetGMTime(utime.GetYear(),4,1,2,0,0); - // find first Sunday after 4/1 (first sunday of April) + dstStart.SetGMTime(utime.GetYear(),3,8,2,0,0); + // find first Sunday after (including) 3/8 (second Sunday of March) UInt32 days_to_go = 7 - dstStart.GetDayOfWeek(); if (days_to_go == 7) days_to_go = 0; UInt32 dstStartSecs = dstStart.GetSecs() + days_to_go * kOneDay; plUnifiedTime dstEnd = plUnifiedTime(); - dstEnd.SetGMTime(utime.GetYear(),10,25,1,0,0); - // find first sunday after 10/25 (last sunday of Oct.) + dstEnd.SetGMTime(utime.GetYear(),11,1,1,0,0); + // find first sunday after (including) 11/1 (first Sunday of November) days_to_go = 7 - dstEnd.GetDayOfWeek(); if (days_to_go == 7) days_to_go = 0; UInt32 dstEndSecs = dstEnd.GetSecs() + days_to_go * kOneDay; - if ( dtime > dstStartSecs && dtime < dstEndSecs ) + if ( dtime >= dstStartSecs && dtime < dstEndSecs ) // add hour for daylight savings time dtime += kOneHour; } diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.cpp index b29e4558..ecc19344 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.cpp @@ -196,7 +196,7 @@ PyObject* PythonInterface::dbgOut = nil; PyObject* PythonInterface::dbgSlice = nil; // time slice function for the debug window plStatusLog* PythonInterface::dbgLog = nil; // output logfile -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) bool PythonInterface::usePythonDebugger = false; plCyDebServer PythonInterface::debugServer; bool PythonInterface::requestedExit = false; @@ -205,7 +205,7 @@ bool PythonInterface::requestedExit = false; // stupid Windows.h and who started including that! #undef DrawText -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) // Special includes for debugging #include @@ -856,7 +856,7 @@ void PythonInterface::initPython() Py_SetProgramName("plasma"); Py_Initialize(); -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) if (usePythonDebugger) { debugServer.SetCallbackClass(&debServerCallback); @@ -1528,7 +1528,7 @@ void PythonInterface::finiPython() initialized--; if ( initialized < 1 && Py_IsInitialized() != 0 && IsInShutdown ) { -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) if (usePythonDebugger) debugServer.Disconnect(); #endif @@ -1675,7 +1675,7 @@ int PythonInterface::getOutputAndReset(std::string *output) pyOutputRedirector::ClearData(stdOut); // tell python debugger -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) if (UsePythonDebugger()) PythonInterface::PythonDebugger()->StdOut(strVal); #endif diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.h index 6114856b..f34ead55 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/cyPythonInterface.h @@ -50,7 +50,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "hsStlUtils.h" #include -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) #include "../../Apps/CyPythonIDE/plCyDebug/plCyDebServer.h" #endif @@ -82,7 +82,7 @@ private: static PyObject* dbgSlice; // time slice function for the debug window static plStatusLog* dbgLog; -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) static bool usePythonDebugger; static bool requestedExit; static plCyDebServer debugServer; @@ -228,7 +228,7 @@ public: // static pyKey* GetpyKeyFromPython(PyObject* pkey); -#ifndef PLASMA_EXTERNAL_RELEASE +#if defined(HAVE_CYPYTHONIDE) && !defined(PLASMA_EXTERNAL_RELEASE) static bool UsePythonDebugger() { return usePythonDebugger; } static void UsePythonDebugger(bool use) { usePythonDebugger = use; } diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/plPythonFileMod.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/plPythonFileMod.cpp index 5e008366..0a0c86a3 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/plPythonFileMod.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/plPythonFileMod.cpp @@ -1363,12 +1363,19 @@ hsBool plPythonFileMod::MsgReceive(plMessage* msg) // depending on the data type create the data switch ( eventData->fDataType ) { - case proEventData::kNumber: - PyList_SetItem(event, 3, PyFloat_FromDouble(eventData->fNumber)); + case proEventData::kFloat: + PyList_SetItem(event, 3, PyFloat_FromDouble(eventData->fNumber.f)); break; case proEventData::kKey: PyList_SetItem(event, 3, pyKey::New(eventData->fKey)); break; + case proEventData::kInt: + PyList_SetItem(event, 3, PyInt_FromLong(eventData->fNumber.i)); + break; + default: + Py_XINCREF(Py_None); + PyList_SetItem(event, 3, Py_None); + break; } // add this event record to the main event list (lists within a list) PyList_Append(levents, event); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.cpp index dc7ab6fa..096d67de 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.cpp @@ -151,6 +151,16 @@ void pyNotify::AddVarNumber(const char* name, hsScalar number) fBuildMsg.AddVariableEvent(name,number); } +void pyNotify::AddVarNumber(const char* name, Int32 number) +{ + fBuildMsg.AddVariableEvent(name,number); +} + +void pyNotify::AddVarNull(const char* name) +{ + fBuildMsg.AddVariableEvent(name); +} + void pyNotify::AddVarKey(const char* name, pyKey* key) { fBuildMsg.AddVariableEvent(name, key ? key->getKey() : plKey() ); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.h index 5fca6ffa..c5827e72 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotify.h @@ -100,6 +100,8 @@ public: virtual void AddPickEvent(hsBool enabled, pyKey* other, pyKey* self, pyPoint3 hitPoint); virtual void AddControlKeyEvent( Int32 key, hsBool down ); virtual void AddVarNumber(const char* name, hsScalar number); + virtual void AddVarNumber(const char* name, Int32 number); + virtual void AddVarNull(const char* name); virtual void AddVarKey(const char* name, pyKey* key); virtual void AddFacingEvent( hsBool enabled, pyKey* other, pyKey* self, hsScalar dot); virtual void AddContainerEvent( hsBool entering, pyKey* container, pyKey* contained); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotifyGlue.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotifyGlue.cpp index 13eb916f..f7a46845 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotifyGlue.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyNotifyGlue.cpp @@ -194,18 +194,86 @@ PYTHON_METHOD_DEFINITION(ptNotify, addControlKeyEvent, args) } PYTHON_METHOD_DEFINITION(ptNotify, addVarNumber, args) +{ + char* name; + PyObject* number = NULL; + if (!PyArg_ParseTuple(args, "s|O", &name, &number)) + { + PyErr_SetString(PyExc_TypeError, "addVarNumber expects a string and optional number"); + PYTHON_RETURN_ERROR; + } + + if (number == NULL || number == Py_None) + self->fThis->AddVarNull(name); + else if (PyInt_Check(number)) + self->fThis->AddVarNumber(name, PyInt_AsLong(number)); + else if (PyLong_Check(number)) + { + // try as int first + Int32 i = (Int32)PyLong_AsLong(number); + if (!PyErr_Occurred()) + { + self->fThis->AddVarNumber(name, i); + } + else + { + // OverflowError, try float + PyErr_Clear(); + self->fThis->AddVarNumber(name, (float)PyLong_AsDouble(number)); + } + } + else if (PyNumber_Check(number)) + { + PyObject* f = PyNumber_Float(number); + self->fThis->AddVarNumber(name, (float)PyFloat_AsDouble(f)); + Py_DECREF(f); + } + else + { + PyErr_SetString(PyExc_TypeError, "addVarNumber expects a string and optional number"); + PYTHON_RETURN_ERROR; + } + PYTHON_RETURN_NONE; +} + +PYTHON_METHOD_DEFINITION(ptNotify, addVarFloat, args) { char* name; float number; if (!PyArg_ParseTuple(args, "sf", &name, &number)) { - PyErr_SetString(PyExc_TypeError, "addVarNumber expects a string and a float"); + PyErr_SetString(PyExc_TypeError, "addVarFloat expects a string and a float"); PYTHON_RETURN_ERROR; } self->fThis->AddVarNumber(name, number); PYTHON_RETURN_NONE; } +PYTHON_METHOD_DEFINITION(ptNotify, addVarInt, args) +{ + char* name; + Int32 number; + if (!PyArg_ParseTuple(args, "sl", &name, &number)) + { + PyErr_SetString(PyExc_TypeError, "addVarInt expects a string and a integer"); + PYTHON_RETURN_ERROR; + } + self->fThis->AddVarNumber(name, number); + PYTHON_RETURN_NONE; +} + +PYTHON_METHOD_DEFINITION(ptNotify, addVarNull, args) +{ + char* name; + if (!PyArg_ParseTuple(args, "s", &name)) + { + PyErr_SetString(PyExc_TypeError, "addVarNull expects a string"); + PYTHON_RETURN_ERROR; + } + self->fThis->AddVarNull(name); + PYTHON_RETURN_NONE; +} + PYTHON_METHOD_DEFINITION(ptNotify, addVarKey, args) { char* name; @@ -337,6 +405,13 @@ PYTHON_START_METHODS_TABLE(ptNotify) PYTHON_METHOD(ptNotify, addPickEvent, "Params: enabledFlag,pickerKey,pickeeKey,hitPoint\nAdd a pick event record to the Notify message"), PYTHON_METHOD(ptNotify, addControlKeyEvent, "Params: keynumber,downFlag\nAdd a keyboard event record to the Notify message"), PYTHON_METHOD(ptNotify, addVarNumber, "Params: name,number\nAdd a number variable event record to the Notify message\n" + "Method will try to pick appropriate variable type\n" + "This event record is used to pass a number variable to another python program"), + PYTHON_METHOD(ptNotify, addVarFloat, "Params: name,number\nAdd a float variable event record to the Notify message\n" + "This event record is used to pass a number variable to another python program"), + PYTHON_METHOD(ptNotify, addVarInt, "Params: name,number\nAdd a int variable event record to the Notify message\n" + "This event record is used to pass a number variable to another python program"), + PYTHON_METHOD(ptNotify, addVarNull, "Params: name,number\nAdd a null (no data) variable event record to the Notify message\n" "This event record is used to pass a number variable to another python program"), PYTHON_METHOD(ptNotify, addVarKey, "Params: name,key\nAdd a ptKey variable event record to the Notify message\n" "This event record is used to pass a ptKey variable to another python program"), @@ -402,8 +477,10 @@ void pyNotify::AddPlasmaConstantsClasses(PyObject *m) PYTHON_ENUM_END(m, PtEventType); PYTHON_ENUM_START(PtNotifyDataType); - PYTHON_ENUM_ELEMENT(PtNotifyDataType, kNumber, proEventData::kNumber); - PYTHON_ENUM_ELEMENT(PtNotifyDataType, kKey, proEventData::kKey); + PYTHON_ENUM_ELEMENT(PtNotifyDataType, kFloat, proEventData::kFloat); + PYTHON_ENUM_ELEMENT(PtNotifyDataType, kInt, proEventData::kInt); + PYTHON_ENUM_ELEMENT(PtNotifyDataType, kNull, proEventData::kNull); + PYTHON_ENUM_ELEMENT(PtNotifyDataType, kKey, proEventData::kKey); PYTHON_ENUM_END(m, PtNotifyDataType); PYTHON_ENUM_START(PtMultiStageEventType); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.cpp index 40f560ee..d88b3b7b 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.cpp @@ -173,8 +173,14 @@ void plNotifyMsg::AddEvent( proEventData* ed ) proVariableEventData *evt = (proVariableEventData *)ed; switch (evt->fDataType) { - case proEventData::kNumber: - AddVariableEvent(evt->fName, evt->fNumber); + case proEventData::kFloat: + AddVariableEvent(evt->fName, evt->fNumber.f); + break; + case proEventData::kInt: + AddVariableEvent(evt->fName, evt->fNumber.i); + break; + case proEventData::kNull: + AddVariableEvent(evt->fName); break; case proEventData::kKey: AddVariableEvent(evt->fName, evt->fKey); @@ -587,10 +593,43 @@ void plNotifyMsg::AddVariableEvent( const char* name, hsScalar number ) // create the control key event record proVariableEventData* pED = TRACKED_NEW proVariableEventData; pED->fName = hsStrcpy(nil,name); -// pED->fName = (char*)name; - pED->fDataType = proEventData::kNumber; - pED->fNumber = number; - fEvents.Append(pED); // then add it to the list of event records + pED->fDataType = proEventData::kFloat; + pED->fNumber.f = number; + fEvents.Append(pED); // then add it to the list of event records +} + +///////////////////////////////////////////////////////////////////////////// +// +// Function : AddVariableEvent +// PARAMETERS : name - name of the variable +// : number - the value of the variable as a number +// +// PURPOSE : Add a variable event record to this notify message +// +void plNotifyMsg::AddVariableEvent( const char* name, Int32 number ) +{ + // create the control key event record + proVariableEventData* pED = TRACKED_NEW proVariableEventData; + pED->fName = hsStrcpy(nil,name); + pED->fDataType = proEventData::kInt; + pED->fNumber.i = number; + fEvents.Append(pED); // then add it to the list of event records +} + +///////////////////////////////////////////////////////////////////////////// +// +// Function : AddVariableEvent +// PARAMETERS : name - name of the variable +// +// PURPOSE : Add a variable event record to this notify message +// +void plNotifyMsg::AddVariableEvent( const char* name) +{ + // create the control key event record + proVariableEventData* pED = TRACKED_NEW proVariableEventData; + pED->fName = hsStrcpy(nil,name); + pED->fDataType = proEventData::kNull; + fEvents.Append(pED); // then add it to the list of event records } @@ -1284,11 +1323,39 @@ void proVariableEventData::IDestruct() fName = nil; } +void proVariableEventData::IReadNumber(hsStream * stream) { + switch (fDataType) { + case kFloat: + fNumber.f = stream->ReadSwapScalar(); + break; + case kInt: + fNumber.i = stream->ReadSwap32(); + break; + default: + stream->ReadSwap32(); //ignore + break; + } +} + +void proVariableEventData::IWriteNumber(hsStream * stream) { + switch (fDataType) { + case kFloat: + stream->WriteSwapScalar(fNumber.f); + break; + case kInt: + stream->WriteSwap32(fNumber.i); + break; + default: + stream->WriteSwap32(0); + break; + } +} + void proVariableEventData::IRead(hsStream* stream, hsResMgr* mgr) { fName = stream->ReadSafeString(); fDataType = stream->ReadSwap32(); - fNumber = stream->ReadSwapScalar(); + IReadNumber(stream); fKey = mgr->ReadKey(stream); } @@ -1296,7 +1363,7 @@ void proVariableEventData::IWrite(hsStream* stream, hsResMgr* mgr) { stream->WriteSafeString(fName); stream->WriteSwap32(fDataType); - stream->WriteSwapScalar(fNumber); + IWriteNumber(stream); mgr->WriteKey(stream, fKey); } @@ -1318,7 +1385,7 @@ void proVariableEventData::IReadVersion(hsStream* s, hsResMgr* mgr) if (contentFlags.IsBitSet(kProVariableDataType)) fDataType = s->ReadSwap32(); if (contentFlags.IsBitSet(kProVariableNumber)) - fNumber = s->ReadSwapScalar(); + IReadNumber(s); if (contentFlags.IsBitSet(kProVariableKey)) fKey = mgr->ReadKey(s); } @@ -1337,7 +1404,7 @@ void proVariableEventData::IWriteVersion(hsStream* s, hsResMgr* mgr) // kProVariableDataType s->WriteSwap32(fDataType); // kProVariableNumber - s->WriteSwapScalar(fNumber); + IWriteNumber(s); // kProVariableKey mgr->WriteKey(s, fKey); } diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.h index 00d77f28..747ac4ab 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnMessage/plNotifyMsg.h @@ -87,8 +87,10 @@ public: enum dataType { - kNumber=1, + kFloat=1, kKey, + kInt, + kNull, kNotta }; @@ -181,7 +183,10 @@ proEventType(Variable) Int32 fDataType; // type of data // Can't be a union, sadly, but it isn't that much of a waste of space... - hsScalar fNumber; // if its a number + union { + hsScalar f; + Int32 i; + } fNumber; // if its a number plKey fKey; // if its a plKey (pointer to something) @@ -193,6 +198,9 @@ protected: virtual void IReadVersion(hsStream* s, hsResMgr* mgr); virtual void IWriteVersion(hsStream* s, hsResMgr* mgr); + + virtual void IReadNumber(hsStream * stream); + virtual void IWriteNumber(hsStream * stream); }; proEventType(Facing) @@ -368,6 +376,8 @@ public: void AddPickEvent( const plKey &other, const plKey& self, hsBool enabled, hsPoint3 hitPoint ); void AddControlKeyEvent( Int32 key, hsBool down ); void AddVariableEvent( const char* name, hsScalar number ); + void AddVariableEvent( const char* name, Int32 number ); + void AddVariableEvent( const char* name ); void AddVariableEvent( const char *name, const plKey &key); void AddFacingEvent( const plKey &other, const plKey &self, hsScalar dot, hsBool enabled); void AddContainerEvent( const plKey &container, const plKey &contained, hsBool entering); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnProduct/Private/pnPrBuildId.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnProduct/Private/pnPrBuildId.cpp index efb80dab..03351963 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnProduct/Private/pnPrBuildId.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/NucleusLib/pnProduct/Private/pnPrBuildId.cpp @@ -57,7 +57,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com // This line must NEVER be modified manually; it is automatically updated // by the build server. -#define BUILD_ID 902 +#define BUILD_ID 906 COMPILER_ASSERT(BUILD_ID != 0); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp index 7e90c022..c192f3b9 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp @@ -133,8 +133,12 @@ void plWalkingController::RecalcVelocity(double timeNow, double timePrev, hsBool if (fController && !fWalkingStrategy->IsOnGround()) { + // PhysX Hack + // LinearVelocity is always (0,0,0) outside the PhysController fImpactTime = fWalkingStrategy->GetAirTime(); - fImpactVelocity = fController->GetLinearVelocity(); + fImpactVelocity = fController->GetAchievedLinearVelocity(); + // convert orientation from subworld to avatar-local coordinates + fImpactVelocity = (hsVector3)fController->GetLocalRotation().Rotate(&fImpactVelocity); fClearImpact = false; } else diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h index 4feae67a..bc96f697 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h @@ -147,6 +147,7 @@ public: virtual void CheckAndHandleAnyStateChanges(); virtual void UpdateSubstepNonPhysical(); virtual const hsPoint3& GetLocalPosition()=0; + const hsQuat& GetLocalRotation() { return fLocalRotation; } virtual void MoveActorToSim(); virtual void OverrideAchievedVelocity(hsVector3 newAchievedVel) diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp new file mode 100644 index 00000000..c00b06c2 --- /dev/null +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp @@ -0,0 +1,113 @@ +/*==LICENSE==* + +CyanWorlds.com Engine - MMOG client, server and tools +Copyright (C) 2011 Cyan Worlds, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Additional permissions under GNU GPL version 3 section 7 + +If you modify this Program, or any covered work, by linking or +combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, +NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent +JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK +(or a modified version of those libraries), +containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, +PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG +JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the +licensors of this Program grant you additional +permission to convey the resulting work. Corresponding Source for a +non-source form of such a combination shall include the source code for +the parts of OpenSSL and IJG JPEG Library used as well as that of the covered +work. + +You can contact Cyan Worlds, Inc. by email legal@cyan.com +or by snail mail at: +Cyan Worlds, Inc. +14617 N Newport Hwy +Mead, WA 99021 + +*==LICENSE==*/ + +#include "HeadSpin.h" +#include "plClipboard.h" + +plClipboard& plClipboard::GetInstance() +{ + static plClipboard theInstance; + return theInstance; +} + +bool plClipboard::IsTextInClipboard() +{ +#ifdef HS_BUILD_FOR_WIN32 + return ::IsClipboardFormatAvailable(CF_UNICODETEXT); +#else + return false; +#endif +} + +wchar_t* plClipboard::GetClipboardText() +{ + if (!IsTextInClipboard()) + return nil; + +#ifdef HS_BUILD_FOR_WIN32 + if (!::OpenClipboard(NULL)) + return nil; + + HANDLE clipboardData = ::GetClipboardData(CF_UNICODETEXT); + size_t size = ::GlobalSize(clipboardData) / sizeof(wchar_t); + wchar_t* clipboardDataPtr = (wchar_t*)::GlobalLock(clipboardData); + + wchar_t* result = new wchar_t[size]; + wcsncpy(result, clipboardDataPtr, size); + + ::GlobalUnlock(clipboardData); + ::CloseClipboard(); + + return result; +#else + return plString::Null; +#endif +} + +void plClipboard::SetClipboardText(const wchar_t* text) +{ + if (text == nil) + return; +#ifdef HS_BUILD_FOR_WIN32 + size_t len = wcslen(text); + + if (len == 0) + return; + + HGLOBAL copy = ::GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(wchar_t)); + if (copy == NULL) + return; + + if (!::OpenClipboard(NULL)) + return; + + ::EmptyClipboard(); + + wchar_t* target = (wchar_t*)::GlobalLock(copy); + wcsncpy(target, text, len + 1); + ::GlobalUnlock(copy); + + ::SetClipboardData(CF_UNICODETEXT, copy); + ::CloseClipboard(); +#endif +} + diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.h new file mode 100644 index 00000000..410a6fa0 --- /dev/null +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.h @@ -0,0 +1,62 @@ +/*==LICENSE==* + +CyanWorlds.com Engine - MMOG client, server and tools +Copyright (C) 2011 Cyan Worlds, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Additional permissions under GNU GPL version 3 section 7 + +If you modify this Program, or any covered work, by linking or +combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, +NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent +JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK +(or a modified version of those libraries), +containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, +PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG +JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the +licensors of this Program grant you additional +permission to convey the resulting work. Corresponding Source for a +non-source form of such a combination shall include the source code for +the parts of OpenSSL and IJG JPEG Library used as well as that of the covered +work. + +You can contact Cyan Worlds, Inc. by email legal@cyan.com + or by snail mail at: + Cyan Worlds, Inc. + 14617 N Newport Hwy + Mead, WA 99021 + +*==LICENSE==*/ + +#ifndef _plClipboard_h +#define _plClipboard_h + +//// Class Definition ///////////////////////////////////////////////////////// + +class plClipboard +{ + private: + + plClipboard() {} + plClipboard(const plClipboard& rhs) {} + + public: + bool IsTextInClipboard(); + wchar_t* GetClipboardText(); + void SetClipboardText(const wchar_t* text); + static plClipboard& GetInstance( void ); +}; + +#endif // _Clipboard_h diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.cpp index a7a53574..c6c360b6 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.cpp @@ -263,9 +263,9 @@ void plUnifiedTime::ToCurrentTime() SetToUTC(); } -hsBool plUnifiedTime::SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec, int dst) +hsBool plUnifiedTime::SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec) { - if( !SetTime( year, month, day, hour, minute, second, usec, dst ) ) + if( !SetTime( year, month, day, hour, minute, second, usec, 0 ) ) return false; fSecs -= IGetLocalTimeZoneOffset(); diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.h index bfdb9435..86172eea 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plUnifiedTime/plUnifiedTime.h @@ -129,7 +129,7 @@ public: void SetSecsDouble(double secs); void SetMicros(const UInt32 micros) { fMicros = micros; } hsBool SetTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0, int dst=-1); - hsBool SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0, int dst=-1); + hsBool SetGMTime(short year, short month, short day, short hour, short minute, short second, unsigned long usec=0); hsBool SetToUTC(); void ToCurrentTime(); void ToEpoch() { fSecs = 0; fMicros = 0;} diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Tools/plLocalizationEditor/res/icon1.ico b/MOULOpenSourceClientPlugin/Plasma20/Sources/Tools/plLocalizationEditor/res/icon1.ico new file mode 100644 index 00000000..13431c59 Binary files /dev/null and b/MOULOpenSourceClientPlugin/Plasma20/Sources/Tools/plLocalizationEditor/res/icon1.ico differ