104 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
|  | /****************************************************************************** | ||
|  |  * Spine Runtimes Software License v2.5 | ||
|  |  * | ||
|  |  * Copyright (c) 2013-2016, Esoteric Software | ||
|  |  * All rights reserved. | ||
|  |  * | ||
|  |  * You are granted a perpetual, non-exclusive, non-sublicensable, and | ||
|  |  * non-transferable license to use, install, execute, and perform the Spine | ||
|  |  * Runtimes software and derivative works solely for personal or internal | ||
|  |  * use. Without the written permission of Esoteric Software (see Section 2 of | ||
|  |  * the Spine Software License Agreement), you may not (a) modify, translate, | ||
|  |  * adapt, or develop new applications using the Spine Runtimes or otherwise | ||
|  |  * create derivative works or improvements of the Spine Runtimes or (b) remove, | ||
|  |  * delete, alter, or obscure any trademarks or any copyright, trademark, patent, | ||
|  |  * or other intellectual property or proprietary rights notices on or in the | ||
|  |  * Software, including any copy thereof. Redistributions in binary or source | ||
|  |  * form must include this license and terms. | ||
|  |  * | ||
|  |  * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR | ||
|  |  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
|  |  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | ||
|  |  * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
|  |  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
|  |  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF | ||
|  |  * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | ||
|  |  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
|  |  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
|  |  * POSSIBILITY OF SUCH DAMAGE. | ||
|  |  *****************************************************************************/ | ||
|  | 
 | ||
|  | using System; | ||
|  | 
 | ||
|  | namespace Spine { | ||
|  | 	public class Slot { | ||
|  | 		internal SlotData data; | ||
|  | 		internal Bone bone; | ||
|  | 		internal float r, g, b, a; | ||
|  | 		internal float r2, g2, b2; | ||
|  | 		internal bool hasSecondColor; | ||
|  | 		internal Attachment attachment; | ||
|  | 		internal float attachmentTime; | ||
|  | 		internal ExposedList<float> attachmentVertices = new ExposedList<float>(); | ||
|  | 
 | ||
|  | 		public SlotData Data { get { return data; } } | ||
|  | 		public Bone Bone { get { return bone; } } | ||
|  | 		public Skeleton Skeleton { get { return bone.skeleton; } } | ||
|  | 		public float R { get { return r; } set { r = value; } } | ||
|  | 		public float G { get { return g; } set { g = value; } } | ||
|  | 		public float B { get { return b; } set { b = value; } } | ||
|  | 		public float A { get { return a; } set { a = value; } } | ||
|  | 
 | ||
|  | 		public float R2 { get { return r2; } set { r2 = value; } } | ||
|  | 		public float G2 { get { return g2; } set { g2 = value; } } | ||
|  | 		public float B2 { get { return b2; } set { b2 = value; } } | ||
|  | 		public bool HasSecondColor { get { return data.hasSecondColor; } set { data.hasSecondColor = value; } } | ||
|  | 
 | ||
|  | 		/// <summary>May be null.</summary> | ||
|  | 		public Attachment Attachment { | ||
|  | 			get { return attachment; } | ||
|  | 			set { | ||
|  | 				if (attachment == value) return; | ||
|  | 				attachment = value; | ||
|  | 				attachmentTime = bone.skeleton.time; | ||
|  | 				attachmentVertices.Clear(false); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		public float AttachmentTime { | ||
|  | 			get { return bone.skeleton.time - attachmentTime; } | ||
|  | 			set { attachmentTime = bone.skeleton.time - value; } | ||
|  | 		} | ||
|  | 
 | ||
|  | 		public ExposedList<float> AttachmentVertices { get { return attachmentVertices; } set { attachmentVertices = value; } } | ||
|  | 
 | ||
|  | 		public Slot (SlotData data, Bone bone) { | ||
|  | 			if (data == null) throw new ArgumentNullException("data", "data cannot be null."); | ||
|  | 			if (bone == null) throw new ArgumentNullException("bone", "bone cannot be null."); | ||
|  | 			this.data = data; | ||
|  | 			this.bone = bone; | ||
|  | 			SetToSetupPose(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		public void SetToSetupPose () { | ||
|  | 			r = data.r; | ||
|  | 			g = data.g; | ||
|  | 			b = data.b; | ||
|  | 			a = data.a; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 			if (data.attachmentName == null) | ||
|  | 				Attachment = null; | ||
|  | 			else { | ||
|  | 				attachment = null; | ||
|  | 				Attachment = bone.skeleton.GetAttachment(data.index, data.attachmentName); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		override public string ToString () { | ||
|  | 			return data.name; | ||
|  | 		} | ||
|  | 	} | ||
|  | } |