Add nativescript frame callback, deprecate NimRuntime

This commit is contained in:
Ruslan Mustakov 2017-08-03 14:25:02 +07:00
commit 0062568dbc
5 changed files with 19 additions and 16 deletions

View file

@ -95,15 +95,6 @@ If you would like to use Nim in an existing project:
GDNative library resource that contains paths to dynamic libraries GDNative library resource that contains paths to dynamic libraries
compiled by Nim. compiled by Nim.
3. Add ``NimRuntime`` as an `AutoLoad singleton <https://godot.readthedocs.io/en/stable/learning/step_by_step/singletons_autoload.html>`_
to your project. To do this, copy ``project/scripts/NimRuntime.gdns`` into
your project and add these lines to ``project.godot``, adjusting path to
``NimRuntime.gdns`` as necessary:
.. code-block:: cfg
[autoload]
NimRuntime="*res://scripts/NimRuntime.gdns"
Next Steps Next Steps
---------- ----------

View file

@ -1,4 +1,4 @@
version = "0.4.0" version = "0.4.1"
author = "Xored Software, Inc." author = "Xored Software, Inc."
description = "Godot Engine bindings" description = "Godot Engine bindings"
license = "MIT" license = "MIT"

View file

@ -1 +1,2 @@
--path:"$projectdir" --path:"$projectdir"
-d:useRealtimeGc

View file

@ -1,6 +1,6 @@
# Copyright 2017 Xored Software, Inc. # Copyright 2017 Xored Software, Inc.
import tables, typetraits, macros import tables, typetraits, macros, asyncdispatch
import core.godotbase import core.godotbase
import core.vector2, core.rect2, import core.vector2, core.rect2,
core.vector3, core.transform2d, core.vector3, core.transform2d,
@ -668,14 +668,22 @@ proc godot_gdnative_terminate(options: ptr GodotNativeTerminateOptions) {.
cdecl, exportc, dynlib.} = cdecl, exportc, dynlib.} =
deallocHeap(runFinalizers = not options[].inEditor, allowGcAfterwards = false) deallocHeap(runFinalizers = not options[].inEditor, allowGcAfterwards = false)
proc godot_nativescript_thread_enter() {. const nimGcStepLengthUs {.intdefine.} = 2000
cdecl, exportc, dynlib.} = proc godot_nativescript_frame() {.cdecl, exportc, dynlib.} =
if asyncdispatch.hasPendingOperations():
poll(0)
GC_step(nimGcStepLengthUs, false, 0)
when not defined(release):
onUnhandledException = proc(errorMsg: string) =
printError("Unhandled Nim exception: " & errorMsg)
proc godot_nativescript_thread_enter() {.cdecl, exportc, dynlib.} =
when compileOption("threads"): when compileOption("threads"):
setupForeignThreadGc() setupForeignThreadGc()
else: else:
print(cstring"A foreign thread is created, but app is compiled without --threads:on. Bad things will happen if Nim code is invoked from this thread.") print(cstring"A foreign thread is created, but app is compiled without --threads:on. Bad things will happen if Nim code is invoked from this thread.")
proc godot_nativescript_thread_exit() {. proc godot_nativescript_thread_exit() {.cdecl, exportc, dynlib.} =
cdecl, exportc, dynlib.} =
when compileOption("threads"): when compileOption("threads"):
teardownForeignThreadGc() teardownForeignThreadGc()

View file

@ -3,6 +3,9 @@
import asyncdispatch import asyncdispatch
import godot, node import godot, node
{.warning: ("NimRuntime is deprecated - it is no longer necessary to add it " &
"as an AutoLoad class. It will be removed in v0.5.0.").}
gdobj NimRuntime of Node: gdobj NimRuntime of Node:
method enterTree*() = method enterTree*() =
discard getTree().connect("idle_frame", self, "idle", newArray()) discard getTree().connect("idle_frame", self, "idle", newArray())