public void ApplyAimDir(Vector3 dir, Vector3 positionOffset, int bonusSortingOrder) { // Anim default dir is pointing RIGHT = Vector3(1, 0); float aimAngle = GetAngleFromVectorFloat(dir); //foreach (V_Skeleton_Anim skeletonAnim in anims) { for (int i = 0; i < anims.Length; i++) { V_Skeleton_Anim skeletonAnim = anims[i]; // Make sure the skeleton updater that will use this anim knows the sorting order might change //skeletonAnim.defaultHasVariableSortingOrder = true; V_Skeleton_Frame[] skeletonFrameArr = skeletonAnim.GetFrames(); for (int j = 0; j < skeletonFrameArr.Length; j++) { V_Skeleton_Frame skeletonFrame = skeletonFrameArr[j]; // Rotate based on base position Vector3 framePosition = skeletonFrame.GetBasePosition(); Vector3 newFramePosition = ApplyRotationToVector(framePosition, dir); skeletonFrame.ApplyTemporaryPosition(newFramePosition + positionOffset); // Rotate based on base rotation skeletonFrame.ApplyBonusRotation(aimAngle); // Apply bonus sorting order skeletonFrame.ApplyBonusSortingOrder(bonusSortingOrder); } } }
public static V_Skeleton_Frame GetSmoothFrame(V_Skeleton_Frame prevFrame, V_Skeleton_Frame frame, int index) { Vector3 posInc = (frame.pos - prevFrame.pos) / frame.frameCount; float rotInc = ((frame.rot - prevFrame.rot) * 1f) / frame.frameCount; float sizeInc = ((frame.size - prevFrame.size) * 1f) / frame.frameCount; float scaleXInc = ((frame.scaleX - prevFrame.scaleX) * 1f) / frame.frameCount; float scaleYInc = ((frame.scaleY - prevFrame.scaleY) * 1f) / frame.frameCount; Vector3 v00offsetInc = (frame.v00offset - prevFrame.v00offset) / frame.frameCount; Vector3 v01offsetInc = (frame.v01offset - prevFrame.v01offset) / frame.frameCount; Vector3 v10offsetInc = (frame.v10offset - prevFrame.v10offset) / frame.frameCount; Vector3 v11offsetInc = (frame.v11offset - prevFrame.v11offset) / frame.frameCount; return(new V_Skeleton_Frame( -1, prevFrame.pos + (posInc * index), (prevFrame.rot + (rotInc * index)), "", prevFrame.uvType, (prevFrame.size + (sizeInc * index)), (prevFrame.scaleX + (scaleXInc * index)), (prevFrame.scaleY + (scaleYInc * index)), prevFrame.sortingOrder, prevFrame.pivot, prevFrame.v00offset + (v00offsetInc * index), prevFrame.v01offset + (v01offsetInc * index), prevFrame.v10offset + (v10offsetInc * index), prevFrame.v11offset + (v11offsetInc * index) )); }
public void SelectKeyframeLeft() { //Look for next keyframe if (GetKeyframes().Count > 1) { //Theres more than one Keyframe int newFrameIndex = currentFrame - 1; if (newFrameIndex < 0) { newFrameIndex = frames.Length - 1; } while (newFrameIndex != currentFrame) { V_Skeleton_Frame frame = frames[newFrameIndex]; if (frame.frameCount != -1) { //Is keyframe, select this one currentFrame = newFrameIndex; currentAnimFrame = frames[currentFrame]; break; } newFrameIndex--; if (newFrameIndex < 0) { newFrameIndex = frames.Length - 1; } } } }
public void AddKeyframe() { List <V_Skeleton_Frame> newFrames = new List <V_Skeleton_Frame>(frames); if (currentAnimFrame.frameCount != -1) { //Is keyframe, duplicate this one V_Skeleton_Frame cloned = currentAnimFrame.CloneNew(); newFrames.Insert(newFrames.IndexOf(currentAnimFrame) + 1, cloned); SetFrames(newFrames.ToArray()); currentFrame = System.Array.IndexOf(frames, cloned); currentAnimFrame = newFrames[currentFrame]; } else { //Not keyframe, clone last keyframe List <V_Skeleton_Frame> keyframes = GetKeyframes(); V_Skeleton_Frame cloned = keyframes[keyframes.Count - 1].CloneNew(); newFrames.Add(cloned); SetFrames(newFrames.ToArray()); currentFrame = System.Array.IndexOf(frames, cloned); currentAnimFrame = newFrames[currentFrame]; } RemakeTween(); }
public V_Skeleton_Anim(V_Skeleton_Frame[] _frames, BodyPart _bodyPart, float _frameRate) { SetFrames(_frames); currentAnimFrame = frames[0]; bodyPart = _bodyPart; frameRate = _frameRate; frameRateOriginal = frameRate; }
public void AddKeyframeFirstToEnd() { List <V_Skeleton_Frame> newFrames = new List <V_Skeleton_Frame>(frames); List <V_Skeleton_Frame> keyframes = GetKeyframes(); V_Skeleton_Frame firstKeyframe = keyframes[0]; V_Skeleton_Frame cloned = firstKeyframe.CloneNew(); newFrames.Add(cloned); SetFrames(newFrames.ToArray()); currentFrame = System.Array.IndexOf(frames, cloned); currentAnimFrame = newFrames[currentFrame]; RemakeTween(); }
public void Update(float deltaTime) { frameTimer = frameTimer - deltaTime; while (frameTimer < 0 && (canLoop || !looped)) { frameTimer = frameTimer + frameRate; currentFrame = currentFrame + 1; if (currentFrame >= framesLength) { currentFrame = 0; looped = true; } currentAnimFrame = frames[currentFrame]; if (hasAnimFrameTrigger[currentFrame]) { if (onAnimTrigger != null) { onAnimTrigger(currentAnimFrame.trigger); } } if (currentFrame >= framesLength - 1) { // Last frame if (!canLoop) { looped = true; if (onAnimComplete != null) { onAnimComplete(this); } break; } else { if (onAnimComplete != null) { onAnimComplete(this); } } } } }
public static V_Skeleton_Frame[] Smooth(V_Skeleton_Frame[] keyframes) { List <V_Skeleton_Frame> ret = new List <V_Skeleton_Frame>(); V_Skeleton_Frame prevFrame = keyframes[0]; ret.Add(prevFrame); for (int i = 1; i < keyframes.Length; i++) { V_Skeleton_Frame frame = keyframes[i]; for (int j = 1; j < frame.frameCount - 1; j++) { ret.Add(GetSmoothFrame(prevFrame, frame, j)); } ret.Add(frame); prevFrame = frame; } return(ret.ToArray()); }
public void RemakeTween() { List <V_Skeleton_Frame> keyframes = GetKeyframes(); foreach (V_Skeleton_Frame keyframe in keyframes) { keyframe.RefreshVertices(); } SetFrames(V_Skeleton_Frame.Smooth(keyframes.ToArray())); if (keyframes.IndexOf(currentAnimFrame) != -1) { //Currently selected keyframe, keep selection currentFrame = System.Array.IndexOf(frames, currentAnimFrame); } else { currentFrame = 0; } currentAnimFrame = frames[currentFrame]; }
public void Update(float deltaTime) { frameTimer = frameTimer - deltaTime; while (frameTimer < 0) { frameTimer = frameTimer + frameRate; currentFrame = currentFrame + 1; if (currentFrame >= framesLength) { currentFrame = 0; looped = true; } currentAnimFrame = frames[currentFrame]; if (hasAnimFrameTrigger[currentFrame]) { if (onAnimTrigger != null) { onAnimTrigger(currentAnimFrame.trigger); } } } }
private void Play() { int verticesIndex = 0; int uvsIndex = 0; int trianglesIndex = 0; for (int i = 0; i < animsLength; i++) { V_Skeleton_Anim anim = anims[i]; V_Skeleton_Frame frame = anim.GetCurrentAnimFrame(); V_UnitSkeleton.AddSquare(i, verticesIndex, verticesArr, uvsIndex, uvsArr, trianglesIndex, trianglesArr, frame.pos, frame.v00 + frame.v00offset, frame.v01 + frame.v01offset, frame.v10 + frame.v10offset, frame.v11 + frame.v11offset, V_UnitSkeleton.GetUV_Type(frame.uvType)); verticesIndex = verticesIndex + 4; uvsIndex = uvsIndex + 4; trianglesIndex = trianglesIndex + 6; } //mesh.triangles = null; mesh.Clear(); mesh.vertices = verticesArr; mesh.uv = uvsArr; mesh.triangles = trianglesArr; }
public static string Save_Static(V_Skeleton_Frame frame) { return(frame.Save()); }
public void SelectFrame(int frameIndex) { currentFrame = frameIndex; currentAnimFrame = frames[currentFrame]; }
public void Reset() { currentFrame = 0; currentAnimFrame = frames[currentFrame]; looped = false; }