1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00

3D Physics Rework, Other Stuff

-=-=-=-=-=-=-=-=-=-=-=-=-=-

3D Physics:
-Fixed "Bounce" parameter in 3D
-Fixed bug affecting Area (sometims it would not detect properly)
-Vehicle Body has seen heavy work
-Added Query API for doing space queries in 3D. Needs some docs though.
-Added JOINTS! Adapted Bullet Joints: and created easy gizmos for setting them up:
   -PinJoint
   -HingeJoint (with motor)
   -SliderJoint
   -ConeTwistJoint
   -Generic6DOFJoint
-Added OBJECT PICKING! based on the new query API. Any physics object now (Area or Body) has the following signals and virtual functions:
    -input_event (mouse or multitouch input over the body)
    -mouse_enter (mouse entered the body area)
    -mouse_exit (mouse exited body area)
   For Area it needs to be activated manually, as it isn't by default (ray goes thru).

Other:

-Begun working on Windows 8 (RT) port. Compiles but does not work yet.
-Added TheoraPlayer library for improved to-texture and portable video support.
-Fixed a few bugs in the renderer, collada importer, collada exporter, etc.
This commit is contained in:
Juan Linietsky
2014-09-15 11:33:30 -03:00
parent 1a2cb755e2
commit 8cab401d08
217 changed files with 81476 additions and 8145 deletions

View File

@@ -26,7 +26,7 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#ifdef WINDOWS_ENABLED
#if defined(WINDOWS_ENABLED)
#include "dir_access_windows.h"
@@ -36,6 +36,13 @@
#include <wchar.h>
#include <stdio.h>
#include "print_string.h"
#ifdef WINRT_ENABLED
#include <Synchapi.h>
#include <collection.h>
#include <ppltasks.h>
#endif
/*
[03:57] <reduz> yessopie, so i dont havemak to rely on unicows
@@ -56,6 +63,7 @@ struct DirAccessWindowsPrivate {
WIN32_FIND_DATAW fu; //unicode version
};
// CreateFolderAsync
bool DirAccessWindows::list_dir_begin() {
@@ -63,13 +71,13 @@ bool DirAccessWindows::list_dir_begin() {
if (unicode) {
list_dir_end();
p->h = FindFirstFileW((current_dir+"\\*").c_str(), &p->fu);
p->h = FindFirstFileExW((current_dir+"\\*").c_str(), FindExInfoStandard, &p->fu, FindExSearchNameMatch, NULL, 0);
return (p->h==INVALID_HANDLE_VALUE);
} else {
list_dir_end();
p->h = FindFirstFileA((current_dir+"\\*").ascii().get_data(), &p->f);
p->h = FindFirstFileExA((current_dir+"\\*").ascii().get_data(), FindExInfoStandard, &p->fu, FindExSearchNameMatch, NULL, 0);
return (p->h==INVALID_HANDLE_VALUE);
@@ -144,6 +152,15 @@ Error DirAccessWindows::change_dir(String p_dir) {
GLOBAL_LOCK_FUNCTION
#ifdef WINRT_ENABLED
p_dir = fix_path(p_dir);
current_dir = normalize_path(p_dir);
return OK;
#else
p_dir=fix_path(p_dir);
if (unicode) {
@@ -201,13 +218,19 @@ Error DirAccessWindows::change_dir(String p_dir) {
}
return OK;
#endif
}
Error DirAccessWindows::make_dir(String p_dir) {
GLOBAL_LOCK_FUNCTION
#ifdef WINRT_ENABLED
return ERR_CANT_CREATE;
#else
p_dir=fix_path(p_dir);
p_dir.replace("/","\\");
@@ -248,6 +271,8 @@ Error DirAccessWindows::make_dir(String p_dir) {
};
return ERR_CANT_CREATE;
#endif
}
@@ -280,11 +305,13 @@ bool DirAccessWindows::file_exists(String p_file) {
p_file.replace("/","\\");
WIN32_FILE_ATTRIBUTE_DATA fileInfo;
if (unicode) {
DWORD fileAttr;
fileAttr = GetFileAttributesW(p_file.c_str());
fileAttr = GetFileAttributesExW(p_file.c_str(), GetFileExInfoStandard, &fileInfo);
if (0xFFFFFFFF == fileAttr)
return false;
@@ -293,7 +320,7 @@ bool DirAccessWindows::file_exists(String p_file) {
} else {
DWORD fileAttr;
fileAttr = GetFileAttributesA(p_file.ascii().get_data());
fileAttr = GetFileAttributesExA(p_file.ascii().get_data(), GetFileExInfoStandard, &fileInfo);
if (0xFFFFFFFF == fileAttr)
return false;
return !(fileAttr&FILE_ATTRIBUTE_DIRECTORY);
@@ -313,11 +340,13 @@ bool DirAccessWindows::dir_exists(String p_dir) {
p_dir.replace("/","\\");
WIN32_FILE_ATTRIBUTE_DATA fileInfo;
if (unicode) {
DWORD fileAttr;
fileAttr = GetFileAttributesW(p_dir.c_str());
fileAttr = GetFileAttributesExW(p_dir.c_str(), GetFileExInfoStandard, &fileInfo);
if (0xFFFFFFFF == fileAttr)
return false;
@@ -326,7 +355,7 @@ bool DirAccessWindows::dir_exists(String p_dir) {
} else {
DWORD fileAttr;
fileAttr = GetFileAttributesA(p_dir.ascii().get_data());
fileAttr = GetFileAttributesExA(p_dir.ascii().get_data(), GetFileExInfoStandard, &fileInfo);
if (0xFFFFFFFF == fileAttr)
return false;
return (fileAttr&FILE_ATTRIBUTE_DIRECTORY);
@@ -355,7 +384,8 @@ Error DirAccessWindows::remove(String p_path) {
p_path=fix_path(p_path);
printf("erasing %s\n",p_path.utf8().get_data());
DWORD fileAttr = GetFileAttributesW(p_path.c_str());
WIN32_FILE_ATTRIBUTE_DATA fileInfo;
DWORD fileAttr = GetFileAttributesExW(p_path.c_str(), GetFileExInfoStandard, &fileInfo);
if (fileAttr == INVALID_FILE_ATTRIBUTES)
return FAILED;
@@ -378,7 +408,8 @@ FileType DirAccessWindows::get_file_type(const String& p_file) const {
DWORD attr;
if (worked) {
attr = GetFileAttributesW(p_file.c_str());
WIN32_FILE_ATTRIBUTE_DATA fileInfo;
attr = GetFileAttributesExW(p_file.c_str(), GetFileExInfoStandard, &fileInfo);
}
@@ -399,9 +430,18 @@ size_t DirAccessWindows::get_space_left() {
DirAccessWindows::DirAccessWindows() {
p = memnew( DirAccessWindowsPrivate );
p->h=INVALID_HANDLE_VALUE;
current_dir=".";
drive_count=0;
#ifdef WINRT_ENABLED
Windows::Storage::StorageFolder ^install_folder = Windows::ApplicationModel::Package::Current->InstalledLocation;
change_dir(install_folder->Path->Data());
#else
DWORD mask=GetLogicalDrives();
for (int i=0;i<MAX_DRIVES;i++) {
@@ -415,12 +455,13 @@ DirAccessWindows::DirAccessWindows() {
unicode=true;
/* We are running Windows 95/98/ME, so no unicode allowed */
if ( SetCurrentDirectoryW ( L"." ) == FALSE && GetLastError () == ERROR_CALL_NOT_IMPLEMENTED )
unicode=false;
p->h=INVALID_HANDLE_VALUE;
change_dir(".");
#endif
}