mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Merge branch '4.1' into 4.2-beta
This commit is contained in:
commit
b4d7bedc37
4
.github/workflows/spine-godot.yml
vendored
4
.github/workflows/spine-godot.yml
vendored
@ -13,8 +13,8 @@ env:
|
|||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
AWS_EC2_METADATA_DISABLED: true
|
AWS_EC2_METADATA_DISABLED: true
|
||||||
EM_VERSION: 3.1.10
|
EM_VERSION: 3.1.10
|
||||||
GODOT_TAG: 3.4.4-stable
|
GODOT_TAG: 3.5-stable
|
||||||
GODOT_VERSION: 3.4.4.stable
|
GODOT_VERSION: 3.5.stable
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
|||||||
@ -22,18 +22,18 @@ spine-godot supports all Spine features, except two-color tinting and the screen
|
|||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
spine-godot works with the latest stable Godot 3.4 release. It requires compilation of Godot, as spine-godot is implemented as a module.
|
spine-godot works with the latest stable Godot 3.5 release. It requires compilation of Godot, as spine-godot is implemented as a module.
|
||||||
|
|
||||||
> *NOTE:* spine-godot also compiles and works against Godot 4.x. However, we currently can not guarantee stability, as Godot 4.x is still heavily in flux.
|
> *NOTE:* spine-godot also compiles and works against Godot 4.x. However, we currently can not guarantee stability, as Godot 4.x is still heavily in flux.
|
||||||
|
|
||||||
### Pre-built Godot editor and export template binaries
|
### Pre-built Godot editor and export template binaries
|
||||||
|
|
||||||
We provide prebuilt Godot editor and export template binaries for Godot 3.4.4-stable:
|
We provide prebuilt Godot editor and export template binaries for Godot 3.5-stable:
|
||||||
|
|
||||||
* [Godot Editor Windows](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.4.4-stable/godot-editor-windows.zip)
|
* [Godot Editor Windows](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5-stable/godot-editor-windows.zip)
|
||||||
* [Godot Editor Linux](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.4.4-stable/godot-editor-linux.zip)
|
* [Godot Editor Linux](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5-stable/godot-editor-linux.zip)
|
||||||
* [Godot Editor macOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.4.4-stable/godot-editor-macos.zip)
|
* [Godot Editor macOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5-stable/godot-editor-macos.zip)
|
||||||
* [Godot export templates for Windows, Linux, macOS, Web, Android, iOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.4.4-stable/spine-godot-templates-4.1-3.4.4-stable.tpz)
|
* [Godot export templates for Windows, Linux, macOS, Web, Android, iOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5-stable/spine-godot-templates-4.1-3.5-stable.tpz)
|
||||||
|
|
||||||
### Building the Godot editor and export templates locally
|
### Building the Godot editor and export templates locally
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ To build the export template for a specific platform, run the following in a Bas
|
|||||||
|
|
||||||
```
|
```
|
||||||
cd spine-godot
|
cd spine-godot
|
||||||
./build/setup.sh 3.4.4-stable false
|
./build/setup.sh 3.5-stable false
|
||||||
./build/build-templates.sh windows
|
./build/build-templates.sh windows
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ This repository contains a GitHub workflow in `.github/workflows/spine-godot.yml
|
|||||||
The resulting binaries will be attached as artifacts to a sucessful workflow run.
|
The resulting binaries will be attached as artifacts to a sucessful workflow run.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
Sample projects for both Godot 3.4.x and Godot 4.x are provided in the `example/` and `example-v4/` folders respectively. They illustrate all spine-godot functionality and can be opened and exported with the pre-built or custom build Godot editor and export template binaries.
|
Sample projects for both Godot 3.5.x and Godot 4.x are provided in the `example/` and `example-v4/` folders respectively. They illustrate all spine-godot functionality and can be opened and exported with the pre-built or custom build Godot editor and export template binaries.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -12,9 +12,9 @@ config_version=5
|
|||||||
|
|
||||||
config/name="spine-godot-examples"
|
config/name="spine-godot-examples"
|
||||||
run/main_scene="res://examples/08-animation-player/animation-player.tscn"
|
run/main_scene="res://examples/08-animation-player/animation-player.tscn"
|
||||||
|
config/features=PackedStringArray("4.0")
|
||||||
run/low_processor_mode=true
|
run/low_processor_mode=true
|
||||||
config/icon="res://icon.png"
|
config/icon="res://icon.png"
|
||||||
config/features=PackedStringArray("4.0")
|
|
||||||
|
|
||||||
[global]
|
[global]
|
||||||
|
|
||||||
|
|||||||
@ -487,7 +487,7 @@ float SpineAnimationTrack::get_alpha() {
|
|||||||
return alpha;
|
return alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpineAnimationTrack::set_attachment_threshold(bool _attachment_threshold) {
|
void SpineAnimationTrack::set_attachment_threshold(float _attachment_threshold) {
|
||||||
attachment_threshold = _attachment_threshold;
|
attachment_threshold = _attachment_threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -495,7 +495,7 @@ float SpineAnimationTrack::get_attachment_threshold() {
|
|||||||
return attachment_threshold;
|
return attachment_threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpineAnimationTrack::set_draw_order_threshold(bool _draw_order_threshold) {
|
void SpineAnimationTrack::set_draw_order_threshold(float _draw_order_threshold) {
|
||||||
draw_order_threshold = _draw_order_threshold;
|
draw_order_threshold = _draw_order_threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -113,11 +113,11 @@ public:
|
|||||||
|
|
||||||
float get_alpha();
|
float get_alpha();
|
||||||
|
|
||||||
void set_attachment_threshold(bool _attachment_threshold);
|
void set_attachment_threshold(float _attachment_threshold);
|
||||||
|
|
||||||
float get_attachment_threshold();
|
float get_attachment_threshold();
|
||||||
|
|
||||||
void set_draw_order_threshold(bool _draw_order_threshold);
|
void set_draw_order_threshold(float _draw_order_threshold);
|
||||||
|
|
||||||
float get_draw_order_threshold();
|
float get_draw_order_threshold();
|
||||||
|
|
||||||
|
|||||||
@ -254,7 +254,11 @@ bool SpineAtlasResourceFormatLoader::handles_type(const String &type) const {
|
|||||||
return type == "SpineAtlasResource" || ClassDB::is_parent_class(type, "SpineAtlasResource");
|
return type == "SpineAtlasResource" || ClassDB::is_parent_class(type, "SpineAtlasResource");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
Error SpineAtlasResourceFormatSaver::save(const RES &resource, const String &path, uint32_t flags) {
|
||||||
|
#else
|
||||||
Error SpineAtlasResourceFormatSaver::save(const String &path, const RES &resource, uint32_t flags) {
|
Error SpineAtlasResourceFormatSaver::save(const String &path, const RES &resource, uint32_t flags) {
|
||||||
|
#endif
|
||||||
Ref<SpineAtlasResource> res = resource;
|
Ref<SpineAtlasResource> res = resource;
|
||||||
return res->save_to_file(path);
|
return res->save_to_file(path);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,7 +97,11 @@ class SpineAtlasResourceFormatSaver : public ResourceFormatSaver {
|
|||||||
GDCLASS(SpineAtlasResourceFormatSaver, ResourceFormatSaver)
|
GDCLASS(SpineAtlasResourceFormatSaver, ResourceFormatSaver)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
Error save(const RES &resource, const String &path, uint32_t flags) override;
|
||||||
|
#else
|
||||||
Error save(const String &path, const RES &resource, uint32_t flags) override;
|
Error save(const String &path, const RES &resource, uint32_t flags) override;
|
||||||
|
#endif
|
||||||
|
|
||||||
void get_recognized_extensions(const RES &resource, List<String> *extensions) const override;
|
void get_recognized_extensions(const RES &resource, List<String> *extensions) const override;
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,11 @@ Error SpineAtlasResourceImportPlugin::import(const String &source_file, const St
|
|||||||
atlas->load_from_atlas_file(source_file);
|
atlas->load_from_atlas_file(source_file);
|
||||||
|
|
||||||
String file_name = vformat("%s.%s", save_path, get_save_extension());
|
String file_name = vformat("%s.%s", save_path, get_save_extension());
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
auto error = ResourceSaver::save(atlas, file_name);
|
||||||
|
#else
|
||||||
auto error = ResourceSaver::save(file_name, atlas);
|
auto error = ResourceSaver::save(file_name, atlas);
|
||||||
|
#endif
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +74,11 @@ Error SpineJsonResourceImportPlugin::import(const String &source_file, const Str
|
|||||||
skeleton_file_res->load_from_file(source_file);
|
skeleton_file_res->load_from_file(source_file);
|
||||||
|
|
||||||
String file_name = vformat("%s.%s", save_path, get_save_extension());
|
String file_name = vformat("%s.%s", save_path, get_save_extension());
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
auto error = ResourceSaver::save(skeleton_file_res, file_name);
|
||||||
|
#else
|
||||||
auto error = ResourceSaver::save(file_name, skeleton_file_res);
|
auto error = ResourceSaver::save(file_name, skeleton_file_res);
|
||||||
|
#endif
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +91,11 @@ Error SpineBinaryResourceImportPlugin::import(const String &source_file, const S
|
|||||||
skeleton_file_res->load_from_file(source_file);
|
skeleton_file_res->load_from_file(source_file);
|
||||||
|
|
||||||
String file_name = vformat("%s.%s", save_path, get_save_extension());
|
String file_name = vformat("%s.%s", save_path, get_save_extension());
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
auto error = ResourceSaver::save(skeleton_file_res, file_name);
|
||||||
|
#else
|
||||||
auto error = ResourceSaver::save(file_name, skeleton_file_res);
|
auto error = ResourceSaver::save(file_name, skeleton_file_res);
|
||||||
|
#endif
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +217,7 @@ void SpineEditorPropertyAnimationMixes::update_property() {
|
|||||||
hbox->add_child(delete_button);
|
hbox->add_child(delete_button);
|
||||||
delete_button->set_text("Remove");
|
delete_button->set_text("Remove");
|
||||||
#if VERSION_MAJOR > 3
|
#if VERSION_MAJOR > 3
|
||||||
delete_button->connect("pressed", callable_mp(this, &SpineEditorPropertyAnimationMixes::delete_mix), varray(i));
|
delete_button->connect("pressed", callable_mp(this, &SpineEditorPropertyAnimationMixes::delete_mix), i);
|
||||||
#else
|
#else
|
||||||
delete_button->connect("pressed", this, "delete_mix", varray(i));
|
delete_button->connect("pressed", this, "delete_mix", varray(i));
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -94,7 +94,11 @@ bool SpineSkeletonFileResourceFormatLoader::handles_type(const String &type) con
|
|||||||
return type == "SpineSkeletonFileResource" || ClassDB::is_parent_class(type, "SpineSkeletonFileResource");
|
return type == "SpineSkeletonFileResource" || ClassDB::is_parent_class(type, "SpineSkeletonFileResource");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
Error SpineSkeletonFileResourceFormatSaver::save(const RES &resource, const String &path, uint32_t flags) {
|
||||||
|
#else
|
||||||
Error SpineSkeletonFileResourceFormatSaver::save(const String &path, const RES &resource, uint32_t flags) {
|
Error SpineSkeletonFileResourceFormatSaver::save(const String &path, const RES &resource, uint32_t flags) {
|
||||||
|
#endif
|
||||||
Ref<SpineSkeletonFileResource> res = resource;
|
Ref<SpineSkeletonFileResource> res = resource;
|
||||||
Error error = res->save_to_file(path);
|
Error error = res->save_to_file(path);
|
||||||
return error;
|
return error;
|
||||||
|
|||||||
@ -75,7 +75,11 @@ class SpineSkeletonFileResourceFormatSaver : public ResourceFormatSaver {
|
|||||||
GDCLASS(SpineSkeletonFileResourceFormatSaver, ResourceFormatSaver);
|
GDCLASS(SpineSkeletonFileResourceFormatSaver, ResourceFormatSaver);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
|
Error save(const RES &resource, const String &path, uint32_t flags) override;
|
||||||
|
#else
|
||||||
Error save(const String &path, const RES &resource, uint32_t flags) override;
|
Error save(const String &path, const RES &resource, uint32_t flags) override;
|
||||||
|
#endif
|
||||||
|
|
||||||
void get_recognized_extensions(const RES &resource, List<String> *p_extensions) const override;
|
void get_recognized_extensions(const RES &resource, List<String> *p_extensions) const override;
|
||||||
|
|
||||||
|
|||||||
@ -831,12 +831,21 @@ void SpineSprite::draw() {
|
|||||||
auto global_scale = get_global_scale();
|
auto global_scale = get_global_scale();
|
||||||
draw_set_transform(mouse_position + Vector2(20, 0), -get_global_rotation(), Vector2(inverse_zoom * (1 / global_scale.x), inverse_zoom * (1 / global_scale.y)));
|
draw_set_transform(mouse_position + Vector2(20, 0), -get_global_rotation(), Vector2(inverse_zoom * (1 / global_scale.x), inverse_zoom * (1 / global_scale.y)));
|
||||||
|
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
float line_height = default_font->get_height(Font::DEFAULT_FONT_SIZE) + default_font->get_descent(Font::DEFAULT_FONT_SIZE);
|
float line_height = default_font->get_height(Font::DEFAULT_FONT_SIZE) + default_font->get_descent(Font::DEFAULT_FONT_SIZE);
|
||||||
|
#else
|
||||||
|
float line_height = default_font->get_height() + default_font->get_descent();
|
||||||
|
#endif
|
||||||
float rect_width = 0;
|
float rect_width = 0;
|
||||||
for (int i = 0; i < hover_text_lines.size(); i++) {
|
for (int i = 0; i < hover_text_lines.size(); i++) {
|
||||||
rect_width = MAX(rect_width, default_font->get_string_size(hover_text_lines[i]).x);
|
rect_width = MAX(rect_width, default_font->get_string_size(hover_text_lines[i]).x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if VERSION_MAJOR > 3
|
||||||
Rect2 background_rect(0, -default_font->get_height(Font::DEFAULT_FONT_SIZE) - 5, rect_width + 20, line_height * hover_text_lines.size() + 10);
|
Rect2 background_rect(0, -default_font->get_height(Font::DEFAULT_FONT_SIZE) - 5, rect_width + 20, line_height * hover_text_lines.size() + 10);
|
||||||
|
#else
|
||||||
|
Rect2 background_rect(0, -default_font->get_height() - 5, rect_width + 20, line_height * hover_text_lines.size() + 10);
|
||||||
|
#endif
|
||||||
if (hover_text_lines.size() > 0) draw_rect(background_rect, Color(0, 0, 0, 0.8));
|
if (hover_text_lines.size() > 0) draw_rect(background_rect, Color(0, 0, 0, 0.8));
|
||||||
for (int i = 0; i < hover_text_lines.size(); i++) {
|
for (int i = 0; i < hover_text_lines.size(); i++) {
|
||||||
#if VERSION_MAJOR > 3
|
#if VERSION_MAJOR > 3
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user