mirror of
https://github.com/godotengine/godot.git
synced 2026-01-05 06:11:29 +03:00
-fixed export templates not loading/exporting on Windows
-fixed TouchScreenButton with stretch2d -fixed(?) OSX crash on startup (test!!) -compilation fixes on windows -CollisionPolygon editor works again -find buttons en find dialog -TileMap editor cleanup (removed "error", made nicer) -viewport flicker fixed -make .scn default extension for saving scenes -export the rest of the network classes to gdscript
This commit is contained in:
@@ -59,5 +59,6 @@ public class GodotLib {
|
||||
public static native void method(String p_sname,String p_name,String p_ret,String[] p_params);
|
||||
public static native String getGlobal(String p_key);
|
||||
public static native void callobject(int p_ID, String p_method, Object[] p_params);
|
||||
public static native void calldeferred(int p_ID, String p_method, Object[] p_params);
|
||||
|
||||
}
|
||||
|
||||
@@ -1146,6 +1146,26 @@ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_callobject(JNIEnv * env,
|
||||
// something
|
||||
};
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_calldeferred(JNIEnv * env, jobject p_obj, jint ID, jstring method, jobjectArray params) {
|
||||
|
||||
String str_method = env->GetStringUTFChars( method, NULL );
|
||||
|
||||
Object* obj = ObjectDB::get_instance(ID);
|
||||
ERR_FAIL_COND(!obj);
|
||||
|
||||
int count = env->GetArrayLength(params);
|
||||
Variant args[VARIANT_ARG_MAX];
|
||||
|
||||
for (int i=0; i<MIN(count,VARIANT_ARG_MAX); i++) {
|
||||
|
||||
jobject obj = env->GetObjectArrayElement(params, i);
|
||||
args[i] = _jobject_to_variant(env, obj);
|
||||
};
|
||||
|
||||
|
||||
obj->call_deferred(str_method, args[0],args[1],args[2],args[3],args[4]);
|
||||
// something
|
||||
};
|
||||
|
||||
//Main::cleanup();
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ extern "C" {
|
||||
JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_method(JNIEnv * env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args);
|
||||
JNIEXPORT jstring JNICALL Java_com_android_godot_GodotLib_getGlobal(JNIEnv * env, jobject obj, jstring path);
|
||||
JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_callobject(JNIEnv * env, jobject obj, jint ID, jstring method, jobjectArray params);
|
||||
JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_calldeferred(JNIEnv * env, jobject obj, jint ID, jstring method, jobjectArray params);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ static int frame_count = 0;
|
||||
printf("**************** app delegate init\n");
|
||||
CGRect rect = [[UIScreen mainScreen] bounds];
|
||||
|
||||
application.statusBarHidden = YES;
|
||||
[application setStatusBarHidden:YES animation:NO];
|
||||
// disable idle timer
|
||||
application.idleTimerDisabled = YES;
|
||||
|
||||
|
||||
@@ -60,8 +60,6 @@ class EditorExportPlatformJavaScript : public EditorExportPlatform {
|
||||
|
||||
Ref<ImageTexture> logo;
|
||||
|
||||
static Error save_pack_file_js(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total);
|
||||
|
||||
protected:
|
||||
|
||||
bool _set(const StringName& p_name, const Variant& p_value);
|
||||
@@ -103,8 +101,6 @@ bool EditorExportPlatformJavaScript::_set(const StringName& p_name, const Varian
|
||||
show_run=p_value;
|
||||
else if (n=="options/memory_size")
|
||||
max_memory=p_value;
|
||||
else if (n=="options/pack_mode")
|
||||
pack_mode=PackMode(int(p_value));
|
||||
else
|
||||
return false;
|
||||
|
||||
@@ -123,8 +119,6 @@ bool EditorExportPlatformJavaScript::_get(const StringName& p_name,Variant &r_re
|
||||
r_ret=show_run;
|
||||
else if (n=="options/memory_size")
|
||||
r_ret=max_memory;
|
||||
else if (n=="options/pack_mode")
|
||||
r_ret=pack_mode;
|
||||
else
|
||||
return false;
|
||||
|
||||
@@ -134,7 +128,6 @@ void EditorExportPlatformJavaScript::_get_property_list( List<PropertyInfo> *p_l
|
||||
|
||||
p_list->push_back( PropertyInfo( Variant::STRING, "custom_package/debug", PROPERTY_HINT_FILE,"zip"));
|
||||
p_list->push_back( PropertyInfo( Variant::STRING, "custom_package/release", PROPERTY_HINT_FILE,"zip"));
|
||||
p_list->push_back( PropertyInfo( Variant::INT, "options/pack_mode",PROPERTY_HINT_ENUM,"Single File, Multiple Files"));
|
||||
p_list->push_back( PropertyInfo( Variant::INT, "options/memory_size",PROPERTY_HINT_ENUM,"32mb,64mb,128mb,256mb,512mb,1024mb"));
|
||||
p_list->push_back( PropertyInfo( Variant::BOOL, "browser/enable_run"));
|
||||
|
||||
@@ -143,32 +136,6 @@ void EditorExportPlatformJavaScript::_get_property_list( List<PropertyInfo> *p_l
|
||||
}
|
||||
|
||||
|
||||
static const char* files_pre=""\
|
||||
"var Module;\n"\
|
||||
"if (typeof Module === 'undefined') Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()');\n"\
|
||||
"if (!Module.expectedDataFileDownloads) {\n"\
|
||||
" Module.expectedDataFileDownloads = 0;\n"\
|
||||
" Module.finishedDataFileDownloads = 0;\n"\
|
||||
"}\n"\
|
||||
"Module.expectedDataFileDownloads++;\n"\
|
||||
"(function() {\n"\
|
||||
"\n"\
|
||||
" function runWithFS() {\n"\
|
||||
"function assert(check, msg) {\n"\
|
||||
" if (!check) throw msg + new Error().stack;\n"\
|
||||
"} \n";
|
||||
|
||||
static const char* files_post=""\
|
||||
"}\n"\
|
||||
"if (Module['calledRun']) {\n"\
|
||||
" runWithFS();\n"\
|
||||
"} else {\n"\
|
||||
" if (!Module['preRun']) Module['preRun'] = [];\n"\
|
||||
" Module[\"preRun\"].push(runWithFS); // FS is not initialized yet, wait for it\n"\
|
||||
"}\n"\
|
||||
"})();";
|
||||
|
||||
|
||||
static void _fix_html(Vector<uint8_t>& html,const String& name,int max_memory) {
|
||||
|
||||
|
||||
@@ -178,7 +145,7 @@ static void _fix_html(Vector<uint8_t>& html,const String& name,int max_memory) {
|
||||
Vector<String> lines=str.split("\n");
|
||||
for(int i=0;i<lines.size();i++) {
|
||||
if (lines[i].find("godot.js")!=-1) {
|
||||
strnew+="<script type=\"text/javascript\" src=\""+name+"_files.js\"></script>\n";
|
||||
strnew+="<script type=\"text/javascript\" src=\""+name+"_filesystem.js\"></script>\n";
|
||||
strnew+="<script async type=\"text/javascript\" src=\""+name+".js\"></script>\n";
|
||||
} else if (lines[i].find("var Module")!=-1) {
|
||||
strnew+=lines[i];
|
||||
@@ -195,6 +162,27 @@ static void _fix_html(Vector<uint8_t>& html,const String& name,int max_memory) {
|
||||
}
|
||||
}
|
||||
|
||||
static void _fix_files(Vector<uint8_t>& html,uint64_t p_data_size) {
|
||||
|
||||
|
||||
String str;
|
||||
String strnew;
|
||||
str.parse_utf8((const char*)html.ptr(),html.size());
|
||||
Vector<String> lines=str.split("\n");
|
||||
for(int i=0;i<lines.size();i++) {
|
||||
if (lines[i].find("$DPLEN")!=-1) {
|
||||
strnew+=lines[i].replace("$DPLEN",itos(p_data_size));
|
||||
} else {
|
||||
strnew+=lines[i]+"\n";
|
||||
}
|
||||
}
|
||||
|
||||
CharString cs = strnew.utf8();
|
||||
html.resize(cs.size());
|
||||
for(int i=9;i<cs.size();i++) {
|
||||
html[i]=cs[i];
|
||||
}
|
||||
}
|
||||
|
||||
struct JSExportData {
|
||||
|
||||
@@ -204,56 +192,6 @@ struct JSExportData {
|
||||
};
|
||||
|
||||
|
||||
static void store_file_buffer(FileAccess*f,const String& p_path,const Vector<uint8_t>& p_data) {
|
||||
|
||||
|
||||
String pre = "Module['FS_createDataFile']('/', '"+p_path.replace("res://","")+"',[";
|
||||
CharString cs = pre.utf8();
|
||||
f->store_buffer((const uint8_t*)cs.ptr(),cs.length());
|
||||
for(int i=0;i<p_data.size();i++) {
|
||||
|
||||
|
||||
uint8_t c=',';
|
||||
if (i>0)
|
||||
f->store_buffer(&c,1);
|
||||
|
||||
uint8_t str[4];
|
||||
uint8_t d = p_data[i];
|
||||
if (d<10) {
|
||||
str[0]='0'+d;
|
||||
str[1]=0;
|
||||
f->store_buffer(str,1);
|
||||
} else if (d<100) {
|
||||
|
||||
str[0]='0'+d/10;
|
||||
str[1]='0'+d%10;
|
||||
str[2]=0;
|
||||
f->store_buffer(str,2);
|
||||
|
||||
} else {
|
||||
str[0]='0'+d/100;
|
||||
str[1]='0'+(d/10)%10;
|
||||
str[2]='0'+d%10;
|
||||
str[3]=0;
|
||||
f->store_buffer(str,3);
|
||||
}
|
||||
}
|
||||
String post = "],true,true);\n";
|
||||
cs = post.utf8();
|
||||
f->store_buffer((const uint8_t*)cs.ptr(),cs.length());
|
||||
}
|
||||
|
||||
|
||||
Error EditorExportPlatformJavaScript::save_pack_file_js(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total) {
|
||||
|
||||
JSExportData *ed=(JSExportData*)p_userdata;
|
||||
|
||||
FileAccess *f=(FileAccess *)p_userdata;
|
||||
store_file_buffer(ed->f,p_path,p_data);
|
||||
ed->ep->step("File: "+p_path,3+p_file*100/p_total);
|
||||
return OK;
|
||||
|
||||
}
|
||||
|
||||
Error EditorExportPlatformJavaScript::export_project(const String& p_path,bool p_debug,const String& p_password) {
|
||||
|
||||
@@ -279,6 +217,20 @@ Error EditorExportPlatformJavaScript::export_project(const String& p_path,bool p
|
||||
|
||||
ep.step("Exporting to HTML5",0);
|
||||
|
||||
ep.step("Finding Files..",1);
|
||||
|
||||
FileAccess *f=FileAccess::open(p_path.get_base_dir()+"/data.pck",FileAccess::WRITE);
|
||||
if (!f) {
|
||||
EditorNode::add_io_error("Could not create file for writing:\n"+p_path.basename()+"_files.js");
|
||||
return ERR_FILE_CANT_WRITE;
|
||||
}
|
||||
Error err = save_pack(f);
|
||||
size_t len = f->get_len();
|
||||
memdelete(f);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
unzFile pkg = unzOpen2(src_template.utf8().get_data(), &io);
|
||||
if (!pkg) {
|
||||
|
||||
@@ -314,6 +266,11 @@ Error EditorExportPlatformJavaScript::export_project(const String& p_path,bool p
|
||||
_fix_html(data,p_path.get_file().basename(),1<<(max_memory+5));
|
||||
file=p_path.get_file();
|
||||
}
|
||||
if (file=="filesystem.js") {
|
||||
|
||||
_fix_files(data,len);
|
||||
file=p_path.get_file().basename()+"_filesystem.js";
|
||||
}
|
||||
if (file=="godot.js") {
|
||||
|
||||
//_fix_godot(data);
|
||||
@@ -335,49 +292,6 @@ Error EditorExportPlatformJavaScript::export_project(const String& p_path,bool p
|
||||
}
|
||||
|
||||
|
||||
ep.step("Finding Files..",1);
|
||||
|
||||
Vector<String> remaps;
|
||||
|
||||
FileAccess *f=FileAccess::open(p_path.basename()+"_files.js",FileAccess::WRITE);
|
||||
if (!f) {
|
||||
EditorNode::add_io_error("Could not create file for writing:\n"+p_path.basename()+"_files.js");
|
||||
return ERR_FILE_CANT_WRITE;
|
||||
}
|
||||
|
||||
f->store_buffer((const uint8_t*)files_pre,strlen(files_pre));
|
||||
|
||||
if (pack_mode==PACK_SINGLE_FILE) {
|
||||
|
||||
String ftmp = EditorSettings::get_singleton()->get_settings_path()+"/tmp/webpack.pck";
|
||||
FileAccess *f2 = FileAccess::open(ftmp,FileAccess::WRITE);
|
||||
if (!f2) {
|
||||
memdelete(f);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
Error err = save_pack(f2,false);
|
||||
memdelete(f2);
|
||||
if (err) {
|
||||
memdelete(f);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
|
||||
Vector<uint8_t> data = FileAccess::get_file_as_array(ftmp);
|
||||
store_file_buffer(f,"data.pck",data);
|
||||
|
||||
|
||||
} else {
|
||||
JSExportData ed;
|
||||
ed.ep=&ep;
|
||||
ed.f=f;
|
||||
|
||||
Error err =export_project_files(save_pack_file_js,&ed,false);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
f->store_buffer((const uint8_t*)files_post,strlen(files_post));
|
||||
memdelete(f);
|
||||
|
||||
|
||||
return OK;
|
||||
|
||||
|
||||
@@ -511,7 +511,7 @@ void OS_JavaScript::process_accelerometer(const Vector3& p_accelerometer) {
|
||||
|
||||
bool OS_JavaScript::has_touchscreen_ui_hint() const {
|
||||
|
||||
return true;
|
||||
return false; //???
|
||||
}
|
||||
|
||||
void OS_JavaScript::main_loop_request_quit() {
|
||||
|
||||
@@ -1277,6 +1277,7 @@ OS_OSX* OS_OSX::singleton=NULL;
|
||||
|
||||
OS_OSX::OS_OSX() {
|
||||
|
||||
main_loop=NULL;
|
||||
singleton=this;
|
||||
autoreleasePool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
|
||||
@@ -1534,7 +1534,9 @@ void OS_Windows::set_icon(const Image& p_icon) {
|
||||
|
||||
/* Create temporary bitmap buffer */
|
||||
int icon_len = 40 + h * w * 4;
|
||||
BYTE *icon_bmp = (BYTE*)alloca(icon_len);
|
||||
Vector<BYTE> v;
|
||||
v.resize(icon_len);
|
||||
BYTE *icon_bmp = &v[0];
|
||||
|
||||
encode_uint32(40,&icon_bmp[0]);
|
||||
encode_uint32(w,&icon_bmp[4]);
|
||||
@@ -1582,7 +1584,11 @@ bool OS_Windows::has_environment(const String& p_var) const {
|
||||
|
||||
String OS_Windows::get_environment(const String& p_var) const {
|
||||
|
||||
return getenv(p_var.utf8().get_data());
|
||||
char* val = getenv(p_var.utf8().get_data());
|
||||
if (val)
|
||||
return val;
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
String OS_Windows::get_stdin_string(bool p_block) {
|
||||
|
||||
@@ -1232,7 +1232,7 @@ void OS_X11::set_icon(const Image& p_icon) {
|
||||
|
||||
DVector<uint8_t>::Read r = img.get_data().read();
|
||||
|
||||
uint32_t *wr=(uint32_t*)&pd[2];
|
||||
long *wr=(long*)&pd[2];
|
||||
|
||||
for(int i=0;i<w*h;i++) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user