Merge branch 'EsotericSoftware/3.6' into 3.6

This commit is contained in:
Stephen Gowen 2017-10-20 15:00:51 -04:00
commit f2b9e49d81
29 changed files with 167 additions and 86 deletions

View File

@ -33,6 +33,7 @@ package spine {
public class PathConstraint implements Constraint { public class PathConstraint implements Constraint {
private static const NONE : int = -1, BEFORE : int = -2, AFTER : int = -3; private static const NONE : int = -1, BEFORE : int = -2, AFTER : int = -3;
private static const epsilon : Number = 0.00001;
internal var _data : PathConstraintData; internal var _data : PathConstraintData;
internal var _bones : Vector.<Bone>; internal var _bones : Vector.<Bone>;
public var target : Slot; public var target : Slot;
@ -88,11 +89,15 @@ package spine {
for (var i : int = 0, n : int = spacesCount - 1; i < n;) { for (var i : int = 0, n : int = spacesCount - 1; i < n;) {
var bone : Bone = bones[i]; var bone : Bone = bones[i];
var setupLength : Number = bone.data.length; var setupLength : Number = bone.data.length;
if (setupLength == 0) setupLength = 0.000000001; if (setupLength < epsilon) {
var x : Number = setupLength * bone.a, y : Number = setupLength * bone.c; if (scale) lengths[i] = 0;
var length : Number = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) lengths[i] = length; } else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; var x : Number = setupLength * bone.a, y : Number = setupLength * bone.c;
var length : Number = Math.sqrt(x * x + y * y);
if (scale) lengths[i] = length;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
}
} }
} else { } else {
for (i = 1; i < spacesCount; i++) for (i = 1; i < spacesCount; i++)

View File

@ -35,6 +35,7 @@
#define PATHCONSTRAINT_NONE -1 #define PATHCONSTRAINT_NONE -1
#define PATHCONSTRAINT_BEFORE -2 #define PATHCONSTRAINT_BEFORE -2
#define PATHCONSTRAINT_AFTER -3 #define PATHCONSTRAINT_AFTER -3
#define EPSILON 0.00001f
spPathConstraint* spPathConstraint_create (spPathConstraintData* data, const spSkeleton* skeleton) { spPathConstraint* spPathConstraint_create (spPathConstraintData* data, const spSkeleton* skeleton) {
int i; int i;
@ -113,13 +114,17 @@ void spPathConstraint_apply (spPathConstraint* self) {
lengths = self->lengths; lengths = self->lengths;
} }
for (i = 0, n = spacesCount - 1; i < n;) { for (i = 0, n = spacesCount - 1; i < n;) {
spBone* bone = bones[i]; spBone *bone = bones[i];
setupLength = bone->data->length; setupLength = bone->data->length;
if (setupLength == 0) setupLength = 0.000000001f; if (setupLength < EPSILON) {
x = setupLength * bone->a, y = setupLength * bone->c; if (scale) lengths[i] = 0;
length = SQRT(x * x + y * y); spaces[++i] = 0;
if (scale) lengths[i] = length; } else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; x = setupLength * bone->a, y = setupLength * bone->c;
length = SQRT(x * x + y * y);
if (scale) lengths[i] = length;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
}
} }
} else { } else {
for (i = 1; i < spacesCount; i++) { for (i = 1; i < spacesCount; i++) {

View File

@ -55,6 +55,7 @@ PathConstraint.__index = PathConstraint
PathConstraint.NONE = -1 PathConstraint.NONE = -1
PathConstraint.BEFORE = -2 PathConstraint.BEFORE = -2
PathConstraint.AFTER = -3 PathConstraint.AFTER = -3
PathConstraint.epsilon = 0.00001
function PathConstraint.new (data, skeleton) function PathConstraint.new (data, skeleton)
if not data then error("data cannot be nil", 2) end if not data then error("data cannot be nil", 2) end
@ -118,13 +119,22 @@ function PathConstraint:update ()
while i < n do while i < n do
local bone = bones[i + 1]; local bone = bones[i + 1];
local setupLength = bone.data.length local setupLength = bone.data.length
if setupLength == 0 then setupLength = 0.0000001 end if setupLength < PathConstraint.epsilon then
local x = setupLength * bone.a if scale then lengths[i + 1] = 0 end
local y = setupLength * bone.c i = i + 1
local length = math_sqrt(x * x + y * y) spaces[i + 1] = 0
if scale then lengths[i + 1] = length end else
i = i + 1 local x = setupLength * bone.a
if lengthSpacing then spaces[i + 1] = (setupLength + spacing) * length / setupLength else spaces[i + 1] = spacing * length / setupLength end local y = setupLength * bone.c
local length = math_sqrt(x * x + y * y)
if scale then lengths[i + 1] = length end
i = i + 1
if lengthSpacing then
spaces[i + 1] = (setupLength + spacing) * length / setupLength
else
spaces[i + 1] = spacing * length / setupLength
end
end
end end
else else
local i = 1 local i = 1

View File

@ -752,6 +752,7 @@ declare module spine {
static NONE: number; static NONE: number;
static BEFORE: number; static BEFORE: number;
static AFTER: number; static AFTER: number;
static epsilon: number;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
target: Slot; target: Slot;

View File

@ -3290,13 +3290,18 @@ var spine;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
if (setupLength == 0) if (setupLength < PathConstraint.epsilon) {
setupLength = 0.0000001; if (scale)
var x = setupLength * bone.a, y = setupLength * bone.c; lengths[i] = 0;
var length_1 = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) }
lengths[i] = length_1; else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y);
if (scale)
lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
}
} }
} }
else { else {
@ -3602,6 +3607,7 @@ var spine;
PathConstraint.NONE = -1; PathConstraint.NONE = -1;
PathConstraint.BEFORE = -2; PathConstraint.BEFORE = -2;
PathConstraint.AFTER = -3; PathConstraint.AFTER = -3;
PathConstraint.epsilon = 0.00001;
return PathConstraint; return PathConstraint;
}()); }());
spine.PathConstraint = PathConstraint; spine.PathConstraint = PathConstraint;

File diff suppressed because one or more lines are too long

View File

@ -752,6 +752,7 @@ declare module spine {
static NONE: number; static NONE: number;
static BEFORE: number; static BEFORE: number;
static AFTER: number; static AFTER: number;
static epsilon: number;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
target: Slot; target: Slot;

View File

@ -3290,13 +3290,18 @@ var spine;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
if (setupLength == 0) if (setupLength < PathConstraint.epsilon) {
setupLength = 0.0000001; if (scale)
var x = setupLength * bone.a, y = setupLength * bone.c; lengths[i] = 0;
var length_1 = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) }
lengths[i] = length_1; else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y);
if (scale)
lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
}
} }
} }
else { else {
@ -3602,6 +3607,7 @@ var spine;
PathConstraint.NONE = -1; PathConstraint.NONE = -1;
PathConstraint.BEFORE = -2; PathConstraint.BEFORE = -2;
PathConstraint.AFTER = -3; PathConstraint.AFTER = -3;
PathConstraint.epsilon = 0.00001;
return PathConstraint; return PathConstraint;
}()); }());
spine.PathConstraint = PathConstraint; spine.PathConstraint = PathConstraint;

File diff suppressed because one or more lines are too long

View File

@ -681,6 +681,7 @@ declare module spine {
static NONE: number; static NONE: number;
static BEFORE: number; static BEFORE: number;
static AFTER: number; static AFTER: number;
static epsilon: number;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
target: Slot; target: Slot;

View File

@ -2969,13 +2969,18 @@ var spine;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
if (setupLength == 0) if (setupLength < PathConstraint.epsilon) {
setupLength = 0.0000001; if (scale)
var x = setupLength * bone.a, y = setupLength * bone.c; lengths[i] = 0;
var length_1 = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) }
lengths[i] = length_1; else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y);
if (scale)
lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
}
} }
} }
else { else {
@ -3281,6 +3286,7 @@ var spine;
PathConstraint.NONE = -1; PathConstraint.NONE = -1;
PathConstraint.BEFORE = -2; PathConstraint.BEFORE = -2;
PathConstraint.AFTER = -3; PathConstraint.AFTER = -3;
PathConstraint.epsilon = 0.00001;
return PathConstraint; return PathConstraint;
}()); }());
spine.PathConstraint = PathConstraint; spine.PathConstraint = PathConstraint;

File diff suppressed because one or more lines are too long

View File

@ -681,6 +681,7 @@ declare module spine {
static NONE: number; static NONE: number;
static BEFORE: number; static BEFORE: number;
static AFTER: number; static AFTER: number;
static epsilon: number;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
target: Slot; target: Slot;

View File

@ -2969,13 +2969,18 @@ var spine;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
if (setupLength == 0) if (setupLength < PathConstraint.epsilon) {
setupLength = 0.0000001; if (scale)
var x = setupLength * bone.a, y = setupLength * bone.c; lengths[i] = 0;
var length_1 = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) }
lengths[i] = length_1; else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y);
if (scale)
lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
}
} }
} }
else { else {
@ -3281,6 +3286,7 @@ var spine;
PathConstraint.NONE = -1; PathConstraint.NONE = -1;
PathConstraint.BEFORE = -2; PathConstraint.BEFORE = -2;
PathConstraint.AFTER = -3; PathConstraint.AFTER = -3;
PathConstraint.epsilon = 0.00001;
return PathConstraint; return PathConstraint;
}()); }());
spine.PathConstraint = PathConstraint; spine.PathConstraint = PathConstraint;

File diff suppressed because one or more lines are too long

View File

@ -681,6 +681,7 @@ declare module spine {
static NONE: number; static NONE: number;
static BEFORE: number; static BEFORE: number;
static AFTER: number; static AFTER: number;
static epsilon: number;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
target: Slot; target: Slot;

View File

@ -2969,13 +2969,18 @@ var spine;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
if (setupLength == 0) if (setupLength < PathConstraint.epsilon) {
setupLength = 0.0000001; if (scale)
var x = setupLength * bone.a, y = setupLength * bone.c; lengths[i] = 0;
var length_1 = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) }
lengths[i] = length_1; else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y);
if (scale)
lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
}
} }
} }
else { else {
@ -3281,6 +3286,7 @@ var spine;
PathConstraint.NONE = -1; PathConstraint.NONE = -1;
PathConstraint.BEFORE = -2; PathConstraint.BEFORE = -2;
PathConstraint.AFTER = -3; PathConstraint.AFTER = -3;
PathConstraint.epsilon = 0.00001;
return PathConstraint; return PathConstraint;
}()); }());
spine.PathConstraint = PathConstraint; spine.PathConstraint = PathConstraint;

File diff suppressed because one or more lines are too long

View File

@ -681,6 +681,7 @@ declare module spine {
static NONE: number; static NONE: number;
static BEFORE: number; static BEFORE: number;
static AFTER: number; static AFTER: number;
static epsilon: number;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
target: Slot; target: Slot;

View File

@ -2969,13 +2969,18 @@ var spine;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
if (setupLength == 0) if (setupLength < PathConstraint.epsilon) {
setupLength = 0.0000001; if (scale)
var x = setupLength * bone.a, y = setupLength * bone.c; lengths[i] = 0;
var length_1 = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) }
lengths[i] = length_1; else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y);
if (scale)
lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
}
} }
} }
else { else {
@ -3281,6 +3286,7 @@ var spine;
PathConstraint.NONE = -1; PathConstraint.NONE = -1;
PathConstraint.BEFORE = -2; PathConstraint.BEFORE = -2;
PathConstraint.AFTER = -3; PathConstraint.AFTER = -3;
PathConstraint.epsilon = 0.00001;
return PathConstraint; return PathConstraint;
}()); }());
spine.PathConstraint = PathConstraint; spine.PathConstraint = PathConstraint;

File diff suppressed because one or more lines are too long

View File

@ -31,6 +31,7 @@
module spine { module spine {
export class PathConstraint implements Constraint { export class PathConstraint implements Constraint {
static NONE = -1; static BEFORE = -2; static AFTER = -3; static NONE = -1; static BEFORE = -2; static AFTER = -3;
static epsilon = 0.00001;
data: PathConstraintData; data: PathConstraintData;
bones: Array<Bone>; bones: Array<Bone>;
@ -81,11 +82,15 @@ module spine {
for (let i = 0, n = spacesCount - 1; i < n;) { for (let i = 0, n = spacesCount - 1; i < n;) {
let bone = bones[i]; let bone = bones[i];
let setupLength = bone.data.length; let setupLength = bone.data.length;
if (setupLength == 0) setupLength = 0.0000001; if (setupLength < PathConstraint.epsilon) {
let x = setupLength * bone.a, y = setupLength * bone.c; if (scale) lengths[i] = 0;
let length = Math.sqrt(x * x + y * y); spaces[++i] = 0;
if (scale) lengths[i] = length; } else {
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; let x = setupLength * bone.a, y = setupLength * bone.c;
let length = Math.sqrt(x * x + y * y);
if (scale) lengths[i] = length;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
}
} }
} else { } else {
for (let i = 1; i < spacesCount; i++) for (let i = 1; i < spacesCount; i++)

View File

@ -230,9 +230,16 @@ namespace Spine.Unity.Editor {
EditorApplication.hierarchyWindowItemOnGUI += HierarchyDragAndDrop; EditorApplication.hierarchyWindowItemOnGUI += HierarchyDragAndDrop;
// Hierarchy Icons // Hierarchy Icons
#if UNITY_2017_2_OR_NEWER
EditorApplication.playModeStateChanged -= HierarchyIconsOnPlaymodeStateChanged;
EditorApplication.playModeStateChanged += HierarchyIconsOnPlaymodeStateChanged;
HierarchyIconsOnPlaymodeStateChanged(PlayModeStateChange.EnteredEditMode);
#else
EditorApplication.playmodeStateChanged -= HierarchyIconsOnPlaymodeStateChanged; EditorApplication.playmodeStateChanged -= HierarchyIconsOnPlaymodeStateChanged;
EditorApplication.playmodeStateChanged += HierarchyIconsOnPlaymodeStateChanged; EditorApplication.playmodeStateChanged += HierarchyIconsOnPlaymodeStateChanged;
HierarchyIconsOnPlaymodeStateChanged(); HierarchyIconsOnPlaymodeStateChanged();
#endif
initialized = true; initialized = true;
} }
@ -255,7 +262,11 @@ namespace Spine.Unity.Editor {
showHierarchyIcons = EditorGUILayout.Toggle(new GUIContent("Show Hierarchy Icons", "Show relevant icons on GameObjects with Spine Components on them. Disable this if you have large, complex scenes."), showHierarchyIcons); showHierarchyIcons = EditorGUILayout.Toggle(new GUIContent("Show Hierarchy Icons", "Show relevant icons on GameObjects with Spine Components on them. Disable this if you have large, complex scenes."), showHierarchyIcons);
if (EditorGUI.EndChangeCheck()) { if (EditorGUI.EndChangeCheck()) {
EditorPrefs.SetBool(SHOW_HIERARCHY_ICONS_KEY, showHierarchyIcons); EditorPrefs.SetBool(SHOW_HIERARCHY_ICONS_KEY, showHierarchyIcons);
#if UNITY_2017_2_OR_NEWER
HierarchyIconsOnPlaymodeStateChanged(PlayModeStateChange.EnteredEditMode);
#else
HierarchyIconsOnPlaymodeStateChanged(); HierarchyIconsOnPlaymodeStateChanged();
#endif
} }
EditorGUILayout.Separator(); EditorGUILayout.Separator();
@ -496,7 +507,11 @@ namespace Spine.Unity.Editor {
#endregion #endregion
#region Hierarchy #region Hierarchy
#if UNITY_2017_2_OR_NEWER
static void HierarchyIconsOnPlaymodeStateChanged (PlayModeStateChange stateChange) {
#else
static void HierarchyIconsOnPlaymodeStateChanged () { static void HierarchyIconsOnPlaymodeStateChanged () {
#endif
skeletonRendererTable.Clear(); skeletonRendererTable.Clear();
skeletonUtilityBoneTable.Clear(); skeletonUtilityBoneTable.Clear();
boundingBoxFollowerTable.Clear(); boundingBoxFollowerTable.Clear();

View File

@ -113,37 +113,37 @@ namespace Spine.Unity.Modules.AttachmentTools {
#region Runtime RegionAttachments #region Runtime RegionAttachments
/// <summary> /// <summary>
/// Creates a RegionAttachment based on a sprite. This method creates a real, usable AtlasRegion. That AtlasRegion uses a new AtlasPage with the Material provided./// </summary> /// Creates a RegionAttachment based on a sprite. This method creates a real, usable AtlasRegion. That AtlasRegion uses a new AtlasPage with the Material provided./// </summary>
public static RegionAttachment ToRegionAttachment (this Sprite sprite, Material material) { public static RegionAttachment ToRegionAttachment (this Sprite sprite, Material material, float rotation = 0f) {
return sprite.ToRegionAttachment(material.ToSpineAtlasPage()); return sprite.ToRegionAttachment(material.ToSpineAtlasPage(), rotation);
} }
/// <summary> /// <summary>
/// Creates a RegionAttachment based on a sprite. This method creates a real, usable AtlasRegion. That AtlasRegion uses the AtlasPage provided./// </summary> /// Creates a RegionAttachment based on a sprite. This method creates a real, usable AtlasRegion. That AtlasRegion uses the AtlasPage provided./// </summary>
public static RegionAttachment ToRegionAttachment (this Sprite sprite, AtlasPage page) { public static RegionAttachment ToRegionAttachment (this Sprite sprite, AtlasPage page, float rotation = 0f) {
if (sprite == null) throw new System.ArgumentNullException("sprite"); if (sprite == null) throw new System.ArgumentNullException("sprite");
if (page == null) throw new System.ArgumentNullException("page"); if (page == null) throw new System.ArgumentNullException("page");
var region = sprite.ToAtlasRegion(page); var region = sprite.ToAtlasRegion(page);
var unitsPerPixel = 1f / sprite.pixelsPerUnit; var unitsPerPixel = 1f / sprite.pixelsPerUnit;
return region.ToRegionAttachment(sprite.name, unitsPerPixel); return region.ToRegionAttachment(sprite.name, unitsPerPixel, rotation);
} }
/// <summary> /// <summary>
/// Creates a Spine.AtlasRegion that uses a premultiplied alpha duplicate texture of the Sprite's texture data. Returns a RegionAttachment that uses it. Use this if you plan to use a premultiply alpha shader such as "Spine/Skeleton"</summary> /// Creates a Spine.AtlasRegion that uses a premultiplied alpha duplicate texture of the Sprite's texture data. Returns a RegionAttachment that uses it. Use this if you plan to use a premultiply alpha shader such as "Spine/Skeleton"</summary>
public static RegionAttachment ToRegionAttachmentPMAClone (this Sprite sprite, Shader shader, TextureFormat textureFormat = AtlasUtilities.SpineTextureFormat, bool mipmaps = AtlasUtilities.UseMipMaps, Material materialPropertySource = null) { public static RegionAttachment ToRegionAttachmentPMAClone (this Sprite sprite, Shader shader, TextureFormat textureFormat = AtlasUtilities.SpineTextureFormat, bool mipmaps = AtlasUtilities.UseMipMaps, Material materialPropertySource = null, float rotation = 0f) {
if (sprite == null) throw new System.ArgumentNullException("sprite"); if (sprite == null) throw new System.ArgumentNullException("sprite");
if (shader == null) throw new System.ArgumentNullException("shader"); if (shader == null) throw new System.ArgumentNullException("shader");
var region = sprite.ToAtlasRegionPMAClone(shader, textureFormat, mipmaps, materialPropertySource); var region = sprite.ToAtlasRegionPMAClone(shader, textureFormat, mipmaps, materialPropertySource);
var unitsPerPixel = 1f / sprite.pixelsPerUnit; var unitsPerPixel = 1f / sprite.pixelsPerUnit;
return region.ToRegionAttachment(sprite.name, unitsPerPixel); return region.ToRegionAttachment(sprite.name, unitsPerPixel, rotation);
} }
public static RegionAttachment ToRegionAttachmentPMAClone (this Sprite sprite, Material materialPropertySource, TextureFormat textureFormat = AtlasUtilities.SpineTextureFormat, bool mipmaps = AtlasUtilities.UseMipMaps) { public static RegionAttachment ToRegionAttachmentPMAClone (this Sprite sprite, Material materialPropertySource, TextureFormat textureFormat = AtlasUtilities.SpineTextureFormat, bool mipmaps = AtlasUtilities.UseMipMaps, float rotation = 0f) {
return sprite.ToRegionAttachmentPMAClone(materialPropertySource.shader, textureFormat, mipmaps, materialPropertySource); return sprite.ToRegionAttachmentPMAClone(materialPropertySource.shader, textureFormat, mipmaps, materialPropertySource, rotation);
} }
/// <summary> /// <summary>
/// Creates a new RegionAttachment from a given AtlasRegion.</summary> /// Creates a new RegionAttachment from a given AtlasRegion.</summary>
public static RegionAttachment ToRegionAttachment (this AtlasRegion region, string attachmentName, float scale = 0.01f) { public static RegionAttachment ToRegionAttachment (this AtlasRegion region, string attachmentName, float scale = 0.01f, float rotation = 0f) {
if (string.IsNullOrEmpty(attachmentName)) throw new System.ArgumentException("attachmentName can't be null or empty.", "attachmentName"); if (string.IsNullOrEmpty(attachmentName)) throw new System.ArgumentException("attachmentName can't be null or empty.", "attachmentName");
if (region == null) throw new System.ArgumentNullException("region"); if (region == null) throw new System.ArgumentNullException("region");
@ -162,14 +162,13 @@ namespace Spine.Unity.Modules.AttachmentTools {
attachment.Path = region.name; attachment.Path = region.name;
attachment.scaleX = 1; attachment.scaleX = 1;
attachment.scaleY = 1; attachment.scaleY = 1;
attachment.rotation = 0; attachment.rotation = rotation;
attachment.r = 1; attachment.r = 1;
attachment.g = 1; attachment.g = 1;
attachment.b = 1; attachment.b = 1;
attachment.a = 1; attachment.a = 1;
// pass OriginalWidth and OriginalHeight because UpdateOffset uses it in its calculation. // pass OriginalWidth and OriginalHeight because UpdateOffset uses it in its calculation.
attachment.width = attachment.regionOriginalWidth * scale; attachment.width = attachment.regionOriginalWidth * scale;
attachment.height = attachment.regionOriginalHeight * scale; attachment.height = attachment.regionOriginalHeight * scale;

View File

@ -344,8 +344,8 @@ VertexOutput vert(VertexInput input)
output.pos = calculateLocalPos(input.vertex); output.pos = calculateLocalPos(input.vertex);
output.color = calculateVertexColor(input.color); output.color = calculateVertexColor(input.color);
output.texcoord = float3(calculateTextureCoord(input.texcoord), 0); output.texcoord = float3(calculateTextureCoord(input.texcoord), 0);
float3 viewPos = mul(UNITY_MATRIX_MV, input.vertex); float3 viewPos = UnityObjectViewPos(input.vertex); //float3 viewPos = mul(UNITY_MATRIX_MV, input.vertex);
#if defined(FIXED_NORMALS_BACKFACE_RENDERING) || defined(_RIM_LIGHTING) #if defined(FIXED_NORMALS_BACKFACE_RENDERING) || defined(_RIM_LIGHTING)
float4 powWorld = calculateWorldPos(input.vertex); float4 powWorld = calculateWorldPos(input.vertex);
#endif #endif

View File

@ -110,9 +110,9 @@ Shader "Spine/SkeletonGraphic Tint Black (Premultiply Alpha)"
clip (texColor.a - 0.001); clip (texColor.a - 0.001);
#endif #endif
return (texColor * IN.color) + float4(((1-texColor.rgb) * (_Black.rgb + float3(IN.uv1.r, IN.uv1.g, IN.uv2.r)) * texColor.a*_Color.a*i.vertexColor.a), 0); return (texColor * IN.color) + float4(((1-texColor.rgb) * (_Black.rgb + float3(IN.uv1.r, IN.uv1.g, IN.uv2.r)) * texColor.a * _Color.a * IN.color.a), 0);
} }
ENDCG ENDCG
} }
} }
} }