mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-08 00:04:54 +08:00
Merge branch '3.6' into 3.7-beta
This commit is contained in:
commit
064a8b1377
@ -93,7 +93,8 @@ static float toColor (const char* value, int index) {
|
||||
char *error;
|
||||
int color;
|
||||
|
||||
if (strlen(value) / 2 < index) return -1;
|
||||
if (index >= strlen(value) / 2)
|
||||
return -1;
|
||||
value += index * 2;
|
||||
|
||||
digits[0] = *value;
|
||||
|
||||
@ -2,14 +2,14 @@ cmake_minimum_required(VERSION 2.8)
|
||||
set(EXAMPLE_DIR "${CMAKE_CURRENT_LIST_DIR}/example")
|
||||
if (NOT EXISTS ${EXAMPLE_DIR}/cocos2d)
|
||||
message("Downloading cocos2dx, this may take some time!")
|
||||
file(DOWNLOAD "http://www.cocos2d-x.org/filedown/start/364" "${EXAMPLE_DIR}/cocos2dx.zip")
|
||||
file(DOWNLOAD "http://cdn.cocos2d-x.org/cocos2d-x-3.16.zip" "${EXAMPLE_DIR}/cocos2dx.zip")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar x ${EXAMPLE_DIR}/cocos2dx.zip
|
||||
WORKING_DIRECTORY ${EXAMPLE_DIR}
|
||||
)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E rename
|
||||
"${EXAMPLE_DIR}/cocos2d-x-3.14.1" "${EXAMPLE_DIR}/cocos2d"
|
||||
"${EXAMPLE_DIR}/cocos2d-x-3.16" "${EXAMPLE_DIR}/cocos2d"
|
||||
)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory "${EXAMPLE_DIR}/cocos2d/cocos/editor-support/spine"
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,96 +0,0 @@
|
||||
<html>
|
||||
<script src="../../build/spine-webgl.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
|
||||
<style>
|
||||
/* Dead Simple Grid (c) 2015 Vladimir Agafonkin */
|
||||
|
||||
.row .row { margin: 0 -1.5em; }
|
||||
.col { padding: 0 1.5em; }
|
||||
|
||||
.row:after {
|
||||
content: "";
|
||||
clear: both;
|
||||
display: table;
|
||||
}
|
||||
|
||||
@media only screen { .col {
|
||||
float: left;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}}
|
||||
|
||||
@media only screen and (min-width: 30em) {
|
||||
.content { width: 50%; height: 100%; padding: 0 }
|
||||
.sidebar { width: 50%; height: 100%; padding: 0 }
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border:none;
|
||||
}
|
||||
.panel {
|
||||
width: 100%;
|
||||
height: 50%;
|
||||
}
|
||||
.buttons {
|
||||
position: absolute;
|
||||
top: 5; left: 5;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="buttons">
|
||||
<button id="playButton">Run</button>
|
||||
<button id="stopButton">Stop</button>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col content">
|
||||
<iframe id="iframe"></iframe>
|
||||
</div>
|
||||
<div class="col sidebar">
|
||||
<div id="codeJs" class="panel"></div>
|
||||
<div id="codeHtml" class="panel"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script id="initialJs" type="text/plain">
|
||||
var canvas = document.getElementById("canvas");
|
||||
var config = { alpha: false };
|
||||
var context = new spine.webgl.ManagedWebGLRenderingContext(canvas, config);
|
||||
var gl = context.gl;
|
||||
|
||||
function render() {
|
||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
|
||||
requestAnimationFrame(render);
|
||||
}
|
||||
|
||||
requestAnimationFrame(render);
|
||||
</script>
|
||||
|
||||
<script src="js/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var editorJs = ace.edit("codeJs");
|
||||
editorJs.setTheme("ace/theme/monokai");
|
||||
editorJs.getSession().setMode("ace/mode/javascript");
|
||||
editorJs.setValue(document.getElementById("initialJs").innerHTML);
|
||||
|
||||
var editorHtml = ace.edit("codeHtml");
|
||||
editorHtml.setTheme("ace/theme/monokai");
|
||||
editorHtml.getSession().setMode("ace/mode/html");
|
||||
editorHtml.setValue('<script src="../../build/spine-webgl.js"><\/script>\n<canvas id="canvas" style="width: 100%; height: 98vh;"></canvas>');
|
||||
|
||||
$("#playButton").click(function() {
|
||||
var iframe = document.getElementById("iframe");
|
||||
var source = "<html><body>" + editorHtml.getValue() + "<script>" + editorJs.getValue() + "<\/script></body></html>";
|
||||
iframe.srcdoc = source;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
||||
@ -84,8 +84,8 @@
|
||||
var ivanShader = loadIvanShader(context, shader);
|
||||
|
||||
var assetManager = new spine.webgl.AssetManager(context);
|
||||
assetManager.loadTexture("assets/spineboy.png");
|
||||
assetManager.loadTexture("assets/spineboy-pma.png");
|
||||
assetManager.loadTexture("../example/assets/spineboy.png");
|
||||
assetManager.loadTexture("../example/assets/spineboy-pma.png");
|
||||
|
||||
var camMatrix = new spine.webgl.Matrix4();
|
||||
|
||||
@ -95,8 +95,8 @@
|
||||
|
||||
function load () {
|
||||
if (assetManager.isLoadingComplete()) {
|
||||
texture = assetManager.get("assets/spineboy.png");
|
||||
texturePma = assetManager.get("assets/spineboy-pma.png");
|
||||
texture = assetManager.get("../example/assets/spineboy.png");
|
||||
texturePma = assetManager.get("../example/assets/spineboy-pma.png");
|
||||
requestAnimationFrame(render);
|
||||
} else requestAnimationFrame(load);
|
||||
}
|
||||
@ -45,7 +45,7 @@ function init() {
|
||||
swirlEffect.centerY = 200;
|
||||
swirlEffect.radius = 500;
|
||||
|
||||
assetManager = new spine.webgl.AssetManager(context, "assets/");
|
||||
assetManager = new spine.webgl.AssetManager(context, "../example/assets/");
|
||||
var textureLoader = function(img) { return new spine.webgl.GLTexture(gl, img); };
|
||||
input = new spine.webgl.Input(canvas);
|
||||
|
||||
@ -30,7 +30,7 @@ mesh.setIndices(indices);
|
||||
var shader = spine.webgl.Shader.newTwoColoredTextured(context);
|
||||
|
||||
var assetManager = new spine.webgl.AssetManager(context);
|
||||
assetManager.loadTexture("assets/spineboy.png");
|
||||
assetManager.loadTexture("../example/assets/spineboy.png");
|
||||
|
||||
var camMatrix = new spine.webgl.Matrix4();
|
||||
|
||||
@ -40,7 +40,7 @@ requestAnimationFrame(load);
|
||||
|
||||
function load () {
|
||||
if (assetManager.isLoadingComplete()) {
|
||||
texture = assetManager.get("assets/spineboy.png");
|
||||
texture = assetManager.get("../example/assets/spineboy.png");
|
||||
requestAnimationFrame(render);
|
||||
} else requestAnimationFrame(load);
|
||||
}
|
||||
@ -150,10 +150,18 @@ float USpineSkeletonAnimationComponent::GetTimeScale() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// we need to disable the queue when setting or adding animations, see #1037
|
||||
extern "C" {
|
||||
void _spAnimationState_disableQueue(spAnimationState* state);
|
||||
void _spAnimationState_enableQueue(spAnimationState* state);
|
||||
}
|
||||
|
||||
UTrackEntry* USpineSkeletonAnimationComponent::SetAnimation (int trackIndex, FString animationName, bool loop) {
|
||||
CheckState();
|
||||
if (state && spSkeletonData_findAnimation(skeleton->data, TCHAR_TO_UTF8(*animationName))) {
|
||||
_spAnimationState_disableQueue(state);
|
||||
spTrackEntry* entry = spAnimationState_setAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0);
|
||||
_spAnimationState_enableQueue(state);
|
||||
UTrackEntry* uEntry = NewObject<UTrackEntry>();
|
||||
uEntry->SetTrackEntry(entry);
|
||||
trackEntries.Add(uEntry);
|
||||
@ -165,7 +173,9 @@ UTrackEntry* USpineSkeletonAnimationComponent::SetAnimation (int trackIndex, FSt
|
||||
UTrackEntry* USpineSkeletonAnimationComponent::AddAnimation (int trackIndex, FString animationName, bool loop, float delay) {
|
||||
CheckState();
|
||||
if (state && spSkeletonData_findAnimation(skeleton->data, TCHAR_TO_UTF8(*animationName))) {
|
||||
_spAnimationState_disableQueue(state);
|
||||
spTrackEntry* entry = spAnimationState_addAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0, delay);
|
||||
_spAnimationState_enableQueue(state);
|
||||
UTrackEntry* uEntry = NewObject<UTrackEntry>();
|
||||
uEntry->SetTrackEntry(entry);
|
||||
trackEntries.Add(uEntry);
|
||||
|
||||
@ -399,7 +399,7 @@ namespace Spine.Unity.Modules.AttachmentTools {
|
||||
/// <param name = "outputAttachments">The List(Attachment) to populate with the newly created Attachment objects.</param>
|
||||
///
|
||||
/// <param name="materialPropertySource">May be null. If no Material property source is provided, no special </param>
|
||||
public static void GetRepackedAttachments (List<Attachment> sourceAttachments, List<Attachment> outputAttachments, Material materialPropertySource, out Material outputMaterial, out Texture2D outputTexture, int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps, string newAssetName = "Repacked Attachments") {
|
||||
public static void GetRepackedAttachments (List<Attachment> sourceAttachments, List<Attachment> outputAttachments, Material materialPropertySource, out Material outputMaterial, out Texture2D outputTexture, int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps, string newAssetName = "Repacked Attachments", bool clearCache = false) {
|
||||
if (sourceAttachments == null) throw new System.ArgumentNullException("sourceAttachments");
|
||||
if (outputAttachments == null) throw new System.ArgumentNullException("outputAttachments");
|
||||
|
||||
@ -468,8 +468,8 @@ namespace Spine.Unity.Modules.AttachmentTools {
|
||||
}
|
||||
|
||||
// Clean up.
|
||||
foreach (var ttp in texturesToPack)
|
||||
UnityEngine.Object.Destroy(ttp);
|
||||
if (clearCache)
|
||||
AtlasUtilities.ClearCache();
|
||||
|
||||
outputTexture = newTexture;
|
||||
outputMaterial = newMaterial;
|
||||
@ -485,7 +485,7 @@ namespace Spine.Unity.Modules.AttachmentTools {
|
||||
/// <summary>
|
||||
/// Creates and populates a duplicate skin with cloned attachments that are backed by a new packed texture atlas comprised of all the regions from the original skin.</summary>
|
||||
/// <remarks>No Spine.Atlas object is created so there is no way to find AtlasRegions except through the Attachments using them.</remarks>
|
||||
public static Skin GetRepackedSkin (this Skin o, string newName, Shader shader, out Material outputMaterial, out Texture2D outputTexture, int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps, Material materialPropertySource = null) {
|
||||
public static Skin GetRepackedSkin (this Skin o, string newName, Shader shader, out Material outputMaterial, out Texture2D outputTexture, int maxAtlasSize = 1024, int padding = 2, TextureFormat textureFormat = SpineTextureFormat, bool mipmaps = UseMipMaps, Material materialPropertySource = null, bool clearCache = false) {
|
||||
var skinAttachments = o.Attachments;
|
||||
var newSkin = new Skin(newName);
|
||||
|
||||
@ -553,8 +553,8 @@ namespace Spine.Unity.Modules.AttachmentTools {
|
||||
}
|
||||
|
||||
// Clean up.
|
||||
foreach (var ttp in texturesToPack)
|
||||
UnityEngine.Object.Destroy(ttp);
|
||||
if (clearCache)
|
||||
AtlasUtilities.ClearCache();
|
||||
|
||||
outputTexture = newTexture;
|
||||
outputMaterial = newMaterial;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user