mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[ts] More demo work
This commit is contained in:
parent
47e706c972
commit
348b11e275
28
spine-ts/build/spine-all.d.ts
vendored
28
spine-ts/build/spine-all.d.ts
vendored
@ -785,6 +785,16 @@ declare module spine {
|
|||||||
length(): number;
|
length(): number;
|
||||||
normalize(): this;
|
normalize(): this;
|
||||||
}
|
}
|
||||||
|
class TimeKeeper {
|
||||||
|
maxDelta: number;
|
||||||
|
framesPerSecond: number;
|
||||||
|
delta: number;
|
||||||
|
totalTime: number;
|
||||||
|
private lastTime;
|
||||||
|
private frameCount;
|
||||||
|
private frameTime;
|
||||||
|
update(): void;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
declare module spine {
|
declare module spine {
|
||||||
abstract class Attachment {
|
abstract class Attachment {
|
||||||
@ -1026,6 +1036,23 @@ declare module spine.webgl {
|
|||||||
dragged(x: number, y: number): void;
|
dragged(x: number, y: number): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module spine.webgl {
|
||||||
|
class LoadingScreen {
|
||||||
|
private renderer;
|
||||||
|
private logo;
|
||||||
|
private spinner;
|
||||||
|
private angle;
|
||||||
|
private timeKeeper;
|
||||||
|
backgroundColor: Color;
|
||||||
|
static useDark: boolean;
|
||||||
|
private static SPINNER_DATA;
|
||||||
|
private static SPINNER_DARK_DATA;
|
||||||
|
private static SPINE_LOGO_DATA;
|
||||||
|
private static SPINE_LOGO_DARK_DATA;
|
||||||
|
constructor(renderer: SceneRenderer);
|
||||||
|
draw(): void;
|
||||||
|
}
|
||||||
|
}
|
||||||
declare module spine.webgl {
|
declare module spine.webgl {
|
||||||
const M00: number;
|
const M00: number;
|
||||||
const M01: number;
|
const M01: number;
|
||||||
@ -1163,6 +1190,7 @@ declare module spine.webgl {
|
|||||||
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
||||||
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
||||||
|
drawTextureRotated(texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color?: Color, premultipliedAlpha?: boolean): void;
|
||||||
drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
|
drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
|
||||||
line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
|
line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
|
||||||
triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
|
triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
10
spine-ts/build/spine-core.d.ts
vendored
10
spine-ts/build/spine-core.d.ts
vendored
@ -759,6 +759,16 @@ declare module spine {
|
|||||||
length(): number;
|
length(): number;
|
||||||
normalize(): this;
|
normalize(): this;
|
||||||
}
|
}
|
||||||
|
class TimeKeeper {
|
||||||
|
maxDelta: number;
|
||||||
|
framesPerSecond: number;
|
||||||
|
delta: number;
|
||||||
|
totalTime: number;
|
||||||
|
private lastTime;
|
||||||
|
private frameCount;
|
||||||
|
private frameTime;
|
||||||
|
update(): void;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
declare module spine {
|
declare module spine {
|
||||||
abstract class Attachment {
|
abstract class Attachment {
|
||||||
|
|||||||
@ -3991,6 +3991,34 @@ var spine;
|
|||||||
return Vector2;
|
return Vector2;
|
||||||
}());
|
}());
|
||||||
spine.Vector2 = Vector2;
|
spine.Vector2 = Vector2;
|
||||||
|
var TimeKeeper = (function () {
|
||||||
|
function TimeKeeper() {
|
||||||
|
this.maxDelta = 0.064;
|
||||||
|
this.framesPerSecond = 0;
|
||||||
|
this.delta = 0;
|
||||||
|
this.totalTime = 0;
|
||||||
|
this.lastTime = Date.now() / 1000;
|
||||||
|
this.frameCount = 0;
|
||||||
|
this.frameTime = 0;
|
||||||
|
}
|
||||||
|
TimeKeeper.prototype.update = function () {
|
||||||
|
var now = Date.now() / 1000;
|
||||||
|
this.delta = now - this.lastTime;
|
||||||
|
this.frameTime += this.delta;
|
||||||
|
this.totalTime += this.delta;
|
||||||
|
if (this.delta > this.maxDelta)
|
||||||
|
this.delta = this.maxDelta;
|
||||||
|
this.lastTime = now;
|
||||||
|
this.frameCount++;
|
||||||
|
if (this.frameTime > 1) {
|
||||||
|
this.framesPerSecond = this.frameCount / this.frameTime;
|
||||||
|
this.frameTime = 0;
|
||||||
|
this.frameCount = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return TimeKeeper;
|
||||||
|
}());
|
||||||
|
spine.TimeKeeper = TimeKeeper;
|
||||||
})(spine || (spine = {}));
|
})(spine || (spine = {}));
|
||||||
var spine;
|
var spine;
|
||||||
(function (spine) {
|
(function (spine) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
10
spine-ts/build/spine-threejs.d.ts
vendored
10
spine-ts/build/spine-threejs.d.ts
vendored
@ -759,6 +759,16 @@ declare module spine {
|
|||||||
length(): number;
|
length(): number;
|
||||||
normalize(): this;
|
normalize(): this;
|
||||||
}
|
}
|
||||||
|
class TimeKeeper {
|
||||||
|
maxDelta: number;
|
||||||
|
framesPerSecond: number;
|
||||||
|
delta: number;
|
||||||
|
totalTime: number;
|
||||||
|
private lastTime;
|
||||||
|
private frameCount;
|
||||||
|
private frameTime;
|
||||||
|
update(): void;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
declare module spine {
|
declare module spine {
|
||||||
abstract class Attachment {
|
abstract class Attachment {
|
||||||
|
|||||||
@ -3991,6 +3991,34 @@ var spine;
|
|||||||
return Vector2;
|
return Vector2;
|
||||||
}());
|
}());
|
||||||
spine.Vector2 = Vector2;
|
spine.Vector2 = Vector2;
|
||||||
|
var TimeKeeper = (function () {
|
||||||
|
function TimeKeeper() {
|
||||||
|
this.maxDelta = 0.064;
|
||||||
|
this.framesPerSecond = 0;
|
||||||
|
this.delta = 0;
|
||||||
|
this.totalTime = 0;
|
||||||
|
this.lastTime = Date.now() / 1000;
|
||||||
|
this.frameCount = 0;
|
||||||
|
this.frameTime = 0;
|
||||||
|
}
|
||||||
|
TimeKeeper.prototype.update = function () {
|
||||||
|
var now = Date.now() / 1000;
|
||||||
|
this.delta = now - this.lastTime;
|
||||||
|
this.frameTime += this.delta;
|
||||||
|
this.totalTime += this.delta;
|
||||||
|
if (this.delta > this.maxDelta)
|
||||||
|
this.delta = this.maxDelta;
|
||||||
|
this.lastTime = now;
|
||||||
|
this.frameCount++;
|
||||||
|
if (this.frameTime > 1) {
|
||||||
|
this.framesPerSecond = this.frameCount / this.frameTime;
|
||||||
|
this.frameTime = 0;
|
||||||
|
this.frameCount = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return TimeKeeper;
|
||||||
|
}());
|
||||||
|
spine.TimeKeeper = TimeKeeper;
|
||||||
})(spine || (spine = {}));
|
})(spine || (spine = {}));
|
||||||
var spine;
|
var spine;
|
||||||
(function (spine) {
|
(function (spine) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
28
spine-ts/build/spine-webgl.d.ts
vendored
28
spine-ts/build/spine-webgl.d.ts
vendored
@ -759,6 +759,16 @@ declare module spine {
|
|||||||
length(): number;
|
length(): number;
|
||||||
normalize(): this;
|
normalize(): this;
|
||||||
}
|
}
|
||||||
|
class TimeKeeper {
|
||||||
|
maxDelta: number;
|
||||||
|
framesPerSecond: number;
|
||||||
|
delta: number;
|
||||||
|
totalTime: number;
|
||||||
|
private lastTime;
|
||||||
|
private frameCount;
|
||||||
|
private frameTime;
|
||||||
|
update(): void;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
declare module spine {
|
declare module spine {
|
||||||
abstract class Attachment {
|
abstract class Attachment {
|
||||||
@ -956,6 +966,23 @@ declare module spine.webgl {
|
|||||||
dragged(x: number, y: number): void;
|
dragged(x: number, y: number): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module spine.webgl {
|
||||||
|
class LoadingScreen {
|
||||||
|
private renderer;
|
||||||
|
private logo;
|
||||||
|
private spinner;
|
||||||
|
private angle;
|
||||||
|
private timeKeeper;
|
||||||
|
backgroundColor: Color;
|
||||||
|
static useDark: boolean;
|
||||||
|
private static SPINNER_DATA;
|
||||||
|
private static SPINNER_DARK_DATA;
|
||||||
|
private static SPINE_LOGO_DATA;
|
||||||
|
private static SPINE_LOGO_DARK_DATA;
|
||||||
|
constructor(renderer: SceneRenderer);
|
||||||
|
draw(): void;
|
||||||
|
}
|
||||||
|
}
|
||||||
declare module spine.webgl {
|
declare module spine.webgl {
|
||||||
const M00: number;
|
const M00: number;
|
||||||
const M01: number;
|
const M01: number;
|
||||||
@ -1093,6 +1120,7 @@ declare module spine.webgl {
|
|||||||
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
||||||
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
||||||
|
drawTextureRotated(texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color?: Color, premultipliedAlpha?: boolean): void;
|
||||||
drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
|
drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
|
||||||
line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
|
line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
|
||||||
triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
|
triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
28
spine-ts/build/spine-widget.d.ts
vendored
28
spine-ts/build/spine-widget.d.ts
vendored
@ -759,6 +759,16 @@ declare module spine {
|
|||||||
length(): number;
|
length(): number;
|
||||||
normalize(): this;
|
normalize(): this;
|
||||||
}
|
}
|
||||||
|
class TimeKeeper {
|
||||||
|
maxDelta: number;
|
||||||
|
framesPerSecond: number;
|
||||||
|
delta: number;
|
||||||
|
totalTime: number;
|
||||||
|
private lastTime;
|
||||||
|
private frameCount;
|
||||||
|
private frameTime;
|
||||||
|
update(): void;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
declare module spine {
|
declare module spine {
|
||||||
abstract class Attachment {
|
abstract class Attachment {
|
||||||
@ -956,6 +966,23 @@ declare module spine.webgl {
|
|||||||
dragged(x: number, y: number): void;
|
dragged(x: number, y: number): void;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
declare module spine.webgl {
|
||||||
|
class LoadingScreen {
|
||||||
|
private renderer;
|
||||||
|
private logo;
|
||||||
|
private spinner;
|
||||||
|
private angle;
|
||||||
|
private timeKeeper;
|
||||||
|
backgroundColor: Color;
|
||||||
|
static useDark: boolean;
|
||||||
|
private static SPINNER_DATA;
|
||||||
|
private static SPINNER_DARK_DATA;
|
||||||
|
private static SPINE_LOGO_DATA;
|
||||||
|
private static SPINE_LOGO_DARK_DATA;
|
||||||
|
constructor(renderer: SceneRenderer);
|
||||||
|
draw(): void;
|
||||||
|
}
|
||||||
|
}
|
||||||
declare module spine.webgl {
|
declare module spine.webgl {
|
||||||
const M00: number;
|
const M00: number;
|
||||||
const M01: number;
|
const M01: number;
|
||||||
@ -1093,6 +1120,7 @@ declare module spine.webgl {
|
|||||||
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
drawSkeleton(skeleton: Skeleton, premultipliedAlpha?: boolean): void;
|
||||||
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
drawSkeletonDebug(skeleton: Skeleton, premultipliedAlpha?: boolean, ignoredBones?: Array<string>): void;
|
||||||
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
drawTexture(texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color): void;
|
||||||
|
drawTextureRotated(texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color?: Color, premultipliedAlpha?: boolean): void;
|
||||||
drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
|
drawRegion(region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color, premultipliedAlpha?: boolean): void;
|
||||||
line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
|
line(x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color): void;
|
||||||
triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
|
triangle(filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color): void;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -230,4 +230,31 @@ module spine {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class TimeKeeper {
|
||||||
|
maxDelta = 0.064;
|
||||||
|
framesPerSecond = 0;
|
||||||
|
delta = 0;
|
||||||
|
totalTime = 0;
|
||||||
|
|
||||||
|
private lastTime = Date.now() / 1000;
|
||||||
|
private frameCount = 0;
|
||||||
|
private frameTime = 0;
|
||||||
|
|
||||||
|
update () {
|
||||||
|
var now = Date.now() / 1000;
|
||||||
|
this.delta = now -this.lastTime;
|
||||||
|
this.frameTime += this.delta;
|
||||||
|
this.totalTime += this.delta;
|
||||||
|
if (this.delta > this.maxDelta) this.delta = this.maxDelta;
|
||||||
|
this.lastTime = now;
|
||||||
|
|
||||||
|
this.frameCount++;
|
||||||
|
if (this.frameTime > 1) {
|
||||||
|
this.framesPerSecond = this.frameCount / this.frameTime;
|
||||||
|
this.frameTime = 0;
|
||||||
|
this.frameCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
var animationMixingDemo = function(pathPrefix, loadingComplete) {
|
var animationMixingDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1);
|
var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1);
|
||||||
|
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, skeletonNoMix, state, stateNoMix, bounds;
|
var skeleton, skeletonNoMix, state, stateNoMix, bounds;
|
||||||
var timeSlider, timeSliderLabel;
|
var timeSlider, timeSliderLabel;
|
||||||
var lastFrameTime = Date.now() / 1000
|
var timeKeeper;
|
||||||
|
var loadingScreen;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
timeSlider = $("#animationmixingdemo-timeslider");
|
timeSlider = $("#animationmixingdemo-timeslider");
|
||||||
@ -16,24 +19,20 @@ var animationMixingDemo = function(pathPrefix, loadingComplete) {
|
|||||||
|
|
||||||
renderer = new spine.webgl.SceneRenderer(canvas, gl);
|
renderer = new spine.webgl.SceneRenderer(canvas, gl);
|
||||||
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
|
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
|
||||||
|
|
||||||
assetManager.loadTexture("spineboy.png");
|
assetManager.loadTexture("spineboy.png");
|
||||||
assetManager.loadText("spineboy.json");
|
assetManager.loadText("spineboy.json");
|
||||||
assetManager.loadText("spineboy.atlas");
|
assetManager.loadText("spineboy.atlas");
|
||||||
requestAnimationFrame(load);
|
|
||||||
|
|
||||||
|
requestAnimationFrame(load);
|
||||||
input = new spine.webgl.Input(canvas);
|
input = new spine.webgl.Input(canvas);
|
||||||
input.addListener({
|
timeKeeper = new spine.TimeKeeper();
|
||||||
down: function(x, y) {
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
state.setAnimation(1, "shoot", false);
|
loadingScreen.backgroundColor = bgColor;
|
||||||
stateNoMix.setAnimation(1, "shoot", false);
|
|
||||||
},
|
|
||||||
up: function(x, y) { },
|
|
||||||
moved: function(x, y) { },
|
|
||||||
dragged: function(x, y) { }
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
skeleton = loadSkeleton("spineboy");
|
skeleton = loadSkeleton("spineboy");
|
||||||
skeletonNoMix = new spine.Skeleton(skeleton.data);
|
skeletonNoMix = new spine.Skeleton(skeleton.data);
|
||||||
@ -46,8 +45,26 @@ var animationMixingDemo = function(pathPrefix, loadingComplete) {
|
|||||||
skeleton.updateWorldTransform();
|
skeleton.updateWorldTransform();
|
||||||
bounds = { offset: new spine.Vector2(), size: new spine.Vector2() };
|
bounds = { offset: new spine.Vector2(), size: new spine.Vector2() };
|
||||||
skeleton.getBounds(bounds.offset, bounds.size);
|
skeleton.getBounds(bounds.offset, bounds.size);
|
||||||
|
setupInput();
|
||||||
|
$("#animationmixingdemo-overlay").removeClass("overlay-hide");
|
||||||
|
$("#animationmixingdemo-overlay").addClass("overlay");
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupInput() {
|
||||||
|
input.addListener({
|
||||||
|
down: function(x, y) {
|
||||||
|
state.setAnimation(1, "shoot", false);
|
||||||
|
stateNoMix.setAnimation(1, "shoot", false);
|
||||||
|
},
|
||||||
|
up: function(x, y) { },
|
||||||
|
moved: function(x, y) { },
|
||||||
|
dragged: function(x, y) { }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function createState(mix) {
|
function createState(mix) {
|
||||||
@ -90,11 +107,8 @@ var animationMixingDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta * (timeSlider.slider("value") / 100);
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
delta *= (timeSlider.slider("value") / 100);
|
|
||||||
if (timeSliderLabel) timeSliderLabel.text(timeSlider.slider("value") + "%");
|
if (timeSliderLabel) timeSliderLabel.text(timeSlider.slider("value") + "%");
|
||||||
|
|
||||||
var offset = bounds.offset;
|
var offset = bounds.offset;
|
||||||
@ -106,7 +120,7 @@ var animationMixingDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = size.y * 1.2;
|
renderer.camera.viewportHeight = size.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
|
|||||||
@ -1,5 +1,9 @@
|
|||||||
<html>
|
<html>
|
||||||
<script src="../../build/spine-webgl.js"></script>
|
<script src="../../build/spine-webgl.js"></script>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
|
||||||
|
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
|
||||||
|
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>
|
||||||
<style>
|
<style>
|
||||||
* { margin: 0; padding: 0; }
|
* { margin: 0; padding: 0; }
|
||||||
body, html { height: 100% }
|
body, html { height: 100% }
|
||||||
@ -7,7 +11,9 @@
|
|||||||
</style>
|
</style>
|
||||||
<body>
|
<body>
|
||||||
<canvas id="ikdemo-canvas"></canvas>
|
<canvas id="ikdemo-canvas"></canvas>
|
||||||
<center><div id="info" style="color: #f00; position: fixed; top: 0; width: 100%"></div></center>
|
<center>
|
||||||
|
<div>Display Bones</div><input id="stretchydemo-drawbones" type="checkbox"></input>
|
||||||
|
</center>
|
||||||
<script src="utils.js"></script>
|
<script src="utils.js"></script>
|
||||||
<script src="ikconstraint.js"></script>
|
<script src="ikconstraint.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@ -1,11 +1,20 @@
|
|||||||
var ikConstraintDemo = function(pathPrefix, loadingComplete) {
|
var ikConstraintDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
|
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
||||||
|
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
||||||
|
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
||||||
|
var COLOR_OUTER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.8);
|
||||||
|
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, bounds;
|
var skeleton, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var target = null;
|
var target = null;
|
||||||
var isHover = false;
|
var hoverTargets = [];
|
||||||
var boneName = "hip";
|
var controlBones = ["hoverboard controller", "hip", "board target"];
|
||||||
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2();
|
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3();
|
||||||
|
var kneePos = new spine.Vector2();
|
||||||
|
var playButton, timeLine, spacing, isPlaying = true, playTime = 0;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(1, 1, 1, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
|
|
||||||
@ -17,42 +26,67 @@ var ikConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
|
assetManager = new spine.webgl.AssetManager(gl, pathPrefix);
|
||||||
input = new spine.webgl.Input(canvas);
|
input = new spine.webgl.Input(canvas);
|
||||||
assetManager.loadTexture("spineboy.png");
|
assetManager.loadTexture("spineboy.png");
|
||||||
assetManager.loadText("spineboy-mesh.json");
|
assetManager.loadText("spineboy-hover.json");
|
||||||
assetManager.loadText("spineboy.atlas");
|
assetManager.loadText("spineboy.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = new spine.TextureAtlas(assetManager.get("spineboy.atlas"), function(path) {
|
var atlas = new spine.TextureAtlas(assetManager.get("spineboy.atlas"), function(path) {
|
||||||
return assetManager.get(path);
|
return assetManager.get(path);
|
||||||
});
|
});
|
||||||
var atlasLoader = new spine.TextureAtlasAttachmentLoader(atlas);
|
var atlasLoader = new spine.TextureAtlasAttachmentLoader(atlas);
|
||||||
var skeletonJson = new spine.SkeletonJson(atlasLoader);
|
var skeletonJson = new spine.SkeletonJson(atlasLoader);
|
||||||
var skeletonData = skeletonJson.readSkeletonData(assetManager.get("spineboy-mesh.json"));
|
var skeletonData = skeletonJson.readSkeletonData(assetManager.get("spineboy-hover.json"));
|
||||||
skeleton = new spine.Skeleton(skeletonData);
|
skeleton = new spine.Skeleton(skeletonData);
|
||||||
skeleton.setToSetupPose();
|
skeleton.setToSetupPose();
|
||||||
skeleton.updateWorldTransform();
|
skeleton.updateWorldTransform();
|
||||||
var offset = new spine.Vector2();
|
var offset = new spine.Vector2();
|
||||||
bounds = new spine.Vector2();
|
bounds = new spine.Vector2();
|
||||||
skeleton.getBounds(offset, bounds);
|
skeleton.getBounds(offset, bounds);
|
||||||
|
for (var i = 0; i < controlBones.length; i++) hoverTargets.push(null);
|
||||||
|
|
||||||
renderer.camera.position.x = offset.x + bounds.x / 2;
|
renderer.camera.position.x = offset.x + bounds.x / 2;
|
||||||
renderer.camera.position.y = offset.y + bounds.y / 2;
|
renderer.camera.position.y = offset.y + bounds.y / 2;
|
||||||
|
|
||||||
|
renderer.skeletonDebugRenderer.drawMeshHull = false;
|
||||||
|
renderer.skeletonDebugRenderer.drawMeshTriangles = false;
|
||||||
|
|
||||||
|
setupUI();
|
||||||
setupInput();
|
setupInput();
|
||||||
|
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupInput() {
|
function setupUI() {
|
||||||
|
var checkbox = $("#ikdemo-drawbones");
|
||||||
|
renderer.skeletonDebugRenderer.drawRegionAttachments = false;
|
||||||
|
renderer.skeletonDebugRenderer.drawPaths = false;
|
||||||
|
renderer.skeletonDebugRenderer.drawBones = false;
|
||||||
|
checkbox.change(function() {
|
||||||
|
renderer.skeletonDebugRenderer.drawPaths = this.checked;
|
||||||
|
renderer.skeletonDebugRenderer.drawBones = this.checked;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupInput (){
|
||||||
input.addListener({
|
input.addListener({
|
||||||
down: function(x, y) {
|
down: function(x, y) {
|
||||||
var bone = skeleton.findBone(boneName);
|
for (var i = 0; i < controlBones.length; i++) {
|
||||||
renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
|
var bone = skeleton.findBone(controlBones[i]);
|
||||||
if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
|
renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
|
||||||
target = bone;
|
if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
|
||||||
|
target = bone;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
up: function(x, y) {
|
up: function(x, y) {
|
||||||
@ -72,40 +106,46 @@ var ikConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
moved: function (x, y) {
|
moved: function (x, y) {
|
||||||
var bone = skeleton.findBone(boneName);
|
for (var i = 0; i < controlBones.length; i++) {
|
||||||
renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
|
var bone = skeleton.findBone(controlBones[i]);
|
||||||
isHover = temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20;
|
renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height);
|
||||||
|
if (temp.set(skeleton.x + bone.worldX, skeleton.y + bone.worldY, 0).distance(coords) < 20) {
|
||||||
|
hoverTargets[i] = bone;
|
||||||
|
} else {
|
||||||
|
hoverTargets[i] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
skeleton.updateWorldTransform();
|
||||||
|
|
||||||
renderer.camera.viewportWidth = bounds.x * 1.2;
|
renderer.camera.viewportWidth = bounds.x * 1.2;
|
||||||
renderer.camera.viewportHeight = bounds.y * 1.2;
|
renderer.camera.viewportHeight = bounds.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
skeleton.updateWorldTransform();
|
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
renderer.drawSkeleton(skeleton, true);
|
renderer.drawSkeleton(skeleton, true);
|
||||||
var bone = skeleton.findBone(boneName);
|
renderer.drawSkeletonDebug(skeleton, false, ["root"]);
|
||||||
|
|
||||||
var colorInner = isHover ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER;
|
|
||||||
var colorOuter = isHover ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER;
|
|
||||||
|
|
||||||
renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
|
|
||||||
gl.lineWidth(2);
|
gl.lineWidth(2);
|
||||||
renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
|
for (var i = 0; i < controlBones.length; i++) {
|
||||||
|
var bone = skeleton.findBone(controlBones[i]);
|
||||||
|
var colorInner = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_INNER : spineDemos.NON_HOVER_COLOR_INNER;
|
||||||
|
var colorOuter = hoverTargets[i] !== null ? spineDemos.HOVER_COLOR_OUTER : spineDemos.NON_HOVER_COLOR_OUTER;
|
||||||
|
renderer.circle(true, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorInner);
|
||||||
|
renderer.circle(false, skeleton.x + bone.worldX, skeleton.y + bone.worldY, 20, colorOuter);
|
||||||
|
}
|
||||||
renderer.end();
|
renderer.end();
|
||||||
gl.lineWidth(1);
|
gl.lineWidth(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
init();
|
init();
|
||||||
};
|
};
|
||||||
@ -1,14 +1,15 @@
|
|||||||
var imageSequencesDemo = function(pathPrefix, loadingComplete) {
|
var imageSequencesDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1);
|
var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1);
|
||||||
|
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, bounds;
|
var skeleton, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var skeletons = {};
|
var skeletons = {};
|
||||||
var activeSkeleton = "alien";
|
var activeSkeleton = "alien";
|
||||||
|
|
||||||
var playButton, timeLine, isPlaying = true;
|
var playButton, timeLine, isPlaying = true;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
canvas = document.getElementById("imagesequencesdemo-canvas");
|
canvas = document.getElementById("imagesequencesdemo-canvas");
|
||||||
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
||||||
@ -22,16 +23,23 @@ var imageSequencesDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("dragon.png");
|
assetManager.loadTexture("dragon.png");
|
||||||
assetManager.loadText("dragon.json");
|
assetManager.loadText("dragon.json");
|
||||||
assetManager.loadText("dragon.atlas");
|
assetManager.loadText("dragon.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
skeletons["alien"] = loadSkeleton("alien", "death", ["head", "splat01"]);
|
skeletons["alien"] = loadSkeleton("alien", "death", ["head", "splat01"]);
|
||||||
skeletons["dragon"] = loadSkeleton("dragon", "flying", ["R_wing"])
|
skeletons["dragon"] = loadSkeleton("dragon", "flying", ["R_wing"])
|
||||||
setupUI();
|
setupUI();
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -127,10 +135,8 @@ var imageSequencesDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
var active = skeletons[activeSkeleton];
|
var active = skeletons[activeSkeleton];
|
||||||
var skeleton = active.skeleton;
|
var skeleton = active.skeleton;
|
||||||
@ -144,7 +150,7 @@ var imageSequencesDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = size.y * 1.4;
|
renderer.camera.viewportHeight = size.y * 1.4;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
var meshesDemo = function(pathPrefix, loadingComplete) {
|
var meshesDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, bounds;
|
var skeleton, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var skeletons = {};
|
var skeletons = {};
|
||||||
var activeSkeleton = "Orange Girl";
|
var activeSkeleton = "Orange Girl";
|
||||||
|
|
||||||
var playButton, timeLine, isPlaying = true;
|
var playButton, timeLine, isPlaying = true;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
canvas = document.getElementById("meshesdemo-canvas");
|
canvas = document.getElementById("meshesdemo-canvas");
|
||||||
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
||||||
@ -24,17 +25,24 @@ var meshesDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("armorgirl.png");
|
assetManager.loadTexture("armorgirl.png");
|
||||||
assetManager.loadText("armorgirl.json");
|
assetManager.loadText("armorgirl.json");
|
||||||
assetManager.loadText("armorgirl.atlas");
|
assetManager.loadText("armorgirl.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
skeletons["Orange Girl"] = loadSkeleton("orangegirl", "animation");
|
skeletons["Orange Girl"] = loadSkeleton("orangegirl", "animation");
|
||||||
skeletons["Green Girl"] = loadSkeleton("greengirl", "animation");
|
skeletons["Green Girl"] = loadSkeleton("greengirl", "animation");
|
||||||
skeletons["Armor Girl"] = loadSkeleton("armorgirl", "animation");
|
skeletons["Armor Girl"] = loadSkeleton("armorgirl", "animation");
|
||||||
setupUI();
|
setupUI();
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -124,10 +132,8 @@ var meshesDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
var active = skeletons[activeSkeleton];
|
var active = skeletons[activeSkeleton];
|
||||||
var skeleton = active.skeleton;
|
var skeleton = active.skeleton;
|
||||||
@ -141,7 +147,7 @@ var meshesDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = size.y * 1.2;
|
renderer.camera.viewportHeight = size.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
var skinsDemo = function(pathPrefix, loadingComplete) {
|
var skinsDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, state, offset, bounds;
|
var skeleton, state, offset, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var playButton, timeLine, isPlaying = true, playTime = 0;
|
var playButton, timeLine, isPlaying = true, playTime = 0;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
if (pathPrefix === undefined) pathPrefix = "";
|
if (pathPrefix === undefined) pathPrefix = "";
|
||||||
|
|
||||||
@ -16,10 +18,14 @@ var skinsDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("heroes.png");
|
assetManager.loadTexture("heroes.png");
|
||||||
assetManager.loadText("heroes.json");
|
assetManager.loadText("heroes.json");
|
||||||
assetManager.loadText("heroes.atlas");
|
assetManager.loadText("heroes.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = new spine.TextureAtlas(assetManager.get("heroes.atlas"), function(path) {
|
var atlas = new spine.TextureAtlas(assetManager.get("heroes.atlas"), function(path) {
|
||||||
return assetManager.get(path);
|
return assetManager.get(path);
|
||||||
@ -42,7 +48,10 @@ var skinsDemo = function(pathPrefix, loadingComplete) {
|
|||||||
skeleton.getBounds(offset, bounds);
|
skeleton.getBounds(offset, bounds);
|
||||||
setupUI();
|
setupUI();
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupAnimations(state) {
|
function setupAnimations(state) {
|
||||||
@ -152,10 +161,8 @@ var skinsDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
renderer.camera.position.x = offset.x + bounds.x * 1.5 - 150;
|
renderer.camera.position.x = offset.x + bounds.x * 1.5 - 150;
|
||||||
renderer.camera.position.y = offset.y + bounds.y / 2;
|
renderer.camera.position.y = offset.y + bounds.y / 2;
|
||||||
@ -163,7 +170,7 @@ var skinsDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = bounds.y * 1.2;
|
renderer.camera.viewportHeight = bounds.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
state.update(delta);
|
state.update(delta);
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
var spritesheetDemo = function(pathPrefix, loadingComplete) {
|
var spritesheetDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var SKELETON_ATLAS_COLOR = new spine.Color(0, 0.8, 0, 0.8);
|
var SKELETON_ATLAS_COLOR = new spine.Color(0, 0.8, 0, 0.8);
|
||||||
var FRAME_ATLAS_COLOR = new spine.Color(0.8, 0, 0, 0.8);
|
var FRAME_ATLAS_COLOR = new spine.Color(0.8, 0, 0, 0.8);
|
||||||
|
|
||||||
@ -8,9 +8,11 @@ var spritesheetDemo = function(pathPrefix, loadingComplete) {
|
|||||||
var skeletonAtlas;
|
var skeletonAtlas;
|
||||||
var viewportWidth, viewportHeight;
|
var viewportWidth, viewportHeight;
|
||||||
var frames = [], currFrame = 0, frameTime = 0, frameScale = 0, FPS = 30;
|
var frames = [], currFrame = 0, frameTime = 0, frameScale = 0, FPS = 30;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var playTime = 0, framePlaytime = 0;
|
var playTime = 0, framePlaytime = 0;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
if (pathPrefix === undefined) pathPrefix = "";
|
if (pathPrefix === undefined) pathPrefix = "";
|
||||||
|
|
||||||
@ -23,10 +25,14 @@ var spritesheetDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("raptor.png");
|
assetManager.loadTexture("raptor.png");
|
||||||
assetManager.loadText("raptor.json");
|
assetManager.loadText("raptor.json");
|
||||||
assetManager.loadText("raptor.atlas");
|
assetManager.loadText("raptor.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
skeletonAtlas = new spine.TextureAtlas(assetManager.get("raptor.atlas"), function(path) {
|
skeletonAtlas = new spine.TextureAtlas(assetManager.get("raptor.atlas"), function(path) {
|
||||||
return assetManager.get("" + path);
|
return assetManager.get("" + path);
|
||||||
@ -52,8 +58,13 @@ var spritesheetDemo = function(pathPrefix, loadingComplete) {
|
|||||||
viewportHeight = ((0 + bounds.y) - offset.y);
|
viewportHeight = ((0 + bounds.y) - offset.y);
|
||||||
|
|
||||||
setupUI();
|
setupUI();
|
||||||
|
$("#spritesheetdemo-overlay").removeClass("overlay-hide");
|
||||||
|
$("#spritesheetdemo-overlay").addClass("overlay");
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -63,10 +74,8 @@ var spritesheetDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
delta *= (timeSlider.slider("value") / 100);
|
delta *= (timeSlider.slider("value") / 100);
|
||||||
if (timeSliderLabel) timeSliderLabel.text(timeSlider.slider("value") + "%");
|
if (timeSliderLabel) timeSliderLabel.text(timeSlider.slider("value") + "%");
|
||||||
@ -94,7 +103,7 @@ var spritesheetDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportWidth = viewportWidth * 1.2;
|
renderer.camera.viewportWidth = viewportWidth * 1.2;
|
||||||
renderer.camera.viewportHeight = viewportHeight * 1.2;
|
renderer.camera.viewportHeight = viewportHeight * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
var stretchyDemo = function(pathPrefix, loadingComplete) {
|
var stretchyDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
||||||
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
||||||
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
||||||
@ -6,15 +6,17 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
|
|||||||
|
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, bounds;
|
var skeleton, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var target = null;
|
var target = null;
|
||||||
var kneeFront, kneeBack;
|
var kneeFront, kneeBack;
|
||||||
var hoverTargets = [null, null, null];
|
var hoverTargets = [];
|
||||||
var controlBones = ["front leg controller", "back leg controller", "hip"];
|
var controlBones = ["front leg controller", "back leg controller", "hip", "back hand controller", "front hand controller", "spine control"];
|
||||||
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3();
|
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2(), temp3 = new spine.webgl.Vector3();
|
||||||
var kneePos = new spine.Vector2();
|
var kneePos = new spine.Vector2();
|
||||||
var playButton, timeLine, spacing, isPlaying = true, playTime = 0;
|
var playButton, timeLine, spacing, isPlaying = true, playTime = 0;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(1, 1, 1, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
|
|
||||||
canvas = document.getElementById("stretchydemo-canvas");
|
canvas = document.getElementById("stretchydemo-canvas");
|
||||||
@ -27,10 +29,14 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("stretchyman.png");
|
assetManager.loadTexture("stretchyman.png");
|
||||||
assetManager.loadText("stretchyman.json");
|
assetManager.loadText("stretchyman.json");
|
||||||
assetManager.loadText("stretchyman.atlas");
|
assetManager.loadText("stretchyman.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = new spine.TextureAtlas(assetManager.get("stretchyman.atlas"), function(path) {
|
var atlas = new spine.TextureAtlas(assetManager.get("stretchyman.atlas"), function(path) {
|
||||||
return assetManager.get(path);
|
return assetManager.get(path);
|
||||||
@ -44,7 +50,7 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
|
|||||||
var offset = new spine.Vector2();
|
var offset = new spine.Vector2();
|
||||||
bounds = new spine.Vector2();
|
bounds = new spine.Vector2();
|
||||||
skeleton.getBounds(offset, bounds);
|
skeleton.getBounds(offset, bounds);
|
||||||
|
for (var i = 0; i < controlBones.length; i++) hoverTargets.push(null);
|
||||||
kneeFront = skeleton.findBone("front leg middle");
|
kneeFront = skeleton.findBone("front leg middle");
|
||||||
kneeBack = skeleton.findBone("back leg middle");
|
kneeBack = skeleton.findBone("back leg middle");
|
||||||
|
|
||||||
@ -58,7 +64,10 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
|
|||||||
setupInput();
|
setupInput();
|
||||||
|
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -123,10 +132,8 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
skeleton.updateWorldTransform();
|
skeleton.updateWorldTransform();
|
||||||
centerKnee(kneeBack, skeleton.findBone("back leg root"), skeleton.findBone("back leg controller"));
|
centerKnee(kneeBack, skeleton.findBone("back leg root"), skeleton.findBone("back leg controller"));
|
||||||
@ -137,7 +144,7 @@ var stretchyDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = bounds.y * 1.2;
|
renderer.camera.viewportHeight = bounds.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
var tankDemo = function(pathPrefix, loadingComplete) {
|
var tankDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, state, offset, bounds;
|
var skeleton, state, offset, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var playButton, timeLine, isPlaying = true, playTime = 0;
|
var playButton, timeLine, isPlaying = true, playTime = 0;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
if (pathPrefix === undefined) pathPrefix = "";
|
if (pathPrefix === undefined) pathPrefix = "";
|
||||||
|
|
||||||
@ -16,10 +18,14 @@ var tankDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("tank.png");
|
assetManager.loadTexture("tank.png");
|
||||||
assetManager.loadText("tank.json");
|
assetManager.loadText("tank.json");
|
||||||
assetManager.loadText("tank.atlas");
|
assetManager.loadText("tank.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = new spine.TextureAtlas(assetManager.get("tank.atlas"), function(path) {
|
var atlas = new spine.TextureAtlas(assetManager.get("tank.atlas"), function(path) {
|
||||||
return assetManager.get(path);
|
return assetManager.get(path);
|
||||||
@ -37,7 +43,10 @@ var tankDemo = function(pathPrefix, loadingComplete) {
|
|||||||
skeleton.getBounds(offset, bounds);
|
skeleton.getBounds(offset, bounds);
|
||||||
setupUI();
|
setupUI();
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -70,10 +79,8 @@ var tankDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
var animationDuration = state.getCurrent(0).animation.duration;
|
var animationDuration = state.getCurrent(0).animation.duration;
|
||||||
@ -97,7 +104,7 @@ var tankDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = bounds.y * 1.2;
|
renderer.camera.viewportHeight = bounds.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
var transformConstraintDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
||||||
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
||||||
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
||||||
@ -6,7 +6,7 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
|
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, state, bounds;
|
var skeleton, state, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var rotateHandle;
|
var rotateHandle;
|
||||||
var target = null;
|
var target = null;
|
||||||
var hoverTargets = [null, null, null];
|
var hoverTargets = [null, null, null];
|
||||||
@ -15,6 +15,8 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
var lastRotation = 0;
|
var lastRotation = 0;
|
||||||
var rotationOffset, mix, lastOffset = 0, lastMix = 50;
|
var rotationOffset, mix, lastOffset = 0, lastMix = 50;
|
||||||
|
|
||||||
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
function init () {
|
function init () {
|
||||||
|
|
||||||
canvas = document.getElementById("transformdemo-canvas");
|
canvas = document.getElementById("transformdemo-canvas");
|
||||||
@ -27,10 +29,14 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("tank.png");
|
assetManager.loadTexture("tank.png");
|
||||||
assetManager.loadText("transformConstraint.json");
|
assetManager.loadText("transformConstraint.json");
|
||||||
assetManager.loadText("tank.atlas");
|
assetManager.loadText("tank.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = new spine.TextureAtlas(assetManager.get("tank.atlas"), function(path) {
|
var atlas = new spine.TextureAtlas(assetManager.get("tank.atlas"), function(path) {
|
||||||
return assetManager.get(path);
|
return assetManager.get(path);
|
||||||
@ -60,7 +66,10 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
setupInput();
|
setupInput();
|
||||||
|
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -142,10 +151,8 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
skeleton.updateWorldTransform();
|
skeleton.updateWorldTransform();
|
||||||
|
|
||||||
@ -153,7 +160,7 @@ var transformConstraintDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = bounds.y * 1.2;
|
renderer.camera.viewportHeight = bounds.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
var vineDemo = function(pathPrefix, loadingComplete) {
|
var vineDemo = function(pathPrefix, loadingComplete, bgColor) {
|
||||||
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
var COLOR_INNER = new spine.Color(0.8, 0, 0, 0.5);
|
||||||
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
var COLOR_OUTER = new spine.Color(0.8, 0, 0, 0.8);
|
||||||
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
var COLOR_INNER_SELECTED = new spine.Color(0.0, 0, 0.8, 0.5);
|
||||||
@ -6,15 +6,16 @@ var vineDemo = function(pathPrefix, loadingComplete) {
|
|||||||
|
|
||||||
var canvas, gl, renderer, input, assetManager;
|
var canvas, gl, renderer, input, assetManager;
|
||||||
var skeleton, state, bounds;
|
var skeleton, state, bounds;
|
||||||
var lastFrameTime = Date.now() / 1000;
|
var timeKeeper, loadingScreen;
|
||||||
var target = null;
|
var target = null;
|
||||||
var hoverTargets = [null, null, null, null, null];
|
var hoverTargets = [null, null, null, null, null];
|
||||||
var controlBones = ["vine-control1", "vine-control2", "vine-control3", "vine-control4"];
|
var controlBones = ["vine-control1", "vine-control2", "vine-control3", "vine-control4"];
|
||||||
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2();
|
var coords = new spine.webgl.Vector3(), temp = new spine.webgl.Vector3(), temp2 = new spine.Vector2();
|
||||||
var playButton, timeLine, isPlaying = true, playTime = 0;
|
var playButton, timeLine, isPlaying = true, playTime = 0;
|
||||||
|
|
||||||
function init () {
|
if (!bgColor) bgColor = new spine.Color(0, 0, 0, 1);
|
||||||
|
|
||||||
|
function init () {
|
||||||
canvas = document.getElementById("vinedemo-canvas");
|
canvas = document.getElementById("vinedemo-canvas");
|
||||||
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
|
||||||
gl = canvas.getContext("webgl", { alpha: false }) || canvas.getContext("experimental-webgl", { alpha: false });
|
gl = canvas.getContext("webgl", { alpha: false }) || canvas.getContext("experimental-webgl", { alpha: false });
|
||||||
@ -25,10 +26,14 @@ var vineDemo = function(pathPrefix, loadingComplete) {
|
|||||||
assetManager.loadTexture("vine.png");
|
assetManager.loadTexture("vine.png");
|
||||||
assetManager.loadText("vine.json");
|
assetManager.loadText("vine.json");
|
||||||
assetManager.loadText("vine.atlas");
|
assetManager.loadText("vine.atlas");
|
||||||
|
timeKeeper = new spine.TimeKeeper();
|
||||||
|
loadingScreen = new spine.webgl.LoadingScreen(renderer);
|
||||||
|
loadingScreen.backgroundColor = bgColor;
|
||||||
requestAnimationFrame(load);
|
requestAnimationFrame(load);
|
||||||
}
|
}
|
||||||
|
|
||||||
function load () {
|
function load () {
|
||||||
|
timeKeeper.update();
|
||||||
if (assetManager.isLoadingComplete()) {
|
if (assetManager.isLoadingComplete()) {
|
||||||
var atlas = new spine.TextureAtlas(assetManager.get("vine.atlas"), function(path) {
|
var atlas = new spine.TextureAtlas(assetManager.get("vine.atlas"), function(path) {
|
||||||
return assetManager.get(path);
|
return assetManager.get(path);
|
||||||
@ -57,7 +62,10 @@ var vineDemo = function(pathPrefix, loadingComplete) {
|
|||||||
setupInput();
|
setupInput();
|
||||||
|
|
||||||
loadingComplete(canvas, render);
|
loadingComplete(canvas, render);
|
||||||
} else requestAnimationFrame(load);
|
} else {
|
||||||
|
loadingScreen.draw();
|
||||||
|
requestAnimationFrame(load);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupUI() {
|
function setupUI() {
|
||||||
@ -139,10 +147,8 @@ var vineDemo = function(pathPrefix, loadingComplete) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render () {
|
function render () {
|
||||||
var now = Date.now() / 1000;
|
timeKeeper.update();
|
||||||
var delta = now - lastFrameTime;
|
var delta = timeKeeper.delta;
|
||||||
lastFrameTime = now;
|
|
||||||
if (delta > 0.032) delta = 0.032;
|
|
||||||
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
var animationDuration = state.getCurrent(0).animation.duration;
|
var animationDuration = state.getCurrent(0).animation.duration;
|
||||||
@ -162,7 +168,7 @@ var vineDemo = function(pathPrefix, loadingComplete) {
|
|||||||
renderer.camera.viewportHeight = bounds.y * 1.2;
|
renderer.camera.viewportHeight = bounds.y * 1.2;
|
||||||
renderer.resize(spine.webgl.ResizeMode.Fit);
|
renderer.resize(spine.webgl.ResizeMode.Fit);
|
||||||
|
|
||||||
gl.clearColor(0.2, 0.2, 0.2, 1);
|
gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
renderer.begin();
|
renderer.begin();
|
||||||
|
|||||||
68
spine-ts/webgl/src/LoadingScreen.ts
Normal file
68
spine-ts/webgl/src/LoadingScreen.ts
Normal file
File diff suppressed because one or more lines are too long
@ -118,6 +118,112 @@ module spine.webgl {
|
|||||||
this.batcher.draw(texture, quad, this.QUAD_TRIANGLES);
|
this.batcher.draw(texture, quad, this.QUAD_TRIANGLES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawTextureRotated (texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color: Color = null, premultipliedAlpha: boolean = false) {
|
||||||
|
this.enableRenderer(this.batcher);
|
||||||
|
if (color === null) color = this.WHITE;
|
||||||
|
let quad = this.QUAD;
|
||||||
|
|
||||||
|
// bottom left and top right corner points relative to origin
|
||||||
|
let worldOriginX = x + pivotX;
|
||||||
|
let worldOriginY = y + pivotY;
|
||||||
|
let fx = -pivotX;
|
||||||
|
let fy = -pivotY;
|
||||||
|
let fx2 = width - pivotX;
|
||||||
|
let fy2 = height - pivotY;
|
||||||
|
|
||||||
|
// construct corner points, start from top left and go counter clockwise
|
||||||
|
let p1x = fx;
|
||||||
|
let p1y = fy;
|
||||||
|
let p2x = fx;
|
||||||
|
let p2y = fy2;
|
||||||
|
let p3x = fx2;
|
||||||
|
let p3y = fy2;
|
||||||
|
let p4x = fx2;
|
||||||
|
let p4y = fy;
|
||||||
|
|
||||||
|
let x1 = 0;
|
||||||
|
let y1 = 0;
|
||||||
|
let x2 = 0;
|
||||||
|
let y2 = 0;
|
||||||
|
let x3 = 0;
|
||||||
|
let y3 = 0;
|
||||||
|
let x4 = 0;
|
||||||
|
let y4 = 0;
|
||||||
|
|
||||||
|
// rotate
|
||||||
|
if (angle != 0) {
|
||||||
|
let cos = MathUtils.cosDeg(angle);
|
||||||
|
let sin = MathUtils.sinDeg(angle);
|
||||||
|
|
||||||
|
x1 = cos * p1x - sin * p1y;
|
||||||
|
y1 = sin * p1x + cos * p1y;
|
||||||
|
|
||||||
|
x4 = cos * p2x - sin * p2y;
|
||||||
|
y4 = sin * p2x + cos * p2y;
|
||||||
|
|
||||||
|
x3 = cos * p3x - sin * p3y;
|
||||||
|
y3 = sin * p3x + cos * p3y;
|
||||||
|
|
||||||
|
x2 = x3 + (x1 - x4);
|
||||||
|
y2 = y3 + (y1 - y4);
|
||||||
|
} else {
|
||||||
|
x1 = p1x;
|
||||||
|
y1 = p1y;
|
||||||
|
|
||||||
|
x4 = p2x;
|
||||||
|
y4 = p2y;
|
||||||
|
|
||||||
|
x3 = p3x;
|
||||||
|
y3 = p3y;
|
||||||
|
|
||||||
|
x2 = p4x;
|
||||||
|
y2 = p4y;
|
||||||
|
}
|
||||||
|
|
||||||
|
x1 += worldOriginX;
|
||||||
|
y1 += worldOriginY;
|
||||||
|
x2 += worldOriginX;
|
||||||
|
y2 += worldOriginY;
|
||||||
|
x3 += worldOriginX;
|
||||||
|
y3 += worldOriginY;
|
||||||
|
x4 += worldOriginX;
|
||||||
|
y4 += worldOriginY;
|
||||||
|
|
||||||
|
quad[0] = x1;
|
||||||
|
quad[1] = y1;
|
||||||
|
quad[2] = color.r;
|
||||||
|
quad[3] = color.g;
|
||||||
|
quad[4] = color.b;
|
||||||
|
quad[5] = color.a;
|
||||||
|
quad[6] = 0;
|
||||||
|
quad[7] = 1;
|
||||||
|
quad[8] = x2;
|
||||||
|
quad[9] = y2;
|
||||||
|
quad[10] = color.r;
|
||||||
|
quad[11] = color.g;
|
||||||
|
quad[12] = color.b;
|
||||||
|
quad[13] = color.a;
|
||||||
|
quad[14] = 1;
|
||||||
|
quad[15] = 1;
|
||||||
|
quad[16] = x3;
|
||||||
|
quad[17] = y3;
|
||||||
|
quad[18] = color.r;
|
||||||
|
quad[19] = color.g;
|
||||||
|
quad[20] = color.b;
|
||||||
|
quad[21] = color.a;
|
||||||
|
quad[22] = 1;
|
||||||
|
quad[23] = 0;
|
||||||
|
quad[24] = x4;
|
||||||
|
quad[25] = y4;
|
||||||
|
quad[26] = color.r;
|
||||||
|
quad[27] = color.g;
|
||||||
|
quad[28] = color.b;
|
||||||
|
quad[29] = color.a;
|
||||||
|
quad[30] = 0;
|
||||||
|
quad[31] = 0;
|
||||||
|
this.batcher.draw(texture, quad, this.QUAD_TRIANGLES);
|
||||||
|
}
|
||||||
|
|
||||||
drawRegion (region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color: Color = null, premultipliedAlpha: boolean = false) {
|
drawRegion (region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color: Color = null, premultipliedAlpha: boolean = false) {
|
||||||
this.enableRenderer(this.batcher);
|
this.enableRenderer(this.batcher);
|
||||||
if (color === null) color = this.WHITE;
|
if (color === null) color = this.WHITE;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user