Changes compilation_server_done() back to before my change. Updates the path it checks to krom/krom.js.temp, this should prevent it from deleting existing krom.js files on first project launch.
- Added compare function to utils.py module
- Added check of Blender version and display of a message about incorrectness during Play, Build, Publish operations
1. Modification of CanvasScript and WasmScript classes: added a field to save the name of the script / file in the class.
2. Added logical nodes for working with Traits.
- Get Object Traits - gets an array of Traits for the specified object;
- Get Trait Name - get the Trait name (the name that appears in the list in Armory Traits) and its type (Canvas, Wasm, Bundle, LogicNode or Haxe).
Added a panel with settings:
- Building APK After Publish - to start the build after the project has been successfully published (False by default). Disabled if SDK path is not specified;
- Emulator - list of installed emulators in Android Studio (AVD Manager). At the start of Blender, the list is always empty, to fill and update it, you must click the Refresh button. To start the emulator, if you wish, you need to press the "Start" button (the list of emulators is obtained with the emulator -list-avds command, the launch is performed with the emulator -avd [name] command). The "Start" button is disabled if the name of the emulator is not selected from the list;
- Run Emulator After Building APK - launch the emulator after successfully building the APK file. Disabled if no APK build is installed or no emulator name selected.
To perform these operations, you need to specify the ANDROID_SDK_ROOT environment variable, if it is not specified in the OS, then the "Android SDK Path" setting is read and set as the environment variable os.environ ['ANDROID_SDK_ROOT'] to perform operations.
If no value is specified, then the user receives a corresponding message to the console. If the specified value is incorrect, then the user will receive messages from the corresponding programs.
1. For the new settings to fully function, you need to update the submodules so that this Pull Request (https://github.com/Kode/kincmake/pull/100) gets into armsdk. Extended settings via khafile.js.
2. Added Android Settings panel:
- invisible until the target platform android-hl is added to the list;
- inactive until the target platform android-hl is selected in the list.
Options:
- Orientation;
- Compile Version SDK - from 26 to 30, default 29;
- Minimal Version SDK - from 14 to 30, default 14;
- Target Version SDK - from 26 to 30, default 29;
- Permissions - a list of permissions. If I will duplicate entries in the list, then only unique entries will be included during export. By default, the list is empty;
- Android ABI Filters - a list of platforms to build for (arm64-v8a, armeabi-v7a, x86, x86_64). If I will duplicate entries in the list, then only unique entries will be included during export. By default, the list is empty. If the list is empty, then all platforms will be used (as before).
3. The enum (names of permissions) and the function have been added to the utils.py modules, which adds the specified value to the list of permissions. Feature added for ease of use from different locations (different logical nodes).
4. List of permissions:
- ACCESS_COARSE_LOCATION - Allows an app to access approximate location;
- ACCESS_NETWORK_STATE - Allows applications to access information about networks;
- ACCESS_FINE_LOCATION - Allows an app to access precise location;
- ACCESS_WIFI_STATE - Allows applications to access information about Wi-Fi network;
- BLUETOOTH - Allows applications to connect to paired bluetooth devices;
- BLUETOOTH_ADMIN - Allows applications to discover and pair bluetooth devices;
- CAMERA - Required to be able to access the camera device;
- EXPAND_STATUS_BAR - Allows an application to expand or collapse the status bar;
- FOREGROUND_SERVICE - Allows a regular application to use Service.startForeground;
- GET_ACCOUNTS - Allows access to the list of accounts in the Accounts Service;
- INTERNET - Allows applications to open network sockets';
- READ_EXTERNAL_STORAGE - Allows an application to read from external storage;
- VIBRATE - Allows access to the vibrator;
- WRITE_EXTERNAL_STORAGE - Allows an application to write to external storage.
5. Added logical node Set Vibrate:
Category: Native
Pulses the vibration hardware on the device for time in milliseconds, if such hardware exists.
Input parameters:
- Milliseconds - time in milliseconds (data type Int, default value 100).
When adding the logical node Set Vibrate, the permission is automatically added to the list, even if the target android-hl has not been added to the export list (using a function from utils.py).
Modifying the Screen To World Space node
Input parameters:
- Screen X - value of screen coordinates along the X axis (data type Int);
- Screen Y - the value of the screen coordinates along the Y axis (data type Int).
Options:
- Separator Out - whether or not to separate the output parameters (vectors) into components (XYZ).
Output parameters:
- World - coordinates of a point in 3D space (Vector data type)
- Direction - normalized direction vector from the camera towards the point/cursor indication (data type Vector).
- X, Y, Z - components of the corresponding vectors (data type Float).
1. Adding the ability to customize display, scale (size), shortcuts to the DebugConsole class.
2. Adding a function to utils.py to get Debug Console settings from Render: Armory.
3. Added Debug Console settings to the Armory Project interface:
- Enable (default value - False);
- Position (Left, Center, Right, default value - Right);
- Scale Console (from 0.3 to 10);
- Visible.
4. Added transfer of Debug Console settings to exporter.py.
5. Added logical nodes to control DebugConsole while the application is running.
The two new context menu options will let the user inspect the source code
of the node. For the haxe source the existing operator was used (ArmOpenNodeSource),
but it was modified because I thought it made more sense to guess the version the user has based on their last commit instead of master.
for python __module__ was used to obtain the relative path.
The options were appended to the existing menu instead of being its own class because I couldn't find how to implement it that way without redrawing.
- Added a way to obtain the last commit in utils without git cli
Get System Name - to get the name of the system while the application is running.
Output parameters:
- System Name — displays the system name as a string;
- List systems for quick comparison.
Input parameters:
Duration - time during which the number of touches is counted (default value is 0.3 seconds);
Interval - the time that must elapse between touches (default value is 0);
Repeat - the number of touches that need to be done to execute the event (default value is 2).
Output parameters:
Done - event for a successful completed action;
Fail - an event for a failed action;
Tap - event on each touch;
Tap Number - how many times the user has already touched the screen;
Coords - coordinates of the touch.
The node for the swipe event.
Input parameters:
- Time - duration of the swipe (default value 0.15 s);
- Min Length (px) - the minimum length that the swipe must “pass” (default value 100 px).
Output parameters:
- Direction - normalized vector of the swipe direction;
- Length (px) - the length of the swipe (to assess the “strength”);
The Length output parameter is calculated by the vector value (without normalization) to relate to the input value.
- Angle (0-360) - swipe angle in the range from 0 to 360 degrees (0 is on the right, i.e. Vector (1, 0) = 0 degrees).
- States are states with direction output (Up, Down …). By default, they are not displayed, but if you press “Add 4 State”, then 4 states will appear (Up, Down, Left, Right) and if again, then 8 states will already be displayed.
Determining direction for a state:
for 4 directions - "circle" is divided into 4 segments of 90 degrees;
for 8 directions - "circle" is divided into 8 segments of 45 degrees.
- changed the way custom node sockets are handled at several places
- updated the `replaceAll` and `replace` functions used to perform node replacements
- renamed and improved the NodeReplacement [new name] class, which represents a replacement task
- added an arm_version property to all logic nodes, as well as a `get_replacement_node` method (to be overridden for each node)
- added an option to declare a node as obselete in add_node() (useful in order to have the node defined, but out of the menu)
- added classes for UI popups linked to node updates, as well as an operator dedicated to said node update
Thanks to MoritzBrueckner for part of the ground work!
Add buttons:
- New Node Tree – creates and sets a new Node Tree in the list;
- Edit Node Tree – loads the Node Tree selected from the list into all Logic Node Editor;
- From Node Tree – loops through all the working Logic Node Editor and from the last in the list sets the value to the list.