mirror of
https://github.com/Insality/druid
synced 2025-09-27 10:02:19 +02:00
Update Docs & Example
This commit is contained in:
@@ -1 +1 @@
|
||||
{"content":[{"name":"game.projectc","size":3797,"pieces":[{"name":"game.projectc0","offset":0}]},{"name":"game.arci","size":19808,"pieces":[{"name":"game.arci0","offset":0}]},{"name":"game.arcd","size":449757,"pieces":[{"name":"game.arcd0","offset":0}]},{"name":"game.dmanifest","size":20704,"pieces":[{"name":"game.dmanifest0","offset":0}]},{"name":"game.public.der","size":162,"pieces":[{"name":"game.public.der0","offset":0}]}]}
|
||||
{"content":[{"name":"game.projectc","size":4133,"pieces":[{"name":"game.projectc0","offset":0}]},{"name":"game.arci","size":23248,"pieces":[{"name":"game.arci0","offset":0}]},{"name":"game.arcd","size":608800,"pieces":[{"name":"game.arcd0","offset":0}]},{"name":"game.dmanifest","size":24461,"pieces":[{"name":"game.dmanifest0","offset":0}]},{"name":"game.public.der","size":162,"pieces":[{"name":"game.public.der0","offset":0}]}]}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,12 +1,12 @@
|
||||
[project]
|
||||
title = druid
|
||||
version = 0.10.603
|
||||
version = 0.10.682
|
||||
write_log = 0
|
||||
compress_archive = 1
|
||||
publisher = Insality
|
||||
developer = Insality
|
||||
commit_sha = 072507cc9e715541bdee7636d2e5eeeb3c22a57d
|
||||
build_date = 2022-09-09T18:00:07Z
|
||||
commit_sha = 1cbe57376397a8352bbafcc67de0b6f95ae37b35
|
||||
build_date = 2023-07-13T18:37:07Z
|
||||
title_as_file_name = druid
|
||||
|
||||
[display]
|
||||
@@ -16,6 +16,7 @@ high_dpi = 0
|
||||
samples = 0
|
||||
fullscreen = 0
|
||||
update_frequency = 0
|
||||
swap_interval = 1
|
||||
vsync = 1
|
||||
display_profiles = /example/custom.display_profilesc
|
||||
dynamic_orientation = 1
|
||||
@@ -29,6 +30,8 @@ clear_color_alpha = 0
|
||||
|
||||
[physics]
|
||||
type = 2D
|
||||
max_collision_object_count = 128
|
||||
use_fixed_timestep = 0
|
||||
gravity_y = -10
|
||||
debug = 0
|
||||
debug_alpha = 0.9
|
||||
@@ -45,6 +48,7 @@ ray_cast_limit_2d = 64
|
||||
ray_cast_limit_3d = 128
|
||||
trigger_overlap_capacity = 16
|
||||
velocity_threshold = 1
|
||||
max_fixed_timesteps = 2
|
||||
|
||||
[bootstrap]
|
||||
main_collection = /example/example.collectionc
|
||||
@@ -89,6 +93,7 @@ subpixels = 1
|
||||
|
||||
[model]
|
||||
max_count = 128
|
||||
split_meshes = 0
|
||||
|
||||
[mesh]
|
||||
max_count = 128
|
||||
@@ -115,43 +120,51 @@ max_count = 128
|
||||
launch_screen = /builtins/manifests/ios/LaunchScreen.storyboardc
|
||||
pre_renderered_icons = 0
|
||||
bundle_identifier = example.unnamed
|
||||
bundle_name =
|
||||
infoplist = /builtins/manifests/ios/Info.plist
|
||||
default_language = en
|
||||
localizations = en
|
||||
|
||||
[android]
|
||||
version_code = 603
|
||||
minimum_sdk_version = 16
|
||||
target_sdk_version = 30
|
||||
version_code = 682
|
||||
minimum_sdk_version = 19
|
||||
target_sdk_version = 33
|
||||
package = com.insality.druid
|
||||
gcm_sender_id =
|
||||
manifest = /builtins/manifests/android/AndroidManifest.xml
|
||||
iap_provider = GooglePlay
|
||||
input_method = HiddenInputField
|
||||
immersive_mode = 0
|
||||
display_cutout = 1
|
||||
debuggable = 0
|
||||
proguard =
|
||||
|
||||
[osx]
|
||||
app_icon =
|
||||
infoplist = /builtins/manifests/osx/Info.plist
|
||||
bundle_identifier = example.unnamed
|
||||
bundle_name =
|
||||
bundle_version = 1
|
||||
default_language = en
|
||||
localizations = en
|
||||
|
||||
[windows]
|
||||
app_icon =
|
||||
|
||||
[html5]
|
||||
custom_heap_size = 0
|
||||
heap_size = 64
|
||||
htmlfile = /builtins/manifests/web/engine_template.html
|
||||
cssfile = /example/light_theme.css
|
||||
splash_image = /media/druid_logo.png
|
||||
archive_location_prefix = archive
|
||||
archive_location_suffix =
|
||||
engine_arguments = --verify-graphics-calls=false
|
||||
wasm_streaming = 0
|
||||
show_fullscreen_button = 0
|
||||
show_made_with_defold = 0
|
||||
show_console_banner = 1
|
||||
scale_mode = fit
|
||||
engine_arguments = --verify-graphics-calls=false
|
||||
splash_image = /media/druid_logo.png
|
||||
|
||||
[particle_fx]
|
||||
max_count = 64
|
||||
@@ -163,6 +176,7 @@ auto_finish_transactions = 1
|
||||
|
||||
[network]
|
||||
http_timeout = 0
|
||||
ssl_certificates =
|
||||
http_thread_count = 4
|
||||
http_cache_enabled = 1
|
||||
|
||||
@@ -178,6 +192,7 @@ subpixels = 1
|
||||
|
||||
[profiler]
|
||||
track_cpu = 0
|
||||
sleep_between_server_updates = 0
|
||||
|
||||
[liveupdate]
|
||||
settings = /liveupdate.settings
|
||||
@@ -189,6 +204,7 @@ max_tile_count = 2048
|
||||
|
||||
[engine]
|
||||
run_while_iconified = 0
|
||||
fixed_update_frequency = 60
|
||||
|
||||
[druid]
|
||||
no_auto_input = 0
|
||||
@@ -201,9 +217,9 @@ input_key_esc = key_esc
|
||||
input_key_back = key_back
|
||||
input_key_enter = key_enter
|
||||
input_key_backspace = key_backspace
|
||||
input_multitouch = multitouch
|
||||
input_scroll_up = scroll_up
|
||||
input_scroll_down = scroll_down
|
||||
input_multitouch = touch_multi
|
||||
input_scroll_up = mouse_wheel_up
|
||||
input_scroll_down = mouse_wheel_down
|
||||
|
||||
[native_extension]
|
||||
app_manifest = /example/game.appmanifest
|
||||
|
@@ -102,18 +102,10 @@ var FileLoader = {
|
||||
|
||||
var EngineLoader = {
|
||||
wasm_size: 2000000,
|
||||
wasm_from: 0,
|
||||
wasm_to: 40,
|
||||
|
||||
wasmjs_size: 250000,
|
||||
wasmjs_from: 40,
|
||||
wasmjs_to: 50,
|
||||
|
||||
asmjs_size: 4000000,
|
||||
asmjs_from: 0,
|
||||
asmjs_to: 50,
|
||||
|
||||
stream_wasm: true,
|
||||
stream_wasm: false,
|
||||
|
||||
loadAndInstantiateWasmAsync: function(src, fromProgress, toProgress, callback) {
|
||||
FileLoader.load(src, "arraybuffer", EngineLoader.wasm_size,
|
||||
@@ -133,9 +125,32 @@ var EngineLoader = {
|
||||
});
|
||||
},
|
||||
|
||||
streamAndInstantiateWasmAsync: function(src, fromProgress, toProgress, callback) {
|
||||
setupWasmStreamAsync: async function(src, fromProgress, toProgress) {
|
||||
// https://stackoverflow.com/a/69179454
|
||||
var fetchFn = fetch;
|
||||
if (typeof TransformStream === "function" && ReadableStream.prototype.pipeThrough) {
|
||||
async function fetchWithProgress(path) {
|
||||
const response = await fetch(path);
|
||||
// May be incorrect if compressed
|
||||
const contentLength = response.headers.get("Content-Length");
|
||||
const total = parseInt(contentLength, 10);
|
||||
|
||||
let bytesLoaded = 0;
|
||||
const ts = new TransformStream({
|
||||
transform (chunk, controller) {
|
||||
bytesLoaded += chunk.byteLength;
|
||||
Progress.calculateProgress(fromProgress, toProgress, bytesLoaded, total);
|
||||
controller.enqueue(chunk)
|
||||
}
|
||||
});
|
||||
|
||||
return new Response(response.body.pipeThrough(ts), response);
|
||||
}
|
||||
fetchFn = fetchWithProgress;
|
||||
}
|
||||
|
||||
Module.instantiateWasm = function(imports, successCallback) {
|
||||
WebAssembly.instantiateStreaming(fetch(src), imports).then(function(output) {
|
||||
WebAssembly.instantiateStreaming(fetchFn(src), imports).then(function(output) {
|
||||
Progress.calculateProgress(fromProgress, toProgress, 1, 1);
|
||||
successCallback(output.instance);
|
||||
}).catch(function(e) {
|
||||
@@ -144,43 +159,45 @@ var EngineLoader = {
|
||||
});
|
||||
return {}; // Compiling asynchronously, no exports.
|
||||
}
|
||||
callback();
|
||||
},
|
||||
|
||||
// instantiate the .wasm file either by streaming it or first loading and then instantiate it
|
||||
// https://github.com/emscripten-core/emscripten/blob/master/tests/manual_wasm_instantiate.html#L170
|
||||
loadWasmAsync: function(src, fromProgress, toProgress, callback) {
|
||||
loadWasmAsync: function(exeName) {
|
||||
if (EngineLoader.stream_wasm && (typeof WebAssembly.instantiateStreaming === "function")) {
|
||||
EngineLoader.streamAndInstantiateWasmAsync(src, fromProgress, toProgress, callback);
|
||||
EngineLoader.setupWasmStreamAsync(exeName + ".wasm", 10, 50);
|
||||
EngineLoader.loadAndRunScriptAsync(exeName + '_wasm.js', EngineLoader.wasmjs_size, 0, 10);
|
||||
}
|
||||
else {
|
||||
EngineLoader.loadAndInstantiateWasmAsync(src, fromProgress, toProgress, callback);
|
||||
EngineLoader.loadAndInstantiateWasmAsync(exeName + ".wasm", 0, 40, function() {
|
||||
EngineLoader.loadAndRunScriptAsync(exeName + '_wasm.js', EngineLoader.wasmjs_size, 40, 50);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
loadAsmJsAsync: function(exeName) {
|
||||
EngineLoader.loadAndRunScriptAsync(exeName + '_asmjs.js', EngineLoader.asmjs_size, 0, 50);
|
||||
},
|
||||
|
||||
// load and start engine script (asm.js or wasm.js)
|
||||
loadScriptAsync: function(src, estimatedSize, fromProgress, toProgress) {
|
||||
loadAndRunScriptAsync: function(src, estimatedSize, fromProgress, toProgress) {
|
||||
FileLoader.load(src, "text", estimatedSize,
|
||||
function(loaded, total) { Progress.calculateProgress(fromProgress, toProgress, loaded, total); },
|
||||
function(error) { throw error; },
|
||||
function(response) {
|
||||
var tag = document.createElement("script");
|
||||
tag.text = response;
|
||||
document.head.appendChild(tag);
|
||||
document.body.appendChild(tag);
|
||||
});
|
||||
},
|
||||
|
||||
// load engine (asm.js or wasm.js + wasm)
|
||||
// engine load progress goes from 1-50% for ams.js
|
||||
// engine load progress goes from 0-40% for .wasm and 40-50% for wasm.js
|
||||
load: function(appCanvasId, exeName) {
|
||||
Progress.addProgress(Module.setupCanvas(appCanvasId));
|
||||
if (Module['isWASMSupported']) {
|
||||
EngineLoader.loadWasmAsync(exeName + ".wasm", EngineLoader.wasm_from, EngineLoader.wasm_to, function(wasm) {
|
||||
EngineLoader.loadScriptAsync(exeName + '_wasm.js', EngineLoader.wasmjs_size, EngineLoader.wasmjs_from, EngineLoader.wasmjs_to);
|
||||
});
|
||||
EngineLoader.loadWasmAsync(exeName);
|
||||
} else {
|
||||
EngineLoader.loadScriptAsync(exeName + '_asmjs.js', EngineLoader.asmjs_size, EngineLoader.asmjs_from, EngineLoader.asmjs_to);
|
||||
EngineLoader.loadAsmJsAsync(exeName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -699,9 +716,14 @@ var Module = {
|
||||
},
|
||||
|
||||
preSync: function(done) {
|
||||
if (Module.persistentStorage != true) {
|
||||
Module._syncInitial = true;
|
||||
done();
|
||||
return;
|
||||
}
|
||||
// Initial persistent sync before main is called
|
||||
FS.syncfs(true, function(err) {
|
||||
if(err) {
|
||||
if (err) {
|
||||
Module._syncTries += 1;
|
||||
console.error("FS syncfs error: " + err);
|
||||
if (Module._syncMaxTries > Module._syncTries) {
|
||||
@@ -734,6 +756,9 @@ var Module = {
|
||||
// It will flag that another one is needed if there is already one sync running.
|
||||
persistentSync: function() {
|
||||
|
||||
if (Module.persistentStorage != true) {
|
||||
return;
|
||||
}
|
||||
// Need to wait for the initial sync to finish since it
|
||||
// will call close on all its file streams which will trigger
|
||||
// new persistentSync for each.
|
||||
@@ -747,27 +772,40 @@ var Module = {
|
||||
},
|
||||
|
||||
preInit: [function() {
|
||||
/* Mount filesystem on preinit */
|
||||
// Mount filesystem on preinit
|
||||
var dir = DMSYS.GetUserPersistentDataRoot();
|
||||
FS.mkdir(dir);
|
||||
try {
|
||||
FS.mkdir(dir);
|
||||
}
|
||||
catch (error) {
|
||||
Module.persistentStorage = false;
|
||||
Module._preloadAndCallMain();
|
||||
return;
|
||||
}
|
||||
|
||||
// If IndexedDB is supported we mount the persistent data root as IDBFS,
|
||||
// then try to do a IDB->MEM sync before we start the engine to get
|
||||
// previously saved data before boot.
|
||||
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
|
||||
if (Module.persistentStorage && window.indexedDB) {
|
||||
try {
|
||||
FS.mount(IDBFS, {}, dir);
|
||||
|
||||
// Patch FS.close so it will try to sync MEM->IDB
|
||||
var _close = FS.close; FS.close = function(stream) { var r = _close(stream); Module.persistentSync(); return r; }
|
||||
|
||||
// Sync IDB->MEM before calling main()
|
||||
Module.preSync(function() {
|
||||
Module._preloadAndCallMain();
|
||||
});
|
||||
} else {
|
||||
Module._preloadAndCallMain();
|
||||
var _close = FS.close;
|
||||
FS.close = function(stream) {
|
||||
var r = _close(stream);
|
||||
Module.persistentSync();
|
||||
return r;
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
Module.persistentStorage = false;
|
||||
Module._preloadAndCallMain();
|
||||
return;
|
||||
}
|
||||
|
||||
// Sync IDB->MEM before calling main()
|
||||
Module.preSync(function() {
|
||||
Module._preloadAndCallMain();
|
||||
});
|
||||
}],
|
||||
|
||||
preRun: [function() {
|
||||
|
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -7,7 +7,7 @@
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<!-- The above 4 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
||||
|
||||
<title>druid 0.10.603</title>
|
||||
<title>druid 0.10.682</title>
|
||||
<style type='text/css'>
|
||||
/* Disable user selection to avoid strange bug in Chrome on Windows:
|
||||
* Selecting a text outside the canvas, then clicking+draging would
|
||||
@@ -123,6 +123,11 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="running-from-file-warning" style="display: none; margin: 3em;">
|
||||
<h1>Running from local file ⚠️</h1>
|
||||
<p>It seems like you have opened this file by double-clicking on it. In order to test your build in a browser <b>you need to load this file from a web server</b>. You can either upload this file and the rest of the files from a Defold HTML5 bundle to a web hosting service OR host them using a local web server on your home network.</p>
|
||||
<p><a href="https://defold.com/manuals/html5/#testing-html5-build" target="_blank">Learn more about running a local web server in the Defold HTML5 manual</a>.</p>
|
||||
</div>
|
||||
<div id="app-container" class="canvas-app-container">
|
||||
<div id="canvas-container" class="canvas-app-canvas-container">
|
||||
<canvas id="canvas" class="canvas-app-canvas" tabindex="1" width="600" height="900"></canvas>
|
||||
@@ -214,7 +219,15 @@
|
||||
</script>
|
||||
|
||||
<script id='engine-start' type='text/javascript'>
|
||||
EngineLoader.load("canvas", "druid");
|
||||
var runningFromFileWarning = document.getElementById("running-from-file-warning");
|
||||
if (window.location.href.startsWith("file://")) {
|
||||
runningFromFileWarning.style.display = "block";
|
||||
}
|
||||
else {
|
||||
EngineLoader.stream_wasm = "false" === "true";
|
||||
EngineLoader.load("canvas", "druid");
|
||||
runningFromFileWarning.parentNode.removeChild(runningFromFileWarning);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user